Quiero utilizar Vagrant para proporcionar un entorno de desarrollo común a mi equipo. Los anfitriones son completamente diferentes:
- Algunos usan OS X, algunos Linux y algunos Windows.
- Algunos usan VMware, algunos usan VirtualBox.
Dentro de la VM queremos ejecutar Linux.
Hasta ahora todo está bien.
Ahora nuestra idea era que cada desarrollador pudiera 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. Básicamente, esto también funciona ... excepto para los enlaces simbólicos.
Dentro de nuestro código fuente 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. La única cosa que podemos no hacer es deshacerse de los enlaces simbólicos, por lo que necesitamos otra manera de lidiar con esto.
Hasta ahora, hemos probado varias opciones:
- Hay una solución alternativa mencionada en un problema de Vagrant, desafortunadamente esto es solo para VirtualBox y no ayuda a quienes ejecutan VMware. Hasta ahora, no hemos encontrado una forma de ejecutar código en Vagrantfile dependiendo del proveedor utilizado.
- En lugar de usar una carpeta compartida estándar, ahora hemos intentado usar el tipo rsync . Esto funciona en Windows, pero se bloquea en OS X con una serie de errores que nos indican que
symlink has no referent
(un error por enlace simbólico). - Pensamos en NFS , pero eso solo funciona si no usa Windows como host.
- También pensamos en SMB , pero esto nuevamente solo funciona en Windows como host.
No puedo imaginar que seamos los únicos o las primeras personas en este planeta en experimentar problemas con hosts multiplataforma y enlaces simbólicos dentro de la carpeta compartida.
¿Cómo puede resolver este problema, de modo que podamos mantener enlaces simbólicos, pero seguir utilizando diferentes sistemas operativos de host?
fuente
Respuestas:
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 Vagrantfile:
Además, en Windows, vagrant up debe ejecutarse en un shell con derechos de administrador. No se necesitan soluciones alternativas.
fuente
vagrant up
Todo lo que se necesita es ejecutar en un shell con derechos de administrador. Como señaló @jdunk, esta opción de configuración ya está configurada de forma predeterminada en Vagrant, a partir de este compromiso que sucedió casi un año antes de que se publicara esta respuesta. Dicho esto, ejecutarvagrant up
en un shell con derechos de administrador resolvió mi problema.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 sincronizada ( no compartida ). E incluso si el OP estaba usando una carpeta compartida , la sugerencia de la respuesta aceptada es algo que ya se había integrado en vagrant a partir de 1.1, lanzado 15 meses antes de que el OP publicara la pregunta (sin mencionar que las carpetas compartidas de VirtualBox son abismalmente lentas ).
Encontré este mismo problema: en OS X, recibí el
symlink has no referent
error rsync. Personalmente, pude resolverlo agregando args rsync particulares a mivagrantfile
:También abrí este problema en el github de vagrant para señalar algo que parece estar mal con su valor predeterminado para
rsync__args
(específicamente, que uno de los argumentos predeterminados--copy-links
, parece estar rompiendo otro--archive
, al menos en lo que respecta a la copia de enlaces simbólicos rotos. ).fuente
--copy-links
opción está configurada de forma predeterminada. Este era mi problema. Al eliminar eso (usando su respuesta anterior), eso se soluciona.Probé todas estas opciones para resolver un error de ejecución
npm install
.Simplemente ejecutando vagrant en un indicador de administración y cargando el vm (
vagrant reload
), resolvió el problema.Volví y
SharedFoldersEnableSymlinksCreate
eliminé la configuración del Vagrantfile, y todo seguía bien.fuente
npm update
no funcionaba en mi carpeta compartida de vagabundos. Esta solución lo solucionó por alguna razón.El tipo de carpeta sincronizada predeterminado
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 (consulte el ticket 818 , un error de más de 7 años). Evite usarlo.La carpeta sincronizada de 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 a través de brew, sé que el OOTB es demasiado antiguo (2.x), lo que podría estar causando problemas.
fuente
[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 es un tipo de sistema de archivos, por lo que no podrá montarlo.Vagrantfile
y ejecutar manualmentevagrant rsync
ovagrant rsync-auto
. De lo contrario, solo se sincronizará al subir y volver a cargar.Después de preocuparme durante una hora y probar algunas soluciones diferentes (la solución
vagrant-vbguest
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
File.readlink
para leer en la ruta subyacente:fuente
Agregue la siguiente línea a Vagrantfile:
Esto funcionó para mí SÓLO después de degradar virtualbox 6.0.8 a 6.0.4 y vagrant 2.2.4 a 2.2.1.
cuando abres la terminal (yo uso git bash en Windows 10) con "Ejecutar como administrador".
también intente en git bash cambiando: en el archivo del proyecto: $ vim .git / config cambie a symlinks = true
fuente