こんにちは。最近はお絵描きに夢中なすろっくさんです。
環境を共有できるVagrantをとても好きです。
一方でVagrantを使ってて結構ハマりポイント多いなあ、と感じたので僕が調べたハマりポイントを書いておきます。
多分大体のVagrantの問題はこれで解決できそうな気がします。
ネットワークが繋がらない
Vagrantは最初にこんなコマンドを打つと思います。
$ vagrant init
このコマンドはVagratfileという設定ファイルを作成するコマンドです。この設定ファイルに書いた通りにVagrantは動作します。
このコマンドはフレームワークやアプリケーションフォルダの中で行います。Railsだと
$ rails new [アプリ名]
とかで作成されたアプリのフォルダのしたですね。そこでvagrant initとか打つんですが、たまにネットワークにどうすりゃええねんみたいなのがあります。
通常ならvagrant sshとかでSSHログインできるんですが、複数のvagrant立ち上げてHTTP通信とかさせるときはIPとか使いたいじゃないですか。もっというとホストマシン側からブラウザで確認したいじゃないですか。
そんなときはVagrantfileのここにこう書きます。
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.networkという設定項目はデフォルトで存在しているので探してみてください。コメントアウトを外して、HTTP通信の時に使いたいIPを設定します。
sshしたい時はアプリのフォルダに入ってvagrant ssh、MySQLやHTTPで確認したいときはこのIPでみたいな使い分けができると思います。
あ、複数たちあげるときは末尾を11,12みたいにVagratfileに記述かえていくといいです。IPかぶったら起動してくれないので。
IPで接続できない
vagrant sshでSSHログインはできてApacheとかnginxとかたてたけどサイトがみれないとかはあるはずです。
そんなときはiptablesとselinuxをオフにしましょう。
# iptables
chkconfig iptables off
/etc/init.d/iptables stop
# selinux
vi /etc/selinux/config
++++
SELINUX=disabled
++++
これで再起動してください。
デフォルトだとこいつらが動いて全部弾いている場合があるので、やっとくといいです。開発のときは邪魔者以外のなんでもありません。
ただし本番でiptablesをオフにするのは絶対やらないでくださいね!適切なファイアーウォール設定をしましょうね!
boxを再利用しようとしたらネットワークエラーがでる
box再利用しようとしてvagrant upしたらこんなエラーがでてIPが降られず、/vagrantがマウントされなかった覚えはありませんか?
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
ARPCHECK=no /sbin/ifup eth1 2> /dev/null
Stdout from the command:
Device eth1 does not seem to be present, delaying initialization.
Stderr from the command:
HWADDR欄の文字列がコピー元と同じものになっているとこういうエラーがでるようです。
そんなときは以下の手順でファイルを消しましょう。
rm -rf /etc/udev/rules.d/70-persistent-net.rules
rm -rf /etc/udev/rules.d/70-persistent-cd.rules
その後仮想マシンから一旦ログアウトし、以下のコマンドを打ちます。
$ vagrant reload
今度はちゃんとIPとMACアドレスが新規のものになることが確認出来るはずです。
VagrantでLinux系統をvagrant upするとエラーが出続けてログインできなくなる
最新版のvagrantで起こるエラーなんですがLinux系を入れようとした時vagrant upしたらこんな感じになったことありませんか?
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
default: Warning: Authentication failure. Retrying...
default: Warning: Authentication failure. Retrying...
実はこれvagrant側のバグでして、1.8.6以降で解決予定の模様です。
Macだとインストール先は以下になります。
/opt/vagrant/embedded/gems/bin/vagrant/vagrant-1.8.5
plugins/guests/linux/cap/public_key.rbっていうファイルがあるんで、その56行目に以下を追加してください。
chmod 0600 ~/.ssh/authorized_keys
一応1.8.6がリリースされたら直るみたいなので、お悩みの方はぜひ。
まとめ
使ってみて思ったんですが、vagrantを使ってLinuxを扱うときは「vagrantの設定」「Linuxの設定」、今自分が悩んでいることはどちらに起因するものなのか、きちんと押さえてから使うのがいいかなと思います。
個人的にLinuxに明るくない開発者にそういったことを強制するようじゃ、まだ開発ツールの一環としてはちょっとつらいかなあ、オススメできないかなあ、という気もするんですけども。使えれば本当に楽なんですけどね。
「なんかわからないけど繋がらなくなった」という結論を出す前にどうかおためしいただけるとvagrabtの名誉のためによろしくおねがいいたします!