8

Vagrant ボックスの (再) パッケージ化で奇妙な問題に直面しています。これが話です

  • Vagrant をインストールし、いくつかのパペット マニフェストを正常に作成しました。すべて正常に動作し、vagrant up ... プロビジョニング ...
  • 次に、nfs がゲスト OS にインストールされていなかったため失敗した NFS に切り替える必要がありました (Ubuntu 11.04-amd64)
  • nfs-common をゲスト OS にインストールしました ( sudo apt-get install nfs-common)
  • vagrant halt
  • vagrant up
  • また、NFS マウントは、いくつかの停止/起動コマンドの後でも問題なく動作します。満足しています!

次の論理的なステップは、ボックスをパッケージ化することです。これにより、VM が破棄されるたびに nfs-common を再インストールする必要がなくなります。

  • 上記と同じディレクトリ:vagrant package
  • vagrant box add ubuntuvm2 package.box
  • rm package.box
  • Vagrantfileの行config.vm.boxを ubuntuvm2 に変更します
  • vagrant destroy
  • vagrant up
  • そして突然 nfs マウントが失敗し、VM に sshing すると、nfs-common が実際にインストールされていることを確認できますが、NFS マウントは失敗するだけです: https://img.skitch.com/20120302-kwix296t44y31rxkd52pwm72f4.jpg

解決策を探し始める方向を知っている人はいますか?

OS-X Lion で Virtualbox 4.1.8 と Vagrant 1.0.0 を使用しています

4

4 に答える 4

13

私はまったく同じ問題を抱えていましたが、私はそれを理解しました。少なくとも今はうまくいきます。:)

TL;DR:

  • /etc/exports で構文エラーを確認し、動作することを確認したエントリで /etc/exports を再作成します。
  • ボックスのネットワーク インターフェイスが正しく初期化されていることを確認します (/etc/network/interfaces を確認し、ifconfig -a を実行します)。
  • 少なくとも Debian と Ubuntu は、永続的なネットワーク デバイスに関する情報を /etc/udev/rules.d/70-persistent-net.rules に保存します。eth1 が eth2 として初期化されている場合は、新しいボックス インスタンスを作成するときにネットワーク カードの MAC アドレスが再生成されるためです。/etc/udev/rules.d/70-persistent-net.rules を rm して、ボックスを再パッケージ化します。
  • ボックスの更新を再パッケージ化できない場合は、eth1 の代わりに eth2 を使用するように /etc/network/interfaces を更新します。

長い形式:

  • Vagrant は 1.0.1 です
  • OS X は 10.7.3 です
  • ボックスはカスタム Debian Wheezy 64 です。

ボックスをリロードまたは再作成すると、NFS マウントで通常のメッセージが表示されて終了します。

[default] Mounting NFS shared folders...
Mounting NFS shared folders failed. This is most often caused by the NFS
client software not being installed on the guest machine. Please verify
that the NFS client software is properly installed, and consult any resources
specific to the linux distro you're using for more information on how to
do this.

/etc/exports ファイルをNFS Managerで検査すると、/etc/exports に構文エラーが含まれていることがわかります。

/etc/exports を一掃し、次のエントリで nfs クライアントとサーバーをテストします。

/Users/tm/git -alldirs localhost 33.33.33.10

vagrant up を実行すると、NFS マウントが再び機能します。

apt-get dist-upgrade の後にボックスを再パッケージ化すると、NFS フォルダーが再度マウントされないことに気付きました。

今回は /etc/exports ファイルにエラーはありませんでした。Vagrant がホストのローカル インターフェイスを初期化していないことがわかりました。

/etc/network/interfaces には次の内容が含まれていました。

#VAGRANT-BEGIN
# The contents below are automatically generated by Vagrant. Do not modify.
auto eth1
iface eth1 inet static
    address 33.33.33.10
    netmask 255.255.255.0
#VAGRANT-END

ifconfig -a はこれを返しました:

eth0      Link encap:Ethernet  HWaddr 08:00:27:3a:47:72  
      inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
      inet6 addr: fe80::a00:27ff:fe3a:4772/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:971 errors:0 dropped:0 overruns:0 frame:0
      TX packets:614 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:83951 (81.9 KiB)  TX bytes:74872 (73.1 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:89:f5:e3  
      BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

インターフェイスが正しく定義されていません。eth2 NFS マウントを使用するように /etc/network/interfaces スタンザを更新すると、再び機能します。

于 2012-03-15T12:22:08.623 に答える
4

これに関する未解決のバグと解決策は次のとおりです。

https://github.com/mitchellh/vagrant/issues/997

  1. /etc/udev/rules.d/70-persistent-net.rules以外のインターフェイスの行を編集および削除します。eth0
  2. vagrant package
  3. vagrant box add mypack package.box
  4. vagrant destroy
  5. Vagrantfile設定config.vm.box_mypack
  6. vagrant up

これをMAC OS X 10.7.5およびCentOS 6.2 64ビットでテストしました

更新:バグは現在クローズされ、移動されていますが、まだ問題が発生しているようです。

于 2012-11-14T03:07:31.270 に答える
0

ここでの既存の回答に加えて、ファイアウォールの可能性を忘れないでください。ホスト マシンでファイアウォールを実行している場合。エラーメッセージはそれを示していないように見えますが、エラーは非常に一般的です。

NoobProof や IceFloor を使用する場合は、ファイアウォールを無効にするか、適切な例外を作成してください。

于 2013-03-16T16:17:08.870 に答える