Program LOG

勉強した内容をまとめ中。。。間違ってたら教えて。。。

Vagrantでネットワークにつながらない時

Vagrantファイルを修正し、起動して設定。。。それをパッケージ化して、
VagrantBoxを作成した後、その作成したBoxを利用して新しい仮想マシンを作成すると、
なぜか、ネットワークにつながりませんでした。。。
色々調査したので、その対策をまとめておきたいと思います。

使用環境

エラーの内容

新しく作成した仮想マシンを起動した際のエラー内容は以下の通りです。

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もやりたいなぁ・・・。