Saya ingin menggunakan Vagrant untuk menyediakan lingkungan pengembangan umum bagi tim saya. Tuan rumah benar-benar berbeda:
- Beberapa menggunakan OS X, beberapa Linux, dan beberapa Windows.
- Beberapa menggunakan VMware, beberapa menggunakan VirtualBox.
Di dalam VM kami ingin menjalankan Linux.
Sejauh ini semuanya baik-baik saja.
Sekarang ide kami adalah bahwa setiap pengembang akan dapat menggunakan IDE pilihan mereka, dan karenanya kami telah memperkenalkan folder tersinkronisasi yang membagikan kode sumber antara host dan VM. Ini pada dasarnya, bekerja dengan baik… kecuali untuk tautan simbolik.
Di dalam kode sumber kami, kami sebenarnya memiliki beberapa tautan simbolis, yang tidak menjadi masalah di dalam Linux di dalam VM, tetapi pada Windows sebagai host, hal ini menyebabkan masalah. Satu-satunya hal yang tidak dapat kita lakukan adalah menghilangkan tautan simbolis, jadi kita memerlukan cara lain untuk mengatasinya.
Sejauh ini, kami telah mencoba sejumlah opsi:
- Ada solusi yang disebutkan dalam masalah Vagrant, sayangnya ini hanya untuk VirtualBox dan tidak membantu mereka yang menjalankan VMware. Sejauh ini, kami belum menemukan cara menjalankan kode di Vagrantfile bergantung pada penyedia yang digunakan.
- Alih-alih menggunakan folder bersama standar, kami sekarang mencoba menggunakan tipe rsync . Ini berfungsi pada Windows, tetapi crash pada OS X dengan sejumlah kesalahan yang memberi tahu kita bahwa
symlink has no referent
(satu kesalahan per tautan simbolik). - Kami memikirkan tentang NFS , tetapi itu hanya berfungsi jika Anda tidak menggunakan Windows sebagai host.
- Kami juga memikirkan tentang SMB , tetapi ini lagi-lagi hanya berfungsi di Windows sebagai host.
Saya tidak dapat membayangkan bahwa kita adalah satu-satunya atau orang pertama di planet ini yang mengalami masalah dengan host multi-platform dan tautan simbolis dalam folder bersama.
Bagaimana Anda dapat mengatasi masalah ini, sehingga kami dapat menyimpan tautan simbolik, tetapi masih menggunakan sistem operasi host yang berbeda?
sumber
Jawaban:
Virtualbox tidak mengizinkan symlink pada folder bersama untuk alasan keamanan. Untuk mengaktifkan symlink, baris berikut perlu ditambahkan ke blok konfigurasi penyedia vm di Vagrantfile:
Selain itu, di windows vagrant up perlu dijalankan di shell dengan hak admin. Tidak ada solusi yang diperlukan.
sumber
vagrant up
shell dengan hak admin adalah semua yang diperlukan. Seperti yang ditunjukkan @jdunk, opsi konfigurasi ini sudah disetel secara default di Vagrant, sejak pengubahan ini terjadi hampir setahun sebelum jawaban ini diposting. Karena itu, menjalankanvagrant up
shell dengan hak admin memang menyelesaikan masalah saya.Jawaban yang diterima tidak bagus. Pertanyaannya menjelaskan masalah dengan folder yang disinkronkan , bukan folder bersama . Solusi yang diusulkan tidak akan berpengaruh pada folder rsynced ( tidak dibagi ). Dan bahkan jika OP menggunakan folder bersama , saran jawaban yang diterima adalah sesuatu yang telah diintegrasikan ke gelandangan sejak 1.1, dirilis 15 bulan sebelum OP memposting pertanyaan (belum lagi folder bersama VirtualBox sangat lambat ).
Saya mengalami masalah yang sama: di OS X, saya mendapat
symlink has no referent
error rsync. Saya secara pribadi dapat menyelesaikannya dengan menambahkan argumen rsync tertentu ke filevagrantfile
:Saya juga membuka masalah ini di github gelandangan untuk menunjukkan sesuatu yang tampaknya salah dengan nilai defaultnya
rsync__args
(khususnya, salah satu argumen default--copy-links
,, tampaknya melanggar yang lain,,--archive
setidaknya sejauh menyalin symlink yang rusak terkait ).sumber
--copy-links
opsi ini ditetapkan secara default. Ini adalah masalahku. Dengan menghapusnya (menggunakan jawaban Anda di atas) - itu sudah beres.Saya mencoba semua opsi ini untuk mengatasi kesalahan yang sedang berjalan
npm install
.Cukup menjalankan vagrant di prompt admin dan memuat vm (
vagrant reload
), menyelesaikan masalah.Saya kembali dan menghapus
SharedFoldersEnableSymlinksCreate
konfigurasi dari Vagrantfile, dan semuanya masih baik-baik saja.sumber
npm update
tidak bekerja di folder bersama gelandangan saya. Solusi ini memperbaikinya karena beberapa alasan.Jenis folder tersinkronisasi default
vboxsf
memiliki masalah kinerja yang diketahui dengan sejumlah besar file / direktori, dan tidak memiliki dukungan untuk tautan simbolis dan tautan keras (lihat tiket 818 - bug berusia 7+ tahun). Hindari menggunakannya.folder tersinkron tipe rsync mungkin pilihan terbaik Anda.
Anda menyebutkan bahwa itu macet, versi rsync apa yang Anda jalankan? Coba perbarui ke 3.1.0 melalui brew, saya tahu OOTB terlalu tua (2.x), yang dapat menyebabkan masalah.
sumber
[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
sudo mount -t rsync shared /var/www
kesalahanmount: unknown filesystem type 'rsync'
rsync
bukanlah jenis sistem file sehingga Anda tidak dapat memasangnya.Vagrantfile
dan secara manual menjalankanvagrant rsync
atauvagrant rsync-auto
. Jika tidak, itu hanya akan disinkronkan saat dimuat dan dimuat ulang.Setelah repot selama satu jam dan mencoba beberapa solusi berbeda (
vagrant-vbguest
, perbaikan yang disarankan Marvin), saya tidak bisa mendapatkan symlink di folder bersama untuk bekerja dengan VirtualBox 4.8.10, Vagrant 1.5.1.Saya menemukan bahwa solusi yang lebih sederhana adalah mengonfigurasi folder bersama yang terpisah dan kemudian menggunakan Ruby
File.readlink
untuk membaca di jalur yang mendasarinya:sumber
Tambahkan baris berikut ke Vagrantfile:
Ini bekerja untuk saya HANYA setelah saya menurunkan virtualbox 6.0.8 menjadi 6.0.4 dan gelandangan 2.2.4 ke 2.2.1.
ketika Anda membuka terminal (saya menggunakan git bash di windows 10) dengan "Run as Admin".
coba juga di git bash mengubah: dalam file proyek: $ vim .git / config ubah menjadi symlinks = true
sumber