synchronization - una - Enlaces simbólicos y carpetas sincronizadas en Vagrant
no se puede crear el enlace simbólico (5)
Después de preocuparme por una hora y probar algunas soluciones diferentes ( vagrant-vbguest
, la solución sugerida por Marvin), no pude obtener enlaces simbólicos en carpetas compartidas para trabajar con VirtualBox 4.8.10, Vagrant 1.5.1.
Descubrí que una solución más simple es configurar una carpeta compartida separada y luego usar Ruby''s File.readlink
para leer en la ruta subyacente:
config.vm.synced_folder File.readlink(''SYMLINK''), "/mount/path"
Quiero usar Vagrant para proporcionar un entorno de desarrollo común para mi equipo. Los anfitriones son completamente diferentes:
- Algunos usan OS X, algunos Linux y algunos Windows.
- Algunos usan VMware, otros usan VirtualBox.
Dentro de la VM, queremos ejecutar Linux.
Hasta ahora, todo está bien.
Ahora nuestra idea era que cada desarrollador pueda usar el IDE de su elección, y por lo tanto, hemos introducido una carpeta sincronizada que comparte el código fuente entre el host y la VM. Esto, básicamente, también funciona ... a excepción de los enlaces simbólicos.
Dentro de nuestro código fuente, realmente tenemos algunos enlaces simbólicos, lo cual no es un problema dentro de Linux dentro de la VM, pero en Windows como host, esto causa problemas. Lo único que no podemos hacer es deshacernos de los enlaces simbólicos, por lo que necesitamos otra forma de lidiar con esto.
Hasta ahora, hemos intentado una serie de opciones:
- Hay una solución alternativa mencionada en un issue de Vagrant. Desafortunadamente, esto es solo para VirtualBox y no ayuda a quienes ejecutan VMware. Hasta ahora, no hemos encontrado una forma de ejecutar el código en Vagrantfile dependiendo del proveedor utilizado.
- En lugar de usar una carpeta compartida estándar, ahora hemos intentado usar el tipo de rsync . Esto funciona en Windows, pero se bloquea en OS X con una serie de errores que nos dicen que el
symlink has no referent
(un error por enlace simbólico). - Pensamos en NFS , pero eso solo funciona si no usas Windows como host.
- También pensamos en SMB , pero esto solo funciona en Windows como host.
No puedo imaginar que somos las únicas o las primeras personas en este planeta en experimentar problemas con hosts multiplataforma y enlaces simbólicos dentro de la carpeta compartida.
¿Cómo se puede resolver este problema, para que podamos mantener enlaces simbólicos, pero todavía utilizar diferentes sistemas operativos host?
El tipo de carpeta sincronizada por defecto es vboxsf
tiene un problema de rendimiento conocido con una gran cantidad de archivos / directorios, y carece de soporte para enlaces simbólicos y enlaces duros (ver ticket 818 - un error de más de 7 años). Evita usarlo.
La carpeta sincronizada tipo rsync puede ser su mejor opción.
Mencionaste que se bloqueó, ¿qué versión de rsync estás ejecutando? Intente actualizarlo a 3.1.0 vía brew, sé que el OOTB es demasiado antiguo (2.x), lo que podría estar causando problemas.
Intenté todas estas opciones para resolver un error al ejecutar la npm install
.
Simplemente ejecutar vagabundo en un indicador de administrador y cargar el vm (recargo vagrant reload
), resolvió el problema.
Volví y eliminé la configuración SharedFoldersEnableSymlinksCreate
del Vagrantfile, y todo seguía estando bien.
La respuesta aceptada no es buena. La pregunta describe un problema con las carpetas sincronizadas , no con las carpetas compartidas . La solución propuesta no tendría ningún efecto en una carpeta rsynced ( no compartida ). E incluso si el OP usaba una carpeta compartida , la sugerencia de la respuesta aceptada es algo que ya se había integrado en vagabundo desde 1.1, publicado 15 meses antes de que OP publicara la pregunta (sin mencionar que mitchellh.com/… ).
Me encontré con este mismo problema: en OS X, obtuve el symlink has no referent
error de symlink has no referent
rsync. Personalmente pude resolverlo agregando rsync args particulares a mi vagrantfile
:
config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]
También abrí este problema en vagabundo github para señalar algo que parece estar mal con su valor predeterminado para rsync__args
(específicamente, que uno de los --copy-links
predeterminados, --copy-links
, parece estar rompiendo otro, --archive
, en al menos en lo que se refiere a la copia de enlaces simbólicos rotos).
Virtualbox no permite enlaces simbólicos en carpetas compartidas por razones de seguridad. Para habilitar los enlaces simbólicos, se debe agregar la siguiente línea al bloque de configuración del proveedor de VM en el archivo Vagrant:
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
Además, en Windows vagrant up debe ejecutarse en un shell con derechos de administrador. No hay soluciones temporales necesarias.