Eu quero usar o Vagrant para fornecer um ambiente de desenvolvimento comum para minha equipe. Os anfitriões são completamente diferentes:
- Alguns usam OS X, alguns Linux e alguns Windows.
- Alguns usam VMware, alguns usam VirtualBox.
Dentro da VM, queremos executar o Linux.
Até agora está tudo bem.
Nossa ideia era que cada desenvolvedor fosse capaz de usar o IDE de sua escolha e, portanto, introduzimos uma pasta sincronizada que compartilha o código-fonte entre o host e a VM. Isso basicamente funciona bem ... exceto para links simbólicos.
Dentro de nosso código-fonte, temos alguns links simbólicos, o que não é um problema no Linux dentro da VM, mas no Windows como host isso causa problemas. A única coisa que nós podemos não fazer é se livrar das ligações simbólicas, então precisamos de uma outra maneira de lidar com isso.
Até agora, tentamos várias opções:
- Há uma solução alternativa mencionada em uma edição do Vagrant, infelizmente isso é apenas para o VirtualBox e não ajuda quem executa o VMware. Até agora, não encontramos uma maneira de executar o código no Vagrantfile dependendo do provedor usado.
- Em vez de usar uma pasta compartilhada padrão, agora tentamos usar o tipo rsync . Isso funciona no Windows, mas trava no OS X com uma série de erros informando que o
symlink has no referent
(um erro por link simbólico). - Pensamos no NFS , mas isso só funciona se você não usar o Windows como host.
- Também pensamos sobre o SMB , mas isso só funciona no Windows como host.
Não posso imaginar que sejamos as únicas ou as primeiras pessoas neste planeta a ter problemas com hosts multiplataforma e links simbólicos dentro da pasta compartilhada.
Como você pode resolver esse problema, para que possamos manter links simbólicos, mas ainda usar sistemas operacionais de host diferentes?
fonte
Respostas:
O Virtualbox não permite links simbólicos em pastas compartilhadas por razões de segurança. Para habilitar os links simbólicos, a seguinte linha precisa ser adicionada ao bloco de configuração do provedor vm no Vagrantfile:
Além disso, no Windows, o vagrant up precisa ser executado em um shell com direitos de administrador. Nenhuma solução alternativa necessária.
fonte
vagrant up
em um shell com direitos de administrador é tudo o que é necessário. Como @jdunk apontou, esta opção de configuração já está definida por padrão no Vagrant, a partir desse commit que aconteceu quase um ano antes desta resposta ser postada. Dito isso, executarvagrant up
em um shell com direitos de administrador resolveu meu problema.A resposta aceita não é boa. A pergunta descreve um problema com pastas sincronizadas , não com pastas compartilhadas . A solução proposta não teria efeito em uma pasta rsynced ( não compartilhada ). E mesmo que o OP usasse uma pasta compartilhada , a sugestão de resposta aceita é algo que já havia sido integrado ao vagrant a partir de 1.1, lançado 15 meses antes do OP postar a pergunta (sem falar que as pastas compartilhadas do VirtualBox são terrivelmente lentas ).
Eu encontrei o mesmo problema: no OS X, recebi o
symlink has no referent
erro rsync. Eu fui pessoalmente capaz de resolvê-lo adicionando argumentos rsync específicos ao meuvagrantfile
:Eu também abri este problema no github do vagrant para apontar algo que parece estar errado com seu valor padrão para
rsync__args
(especificamente, que um dos args padrão,,--copy-links
parece estar quebrando outro--archive
, pelo menos no que diz respeito à cópia de links simbólicos quebrados )fonte
--copy-links
opção é definida por padrão. Esse era o meu problema. Removendo isso (usando sua resposta acima) - isso resolve o problema.Tentei todas essas opções para resolver um erro de execução
npm install
.Basta executar o vagrant em um prompt de administrador e carregar o vm (
vagrant reload
) para resolver o problema.Voltei e removi a
SharedFoldersEnableSymlinksCreate
configuração do Vagrantfile, e tudo ainda estava bem.fonte
npm update
não estava funcionando na minha pasta compartilhada vagrant. Esta solução corrigiu por algum motivo.O tipo de pasta sincronizada padrão
vboxsf
tem um problema de desempenho conhecido com grande número de arquivos / diretórios e não tem suporte para links simbólicos e links físicos (ver tíquete 818 - um bug de 7 anos ou mais). Evite usá-lo.A pasta sincronizada do tipo rsync pode ser sua melhor escolha.
Você mencionou que ele travou, qual versão do rsync você está executando? Tente atualizá-lo para 3.1.0 via brew, eu sei que o OOTB é muito antigo (2.x), o que pode estar causando problemas.
fonte
[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
sudo mount -t rsync shared /var/www
mount: unknown filesystem type 'rsync'
rsync
nunca é um tipo de sistema de arquivos, então você não será capaz de montá-lo.Vagrantfile
e executar manualmentevagrant rsync
ouvagrant rsync-auto
. Caso contrário, ele só será sincronizado na inicialização e recarregado.Depois de mexer por uma hora e tentar algumas soluções diferentes (
vagrant-vbguest
correção sugerida por Marvin), não consegui obter links simbólicos em pastas compartilhadas para trabalhar com o VirtualBox 4.8.10, Vagrant 1.5.1.Descobri que uma solução mais simples é configurar uma pasta compartilhada separada e, em seguida, usar o Ruby
File.readlink
para ler o caminho subjacente:fonte
Adicione a seguinte linha ao Vagrantfile:
Isso funcionou para mim SOMENTE depois de fazer o downgrade do Virtualbox 6.0.8 para 6.0.4 e do vagrant 2.2.4 para 2.2.1.
quando você abre o terminal (eu uso git bash no windows 10) com "Executar como Admin".
também tente mudar o git bash: no arquivo de projeto: $ vim .git / config mudar para links simbólicos = true
fonte