NFS falha após empacotar uma caixa do Vagrant
-
13-12-2019 - |
Pergunta
Estou enfrentando um problema estranho ao (re) embalar uma caixa do Vagrant e espero que talvez alguém possa me dizer em que direção olhar.Esta é a história
- Instalei o Vagrant e criei com sucesso alguns manifestos de fantoches e tudo funciona bem, vagrant up ...provisionamento, ...
- Então eu precisei mudar para o NFS, que falhou porque o nfs não estava instalado no meu sistema operacional convidado (Ubuntu 11.04-amd64)
- Eu instalei o nfs-common no sistema operacional convidado (
sudo apt-get install nfs-common
) vagrant halt
vagrant up
- E a montagem NFS funciona perfeitamente, mesmo depois de vários comandos halt/up, estou feliz!
A próxima etapa lógica seria empacotar a caixa para que eu não precise reinstalar o nfs-common sempre que a VM for destruída.
- No mesmo diretório acima:
vagrant package
vagrant box add ubuntuvm2 package.box
rm package.box
- mudar a linha
config.vm.box
no Vagrantfile para ubuntuvm2 vagrant destroy
vagrant up
- e de repente a montagem do NFS falha, quando sshing na VM posso confirmar que o nfs-common está realmente instalado, mas a montagem do NFS simplesmente falha: https://img.skitch.com/20120302-kwix296t44y31rxkd52pwm72f4.jpg
Alguém tem alguma ideia de em que direção começar a procurar uma solução?
Estou usando o Virtualbox 4.1.8 e o Vagrant 1.0.0 no OS-X Lion
Solução
Eu tive exatamente o mesmo problema, mas descobri.Pelo menos funciona para mim agora.:)
DR:
- Verifique /etc/exports em busca de erros de sintaxe e recrie /etc/exports com uma entrada que você tenha certeza de que funciona.
- Verifique se as interfaces de rede na caixa foram inicializadas corretamente (verifique /etc/network/interfaces e execute ifconfig -a).
- Pelo menos o Debian e o Ubuntu armazenam informações sobre o dispositivo de rede persistente em /etc/udev/rules.d/70-persistent-net.rules.Se você perceber que eth1 foi inicializado como eth2 é porque o endereço MAC da placa de rede é regenerado quando você cria uma nova instância de caixa.rm /etc/udev/rules.d/70-persistent-net.rules e reembale sua caixa.
- Se você não conseguir reempacotar sua caixa, atualize /etc/network/interfaces para usar eth2 em vez de eth1
Forma longa:
- Vagabundo é 1.0.1
- OS X é 10.7.3
- A caixa é Debian Wheezy 64 personalizada.
Ao recarregar ou recriar a caixa, ela morreria na montagem NFS com a mensagem típica.
[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.
Inspecionando o arquivo /etc/exports com Gerenciador NFS isso me diz que meu /etc/exports contém erros de sintaxe.
Eu limpo /etc/exports e testo o cliente e servidor nfs com esta entrada:
/Users/tm/git -alldirs localhost 33.33.33.10
Ao executar o vagrant up, a montagem do NFS está funcionando novamente.
Ao reembalar a caixa após o apt-get dist-upgrade notei que as pastas NFS não seriam montadas novamente.
Desta vez não houve erros no arquivo /etc/exports.Descobri que o Vagrant não inicializou a interface local do host.
/etc/network/interfaces continha isto:
#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 retornou isto:
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)
A interface não foi definida corretamente.Depois de atualizar a sub-rotina /etc/network/intefaces para usar a montagem eth2 NFS está funcionando novamente.
Outras dicas
Aqui está um bug aberto sobre isso e uma solução:
https://github.com/mitchellh/vagrant/issues/997
- editar
/etc/udev/rules.d/70-persistent-net.rules
e excluir linhas para interfaces diferenteseth0
vagrant package
vagrant box add mypack package.box
vagrant destroy
- Em
Vagrantfile
definirconfig.vm.box
paramypack
vagrant up
Eu testei isso no MAC OS X 10.7.5 e CentOS 6.2 64 bits
ATUALIZAR: o bug agora está fechado e mudou-se mas parece que as pessoas ainda estão tendo o problema.
Além das respostas existentes aqui:Não se esqueça dos possíveis firewalls.Se você executar um firewall em sua máquina host.O erro é muito genérico, embora a mensagem de erro não pareça indicar isso.
Se você usa NoobProof e/ou IceFloor, desative o firewall ou faça as exceções adequadas.
no Ubuntu 12 Host/Ubuntu 12 Guest o seguinte funcionou para mim com discurso
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
observação;Eu também tive que adicionar o IP do host determinado pelo vagrant e o IP do convidado determinado pelo Vagrant às exceções do firewall