8

我在(重新)包装 Vagrant 盒子时遇到了一个奇怪的问题,希望也许有人能告诉我看哪个方向。这是故事

  • 我安装了 Vagrant 并成功创建了一些 puppet manifests,一切正常,vagrant up ...配置,...
  • 然后我需要切换到失败的 NFS,因为我的来宾操作系统(Ubuntu 11.04-amd64)上没有安装 nfs
  • 我在来宾操作系统上安装了 nfs-common ( 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 挂载失败,当 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;博士:

  • 检查 /etc/exports 是否有语法错误,并使用您确定有效的条目重新创建 /etc/exports。
  • 验证盒子上的网络接口是否已正确初始化(检查 /etc/network/interfaces 并运行 ifconfig -a)。
  • 至少 Debian 和 Ubuntu 将有关持久网络设备的信息存储在 /etc/udev/rules.d/70-persistent-net.rules 中。如果你看到eth1被初始化为eth2那是因为你在新建box实例的时候重新生成了网卡的mac地址。rm /etc/udev/rules.d/70-persistent-net.rules 并重新包装你的盒子。
  • 如果您无法重新打包您的盒子,请更新 /etc/network/interfaces 以使用 eth2 instad of eth1

长表:

  • 流浪者是 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.

使用NFS 管理器检查 /etc/exports 文件,它告诉我我的 /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)

接口定义不正确。更新 /etc/network/intefaces 节以使用 eth2 后,NFS 安装再次工作。

于 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.boxmypack
  6. vagrant up

我在 MAC OS X 10.7.5 和 CentOS 6.2 64bit 上测试了这个

更新:该错误现已关闭并已移动,但看起来人们仍然遇到问题。

于 2012-11-14T03:07:31.270 回答
0

除了这里现有的答案:不要忘记可能的防火墙。如果您在主机上运行防火墙。该错误非常笼统,即使错误消息似乎没有表明这一点。

如果您使用 NoobProof 和/或 IceFloor,请禁用防火墙或进行适当的例外处理。

于 2013-03-16T16:17:08.870 回答
0

在 Ubuntu 12 主机/Ubuntu 12 来宾上,以下内容对我有用

nfs_setting = RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", type: "nfs", nfs_udp: "true", nfs_version: "4", :nfs => nfs_setting

笔记; 我还必须将 vagrant 确定的主机 IP 和 Vagrant 确定的访客 IP 添加到防火墙异常

于 2014-02-10T21:46:40.137 回答