Je souhaite utiliser Vagrant pour fournir un environnement de développement commun à mon équipe. Les hôtes sont complètement différents:
À l’intérieur de VM), nous souhaitons utiliser Linux.
Jusqu'à présent, tout va bien.
Maintenant, notre idée était que chaque développeur puisse utiliser le IDE de son choix) et nous avons donc introduit un dossier synchronisé qui partage le code source entre l'hôte et la machine virtuelle. aussi… sauf pour les liens symboliques.
Dans notre code source, nous avons en fait quelques liens symboliques, ce qui ne pose pas de problème sous Linux dans la machine virtuelle, mais sous Windows en tant qu'hôte, cela pose des problèmes. La seule chose que nous puissions ne pas faire est de supprimer les liens symboliques. Nous avons donc besoin d'une autre façon de gérer cela.
Jusqu'à présent, nous avons essayé plusieurs options:
symlink has no referent
_ (une erreur par lien symbolique).Je ne peux pas imaginer que nous sommes les seules ou les premières personnes sur cette planète à avoir des problèmes avec des hôtes multi-plateformes et des 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?
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:
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
De plus, sur les fenêtres vagabondes, il doit être exécuté dans un shell avec des droits d'administrateur. Aucune solution de contournement nécessaire.
La réponse acceptée n'est pas bonne. La question décrit un problème avec les dossiers synchronisés , et non partagé dossiers. La solution proposée n’aurait aucun effet sur un dossier rsynced ( non partagé). Et même si le PO utilisait un dossier partagé , la suggestion de réponse acceptée est quelque chose qui avait déjà été intégré à vagrant à partir de 1.1, publié 15 mois avant que le PO ne pose sa question (sans parler de les dossiers partagés de VirtualBox sont extrêmement lents ).
J'ai rencontré le même problème: sous OS X, j'ai le symlink has no referent
erreur rsync. J'ai personnellement pu le résoudre en ajoutant des arguments rsync particuliers à mon vagrantfile
:
config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]
J'ai aussi ouvert ce numéro sur le github de vagrant pour signaler quelque chose qui semble être faux avec leur valeur par défaut pour rsync__args
_ (spécifiquement, l’un des arguments par défaut, --copy-links
, semble en briser une autre, --archive
, du moins en ce qui concerne la copie de liens symboliques rompus).
J'ai essayé toutes ces options afin de résoudre une erreur en cours d'exécution npm install
.
Il suffit de lancer vagrant dans une invite d’administration et de charger le vm (vagrant reload
), a résolu le problème.
Je suis retourné et j'ai retiré la configuration SharedFoldersEnableSymlinksCreate
du fichier Vagrant, et tout allait bien.
Le type de dossier synchronisé par défaut est vboxsf
a des problèmes de performances connus avec un grand nombre de fichiers/répertoires et ne prend pas en charge les liens symboliques et les liens physiques (voir ticket 818 - âgé de plus de 7 ans punaise). Évitez de l'utiliser.
le dossier synchronisé de type rsync peut être votre meilleur choix.
Vous avez mentionné le blocage, quelle version de rsync utilisez-vous? Essayez de le mettre à jour à la version 3.1.0 via brew, je connais le OOTB l’un est bien trop ancien (2.x), ce qui pourrait poser problème.
Après avoir passé une heure à s’agiter et à essayer différentes solutions (vagrant-vbguest
, Suggestion de Marvin), je ne pouvais pas utiliser les liens symboliques dans les 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é distinct, puis à utiliser Ruby's File.readlink
à lire dans le chemin sous-jacent:
config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path"
Ajoutez la ligne suivante à Vagrantfile:
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
Cela a fonctionné pour moi SEULEMENT après avoir rétrogradé virtualbox 6.0.8 à 6.0.4 et vagrant 2.2.4 à 2.2.1.
lorsque vous ouvrez un terminal (j'utilise git bash sur Windows 10) avec "Exécuter en tant qu'administrateur".
essayez aussi de changer dans git bash: dans le fichier projet: $ vim .git/config change en symlinks = true
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = true
ignorecase = true
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
remote = Origin
merge = refs/heads/master