Vagrantでネットワークにつながらない時
Vagrantファイルを修正し、起動して設定。。。それをパッケージ化して、
VagrantBoxを作成した後、その作成したBoxを利用して新しい仮想マシンを作成すると、
なぜか、ネットワークにつながりませんでした。。。
色々調査したので、その対策をまとめておきたいと思います。
使用環境
- ホストOS: Windows7 x64
- VirtualBox: 4.3.10
- Vagrant: 1.5.2
- ゲストOS: CentOS6.4 x64
エラーの内容
新しく作成した仮想マシンを起動した際のエラー内容は以下の通りです。
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:
エラーの原因
色々調査したところ、原因は、以下。
ブリッジ、もしくはホストオンリーネットワーク構成で起動すると、ネットワークインターフェース設定ファイルがVagrantにより作成されるのは前述しましたが、OS側ではネットワークインターフェースが追加された際に、ネットワークインターフェースとMACアドレスをマッピングしています。
パッケージングしたボックスで新しく仮想マシンを起動すると別のMACアドレスが割り振られるため、OS側は新しいネットワークインターフェースeth2としてマッピングしてしまうようです。 にもかかわらず、ネットワークインターフェース設定ファイルはeth1用しか準備されておらず、eth1はOS側ではすでに存在しないMACアドレスのため、起動に失敗します。
対策
パッケージ化する前にゲスト側にログインして、MACアドレスとのマッピングを無効する必要があります。
その前に、rollbackしたいので、saharaプラグインを入れておきたいと思います。
saharaプラグインについては、別途記事にしたいと思っていたので、ここでは詳細を記載しませんが、
sandboxモードがあり、設定しておくと、チェックポイントへ簡単に元に戻す事が出来ます。
まずはインストールから。
$ vagrant plugin install sahara Installing the 'sahara' plugin. This can take a few minutes... Installed the plugin 'sahara (0.0.16)'!
インストールできたので、早速sandboxをonにしてvagrantを起動していきたいと思います。
$ vagrant sandbox on 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% $ vagrant up ・・・以下省略 $ vagrant ssh Last login: Sun Apr 13 09:21:46 2014 from 10.0.2.2 Welcome to your Vagrant-built virtual machine.
sandboxモードがonになったので、MACアドレスとのマッピングを無効していきたいと思います。
[vagrant@localhost ~]$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules [vagrant@localhost ~]$ exit
そしたら、次に再度パッケージを作成し、設定を元に戻したいと思います。
詳しくは、以下の記事を参照下さい。
Windows&Vagrantで自動仮想環境構築 - provisioning+自作BOX - Program LOG
$ vagrant package $ vagrant box add apache_box package.box $ rm package.box $ vagrant sandbox rollback 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
以上でパッケージ化が完成しました。
一応設定が戻っているか確認してみてください。
僕の場合iptables stopが戻ってしまっていて、一時間くらいハマってしまいました。。。
次に、新たに作成したBOXで仮想マシンを作成します。
今回は次回用にrubyに環境用のマシンを作成します。
$ cd ../ruby/ $ vagrant init apache_box
作成されたVagrantファイルのprivate_networkを修正して、起動します。
$ vagrant up
今回は無事に起動し、エラーも特に出ませんでした。
一瞬意味が分からないエラーでしたが、先人達のおかげで、簡単に対応する事が出来ました。
参考サイトのブロガーさんに感謝します!
次は、rubyの環境構築等をやっていきたいと思います。
それ以外にも、今回から導入しはじめたvagrantプラグインにも触れたいと思います。
chef-soloもやりたいなぁ・・・。