Je souhaite utiliser Vagrant pour fournir un environnement de développement commun à mon équipe. Les hôtes sont complètement différents:
- Certains utilisent OS X, certains Linux et certains Windows.
- Certains utilisent VMware, certains utilisent VirtualBox.
À l'intérieur de la machine virtuelle, nous voulons exécuter Linux.
Jusqu'à présent, tout va bien.
À présent, notre idée était que chaque développeur puisse utiliser l'EDI de son choix, et nous avons donc introduit un dossier synchronisé qui partage le code source entre l'hôte et la VM. Cela fonctionne aussi bien… sauf pour les liens symboliques.
À l'intérieur de notre code source, nous avons en fait quelques liens symboliques, ce qui n'est pas un problème dans le Linux à l'intérieur de la VM, mais sur Windows en tant qu'hôte, cela pose des problèmes. La seule chose que nous ne pouvons pas faire est de nous débarrasser des liens symboliques, nous avons donc besoin d'un autre moyen de gérer cela.
Jusqu'à présent, nous avons essayé un certain nombre d'options:
- Il existe une solution de contournement mentionnée dans un numéro de Vagrant, malheureusement, il s'agit uniquement de VirtualBox et n'aide pas ceux qui exécutent VMware. Jusqu'à présent, nous n'avons pas trouvé de moyen d'exécuter du code dans le Vagrantfile en fonction du fournisseur utilisé.
- Au lieu d'utiliser un dossier partagé standard, nous avons maintenant essayé d'utiliser le type rsync . Cela fonctionne sous Windows, mais plante sous OS X avec un certain nombre d'erreurs nous indiquant que le
symlink has no referent
(une erreur par lien symbolique). - Nous avons pensé à NFS , mais cela ne fonctionne que si vous n'utilisez pas Windows comme hôte.
- Nous avons également pensé à SMB , mais cela ne fonctionne encore que sur Windows en tant qu'hôte.
Je ne peux pas imaginer que nous soyons les seuls ou les premiers sur cette planète à rencontrer des problèmes avec les hôtes multi-plateformes et les liens symboliques dans le dossier partagé.
Comment pouvez-vous résoudre ce problème, afin que nous puissions conserver des liens symboliques, tout en utilisant des systèmes d'exploitation hôtes différents?
la source
Réponses:
Virtualbox n'autorise pas les liens symboliques sur les dossiers partagés pour des raisons de sécurité. Pour activer les liens symboliques, la ligne suivante doit être ajoutée au bloc de configuration du fournisseur vm dans le fichier Vagrant:
De plus, sur Windows, vagrant up doit être exécuté dans un shell avec des droits d'administrateur. Aucune solution de contournement nécessaire.
la source
vagrant up
dans un shell avec des droits d'administrateur est tout ce qui est nécessaire. Comme @jdunk l'a souligné, cette option de configuration est déjà définie par défaut dans Vagrant, à partir de ce commit qui s'est produit presque un an avant que cette réponse ne soit publiée. Cela dit, courirvagrant up
dans un shell avec des droits d'administrateur a résolu mon problème.La réponse acceptée n'est pas bonne. La question décrit un problème avec les dossiers synchronisés , pas les dossiers partagés . La solution proposée n'aurait aucun effet sur un dossier rsynced ( non partagé ). Et même si l'OP utilisait un dossier partagé , la suggestion de la réponse acceptée est quelque chose qui avait déjà été intégré dans vagrant à partir de la version 1.1, publiée 15 mois avant que l'OP ait posté la question (sans oublier que les dossiers partagés de VirtualBox sont extrêmement lents ).
J'ai rencontré ce même problème: sous OS X, j'ai eu l'
symlink has no referent
erreur rsync. J'ai personnellement pu le résoudre en ajoutant des arguments rsync particuliers à monvagrantfile
:J'ai également ouvert ce numéro sur le github de vagrant pour signaler quelque chose qui semble être incorrect avec leur valeur par défaut pour
rsync__args
(en particulier, que l'un des arguments par défaut--copy-links
, semble en casser un autre--archive
, du moins en ce qui concerne la copie de liens symboliques rompus ).la source
--copy-links
option est définie par défaut. C'était mon problème. En supprimant cela (en utilisant votre réponse ci-dessus) - cela s'en occupe.J'ai essayé toutes ces options afin de résoudre une erreur en cours d'exécution
npm install
.Le simple fait d'exécuter vagrant dans une invite d'administration et le chargement de vm (
vagrant reload
) ont résolu le problème.Je suis retourné et j'ai supprimé la
SharedFoldersEnableSymlinksCreate
configuration du Vagrantfile, et tout allait toujours bien.la source
npm update
ne fonctionnait pas dans mon dossier partagé vagabond. Cette solution l'a corrigé pour une raison quelconque.Le type de dossier synchronisé par défaut
vboxsf
a un problème de performance connu avec un grand nombre de fichiers / répertoires, et ne prend pas en charge les liens symboliques et les liens physiques (voir ticket 818 - un bogue vieux de 7 ans et plus). Évitez de l'utiliser.Le dossier synchronisé de type rsync peut être votre meilleur choix.
Vous avez mentionné qu'il s'est écrasé, quelle version de rsync utilisez-vous? Essayez de le mettre à jour vers 3.1.0 via brew, je sais que celui OOTB est bien trop ancien (2.x), ce qui pourrait causer des problèmes.
la source
[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
sudo mount -t rsync shared /var/www
l'erreurmount: unknown filesystem type 'rsync'
rsync
n'est jamais un type de système de fichiers, vous ne pourrez donc pas le monter.Vagrantfile
et exécuter manuellementvagrant rsync
ouvagrant rsync-auto
. Sinon, il ne sera synchronisé et rechargé.Après avoir travaillé pendant une heure et essayé quelques solutions différentes (
vagrant-vbguest
, solution suggérée par Marvin), je n'ai pas pu obtenir de liens symboliques dans des dossiers partagés pour fonctionner avec VirtualBox 4.8.10, Vagrant 1.5.1.J'ai trouvé qu'une solution plus simple consiste à configurer un dossier partagé séparé, puis à utiliser Ruby
File.readlink
pour lire le chemin sous-jacent:la source
Ajoutez la ligne suivante à Vagrantfile:
Cela a fonctionné pour moi UNIQUEMENT après avoir rétrogradé virtualbox 6.0.8 à 6.0.4 et vagrant 2.2.4 à 2.2.1.
lorsque vous ouvrez le terminal (j'utilise git bash sur Windows 10) avec "Exécuter en tant qu'administrateur".
essayez aussi dans git bash en changeant: dans le fichier projet: $ vim .git / config change en symlinks = true
la source