Ich möchte Vagrant verwenden, um meinem Team eine gemeinsame Entwicklungsumgebung bereitzustellen. Die Gastgeber sind völlig anders:
- Einige verwenden OS X, einige Linux und einige Windows.
- Einige verwenden VMware, andere VirtualBox.
Innerhalb der VM möchten wir Linux ausführen.
Bisher ist alles in Ordnung.
Unsere Idee war nun, dass jeder Entwickler die IDE seiner Wahl verwenden kann. Daher haben wir einen synchronisierten Ordner eingeführt, der den Quellcode zwischen dem Host und der VM gemeinsam nutzt. Dies funktioniert im Grunde auch… mit Ausnahme von symbolischen Links.
In unserem Quellcode gibt es tatsächlich einige symbolische Links, was unter Linux in der VM kein Problem darstellt, aber unter Windows als Host verursacht dies Probleme. Das einzige, was wir nicht tun können, ist, die symbolischen Verknüpfungen loszuwerden. Wir brauchen also einen anderen Weg, um damit umzugehen.
Bisher haben wir eine Reihe von Optionen ausprobiert:
- In einer Ausgabe von Vagrant wird eine Problemumgehung erwähnt. Leider ist dies nur VirtualBox und hilft nicht denjenigen, die VMware ausführen. Bisher haben wir keine Möglichkeit gefunden, Code in der Vagrant-Datei auszuführen, je nach verwendetem Anbieter.
- Anstatt einen freigegebenen Standardordner zu verwenden, haben wir jetzt versucht, den Typ rsync zu verwenden. Dies funktioniert unter Windows, stürzt jedoch unter OS X mit einer Reihe von Fehlern ab, die uns mitteilen, dass
symlink has no referent
(ein Fehler pro symbolischem Link). - Wir haben über NFS nachgedacht , aber das funktioniert nur, wenn Sie Windows nicht als Host verwenden.
- Wir haben auch über SMB nachgedacht , aber dies funktioniert wieder nur unter Windows als Host.
Ich kann mir nicht vorstellen, dass wir die einzigen oder ersten Personen auf diesem Planeten sind, die Probleme mit Hosts mit mehreren Plattformen und symbolischen Links im freigegebenen Ordner haben.
Wie können Sie dieses Problem lösen, damit wir symbolische Links beibehalten und dennoch unterschiedliche Host-Betriebssysteme verwenden können?
quelle
Antworten:
Virtualbox erlaubt aus Sicherheitsgründen keine Symlinks zu freigegebenen Ordnern. Um Symlinks zu aktivieren, muss die folgende Zeile zum Konfigurationsblock des VM-Providers in der Vagrant-Datei hinzugefügt werden:
Darüber hinaus muss unter Windows Vagrant Up in einer Shell mit Administratorrechten ausgeführt werden. Keine Problemumgehungen erforderlich.
quelle
vagrant up
in einer Shell mit Administratorrechten ist alles, was erforderlich ist. Wie @jdunk hervorhob, ist diese Konfigurationsoption in Vagrant bereits standardmäßig festgelegt, und zwar ab diesem Commit, das fast ein Jahr vor der Veröffentlichung dieser Antwort erfolgte. Das heißt, das Ausführenvagrant up
in einer Shell mit Administratorrechten hat mein Problem gelöst.Die akzeptierte Antwort ist nicht gut. Die Frage beschreibt ein Problem mit synchronisierten Ordnern, nicht mit freigegebenen Ordnern. Die vorgeschlagene Lösung hätte keine Auswirkungen auf einen synchronisierten ( nicht freigegebenen ) Ordner. Und selbst wenn das OP einen freigegebenen Ordner verwendet, ist der Vorschlag der akzeptierten Antwort bereits ab 1.1 in Vagrant integriert, der 15 Monate vor der Veröffentlichung der Frage durch das OP veröffentlicht wurde (ganz zu schweigen davon, dass die freigegebenen Ordner von VirtualBox äußerst langsam sind ).
Ich bin auf dasselbe Problem gestoßen: Unter OS X wurde der
symlink has no referent
Fehler rsync angezeigt. Ich konnte es persönlich lösen, indem ich meinem rsync bestimmte Argumente hinzufügtevagrantfile
:Ich habe dieses Problem auch auf Vagrants Github eröffnet, um auf etwas hinzuweisen, das mit seinem Standardwert für falsch zu sein scheint
rsync__args
(insbesondere, dass eines der Standardargumente ein--copy-links
anderes zu brechen scheint--archive
, zumindest was das Kopieren defekter Symlinks betrifft ).quelle
--copy-links
Option standardmäßig festgelegt. Das war mein Problem. Indem Sie das entfernen (mit Ihrer Antwort oben) - das kümmert sich darum.Ich habe alle diese Optionen ausprobiert, um einen laufenden Fehler zu beheben
npm install
.Durch einfaches Ausführen von vagrant in einer Admin-Eingabeaufforderung und Laden von vm (
vagrant reload
) wurde das Problem behoben.Ich ging zurück und entfernte die
SharedFoldersEnableSymlinksCreate
Konfiguration aus der Vagrant-Datei, und alles war noch in Ordnung.quelle
npm update
funktionierte nicht in meinem freigegebenen Ordner. Diese Lösung hat es aus irgendeinem Grund behoben.Der standardmäßig synchronisierte Ordnertyp
vboxsf
weist ein bekanntes Leistungsproblem mit einer großen Anzahl von Dateien / Verzeichnissen auf und unterstützt keine symbolischen und festen Links (siehe Ticket 818 - ein über 7 Jahre alter Fehler). Vermeiden Sie es.Der synchronisierte Ordner vom Typ rsync ist möglicherweise die beste Wahl.
Sie haben erwähnt, dass es abgestürzt ist. Welche Version von rsync verwenden Sie? Versuchen Sie, es über Brew auf 3.1.0 zu aktualisieren. Ich weiß, dass der OOTB viel zu alt ist (2.x), was zu Problemen führen kann.
quelle
[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
sudo mount -t rsync shared /var/www
den Fehlermount: unknown filesystem type 'rsync'
rsync
ist niemals ein Dateisystemtyp, daher können Sie ihn nicht bereitstellen.Vagrantfile
und manuell ausführen müssenvagrant rsync
odervagrant rsync-auto
. Andernfalls wird es nur beim Hochladen und Neuladen synchronisiert.Nachdem ich eine Stunde lang herumgespielt und ein paar verschiedene Lösungen ausprobiert hatte (
vagrant-vbguest
Marvins Lösungsvorschlag ), konnte ich keine Symlinks in freigegebenen Ordnern für die Arbeit mit VirtualBox 4.8.10, Vagrant 1.5.1 erhalten.Ich fand, dass eine einfachere Lösung darin besteht, einen separaten freigegebenen Ordner zu konfigurieren und dann mit Ruby
File.readlink
den zugrunde liegenden Pfad einzulesen:quelle
Fügen Sie Vagrantfile die folgende Zeile hinzu:
Dies funktionierte NUR für mich, nachdem ich virtualbox 6.0.8 auf 6.0.4 und vagrant 2.2.4 auf 2.2.1 heruntergestuft hatte.
Wenn Sie das Terminal öffnen (ich verwende Git Bash unter Windows 10) mit "Als Administrator ausführen".
Versuchen Sie auch, die Git-Bash zu ändern: In der Projektdatei: $ vim .git / config in symlinks = true ändern
quelle