Chcę używać Vagrant, aby zapewnić mojemu zespołowi wspólne środowisko programistyczne. Gospodarze są zupełnie inni:
- Niektórzy używają OS X, niektórzy Linux, a niektórzy Windows.
- Niektórzy używają VMware, niektórzy używają VirtualBox.
Wewnątrz maszyny wirtualnej chcemy uruchomić Linuksa.
Jak dotąd wszystko jest w porządku.
Nasz pomysł polegał na tym, że każdy programista będzie mógł korzystać z wybranego przez siebie IDE, dlatego wprowadziliśmy zsynchronizowany folder, który udostępnia kod źródłowy między hostem a maszyną wirtualną. Zasadniczo działa to również… z wyjątkiem dowiązań symbolicznych.
Wewnątrz naszego kodu źródłowego faktycznie mamy kilka dowiązań symbolicznych, co nie jest problemem w Linuksie wewnątrz maszyny wirtualnej, ale w systemie Windows jako hosta powoduje to problemy. Jedyne, czego nie możemy zrobić, to pozbyć się dowiązań symbolicznych, więc potrzebujemy innego sposobu, aby sobie z tym poradzić.
Do tej pory wypróbowaliśmy kilka opcji:
- W numerze Vagrant jest omówione obejście , niestety jest to tylko VirtualBox i nie pomaga tym, którzy używają VMware. Jak dotąd nie znaleźliśmy sposobu na uruchomienie kodu w Vagrantfile w zależności od używanego dostawcy.
- Zamiast używać standardowego folderu współdzielonego, próbowaliśmy teraz użyć typu rsync . Działa to w systemie Windows, ale ulega awarii w systemie OS X z wieloma błędami informującymi nas, że
symlink has no referent
(jeden błąd na łącze symboliczne). - Myśleliśmy o NFS , ale działa to tylko wtedy, gdy nie używasz systemu Windows jako hosta.
- Pomyśleliśmy również o SMB , ale to znowu działa tylko w systemie Windows jako host.
Nie mogę sobie wyobrazić, że jesteśmy jedynymi lub pierwszymi osobami na tej planecie, które mają problemy z wieloplatformowymi hostami i symbolicznymi linkami w udostępnionym folderze.
Jak rozwiązać ten problem, abyśmy mogli zachować dowiązania symboliczne, ale nadal używać różnych systemów operacyjnych hosta?
źródło
Odpowiedzi:
Virtualbox nie zezwala na dowiązania symboliczne do folderów współdzielonych ze względów bezpieczeństwa. Aby włączyć łącza symboliczne, do bloku konfiguracyjnego dostawcy maszyny wirtualnej w pliku Vagrantfile należy dodać następujący wiersz:
Dodatkowo w systemie Windows vagrant up musi być uruchamiany w powłoce z uprawnieniami administratora. Nie są potrzebne żadne obejścia.
źródło
vagrant up
uruchomić w powłoce z uprawnieniami administratora. Jak zauważył @jdunk, ta opcja konfiguracji jest już domyślnie ustawiona w Vagrant, od tego zatwierdzenia, które miało miejsce prawie rok przed opublikowaniem tej odpowiedzi. To powiedziawszy, uruchomienievagrant up
w powłoce z uprawnieniami administratora rozwiązało mój problem.Przyjęta odpowiedź nie jest dobra. Pytanie dotyczy problemu z synchronizowanymi folderami, a nie folderami udostępnionymi . Proponowane rozwiązanie nie miałoby wpływu na folder zsynchronizowany ( nie udostępniony ). I nawet jeśli OP korzystał z folderu współdzielonego , sugestia zaakceptowanej odpowiedzi jest czymś, co zostało już zintegrowane z włóczęgą od 1.1, wydanej 15 miesięcy przed opublikowaniem pytania przez OP (nie wspominając o udostępnionych folderach VirtualBox są strasznie powolne ).
Napotkałem ten sam problem: na OS X otrzymałem
symlink has no referent
błąd rsync. Osobiście udało mi się go rozwiązać, dodając określone argumenty rsync do mojegovagrantfile
:Otworzyłem również ten problem na githubie włóczęgi, aby wskazać coś, co wydaje się być nie tak z ich domyślną wartością
rsync__args
(konkretnie, że jeden z domyślnych argumentów--copy-links
wydaje się łamać inny,--archive
przynajmniej jeśli chodzi o kopiowanie uszkodzonych linków symbolicznych ).źródło
--copy-links
opcja jest ustawiona domyślnie. To był mój problem. Usuwając to (używając swojej odpowiedzi powyżej) - to załatwia sprawę.Wypróbowałem wszystkie te opcje, aby rozwiązać problem z działaniem
npm install
.Po prostu uruchomienie vagranta w monicie administratora i załadowanie maszyny wirtualnej (
vagrant reload
) rozwiązało problem.Wróciłem i usunąłem
SharedFoldersEnableSymlinksCreate
konfigurację z pliku Vagrantfile i wszystko nadal było w porządku.źródło
npm update
nie działa w moim folderze współdzielonym włóczęgi. To rozwiązanie naprawiło to z jakiegoś powodu.Domyślny typ folderu zsynchronizowanego
vboxsf
ma znany problem z wydajnością z dużą liczbą plików / katalogów i nie obsługuje dowiązań symbolicznych i twardych (patrz zgłoszenie 818 - błąd sprzed 7 lat). Unikaj używania go.Folder synchronizowany typu rsync może być najlepszym wyborem.
Wspomniałeś, że się zawiesił, jakiej wersji rsync używasz? Spróbuj zaktualizować go do wersji 3.1.0 przez brew, wiem, że OOTB jest zbyt stary (2.x), co może powodować problemy.
źródło
[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
sudo mount -t rsync shared /var/www
błądmount: unknown filesystem type 'rsync'
rsync
nigdy nie jest typem systemu plików, więc nie będzie można go zamontować.Vagrantfile
i ręcznie uruchomićvagrant rsync
lubvagrant rsync-auto
. W przeciwnym razie zostanie zsynchronizowany tylko po uruchomieniu i ponownym załadowaniu.Po godzinie kłopotania się i wypróbowania kilku różnych rozwiązań (zgodnie
vagrant-vbguest
z sugestią Marvina) nie udało mi się uzyskać dowiązań symbolicznych w folderach współdzielonych do pracy z VirtualBox 4.8.10, Vagrant 1.5.1.Odkryłem, że prostszym rozwiązaniem jest skonfigurowanie oddzielnego folderu współdzielonego, a następnie użycie Rubiego
File.readlink
do odczytu w podstawowej ścieżce:źródło
Dodaj następujący wiersz do pliku Vagrantfile:
To zadziałało dla mnie TYLKO po obniżeniu virtualbox 6.0.8 do 6.0.4 i włóczędze 2.2.4 do 2.2.1.
kiedy otwierasz terminal (ja używam git bash w Windows 10) z "Uruchom jako administrator".
spróbuj także zmienić git bash: w pliku projektu: $ vim .git / config zmień na symbollinks = true
źródło