2014-06-13 50 views
79

我想使用Vagrant爲我的團隊提供一個通用開發環境。主機是完全不同的:Vagrant中的符號鏈接和同步文件夾

  • 一些使用OS X,一些Linux和一些Windows。
  • 有的使用VMware,有的使用VirtualBox。

在VM的內部我們要運行Linux。

到目前爲止,一切都很好。

現在我們的想法是每個開發人員都應該能夠使用他們選擇的IDE,因此我們引入了一個共享文件夾,該文件夾共享主機和VM之間的源代碼。這基本上,工作以及...符號鏈接除外。

在我們的源代碼中,我們實際上確實有一些符號鏈接,這在虛擬機內部的Linux內部不是問題,但是在Windows上因爲主機而導致問題。我們唯一能做的就是而不是這樣做是擺脫了符號鏈接,所以我們需要另一種方式來解決這個問題。

到目前爲止,我們已經嘗試了多種選擇:

  • 有在流浪的issue提到的解決方法,可惜這是VirtualBox的,僅供參考,並不幫助那些誰運行VMware。到目前爲止,取決於所使用的提供商,我們尚未找到在流浪文件中運行代碼的方法。
  • 而不是使用標準的共享文件夾,我們現在嘗試使用rsync類型。這適用於Windows,但在OS X上崩潰並帶有一些錯誤,告訴我們symlink has no referent(每個符號鏈接一個錯誤)。
  • 我們考慮過NFS,但只有在您不使用Windows作爲主機時纔有效。
  • 我們也儘管約SMB,但這隻能作爲主機在Windows上運行。

我無法想象我們是這個星球上唯一或第一批在共享文件夾中遇到多平臺主機和符號鏈接問題的人。

如何解決此問題,以便我們可以保留符號鏈接,但仍使用不同的主機操作系統?

+0

這裏討論:https://github.com/mitchellh/vagrant/issues/713#issuecomment-4416384 –

+0

@SteveBennett,這個問題(目前接受的答案參考)已在15個月發佈的Vagrant 1.1中解決在OP發佈問題之前。無論如何它都是關於VirtualBox共享文件夾,而不是rsync'd文件夾。看到我的答案在下面(接受的答案是錯誤的)。 – jdunk

回答

42

出於安全原因,Virtualbox不允許共享文件夾上的符號鏈接。爲了使符號鏈接下面的行需要被添加到在Vagrantfile VM提供配置塊:

config.vm.provider "virtualbox" do |v| 
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] 
end 

此外,在Windows無業遊民了需求與管理權限的shell來執行。 沒有必要的解決方法。

+9

我懷疑OP和許多查看這個問題的人可以互換地使用術語「共享」和「同步」。請注意OP的第二個重點,強烈暗示他正在使用共享文件夾,但嘗試切換到rsynced文件夾是因爲它們不起作用。 IIRC,這裏提供的解決方案解決了我遇到的問題,無論如何。 –

+2

@SteveBennett,同意重新:潛在的困惑。所有更多的理由澄清。很難想象這個建議能夠解決你的問題,因爲它涉及到這樣一個老問題,除非你使用了一個相當老舊的流浪者版本。考慮到VBox對共享目錄的糟糕文件系統性能(例如「git status」需要幾秒鐘),儘管它可能只是分享一個只有很少文件的小項目,但即使這樣做,IMO也沒有什麼幫助。 http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines – jdunk

+0

在MacOS上使用http://vccw.cc/嘗試了這一點,但沒有奏效。 – Meglio

2

默認的已同步文件夾類型爲vboxsf具有大量文件/目錄的已知性能問題,並且缺少對符號鏈接和硬鏈接的支持(請參閱門票818 - 一個7歲以上的錯誤)。避免使用它。

rsync類型的同步文件夾可能是您的最佳選擇。

你提到它崩潰了,你運行的是什麼版本的rsync?嘗試通過brew將其更新到3.1.0,我知道OOTB太舊了(2.x),這可能會導致問題。

+0

'[wdd @ localhost〜] $ sudo mount -t rsync節點共享 mount:未知文件系統類型'rsync'' – Musa

+1

我很高興當我閱讀這個答案時,認爲它可以解決我的問題,但當我得到與上面相同的我做'sudo mount -t rsync shared/var/www'錯誤是'mount:未知文件系統類型'rsync'' – samayo

+0

'rsync'永遠不是文件系統類型,所以你將無法安裝它。 –

1

經過一個小時的忙亂並嘗試了幾種不同的解決方案(vagrant-vbguest,Marvin的建議修復)後,我無法獲得共享文件夾中的符號鏈接以使用VirtualBox 4.8.10,Vagrant 1.5.1。

我發現一個簡單的解決方法是配置一個單獨的共享文件夾,然後使用Ruby的File.readlink底層路徑爲:

config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path" 
+1

我不明白。你能用一個例子來解釋嗎?謝謝 – Cassiano

81

接受的答案是沒有好處的。該問題描述了與同步的問題文件夾,不是共享文件夾。建議的解決方案對rsynced(未共享)文件夾不起作用。即使OP使用共享文件夾,接受的答案的建議是有already been integrated into vagrant as of 1.1, released 15 months before the OP posted the question(更不用說VirtualBox's shared folders are abysmally slow)。


我遇到了同樣的問題:在OS X上,我得到了symlink has no referent rsync的錯誤。我個人能夠通過添加特定的rsync參數傳遞給我的vagrantfile來解決它:

config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"] 

我對流浪者的github上指出,似乎是錯的rsync__args其默認值(具體的東西還opened this issue,至少就複製損壞的符號鏈接而言,其中一個默認參數--copy-links似乎又突破另一個--archive)。

+0

良好的電話 - 謝謝@ jdunk。是的,根據Vagrant文​​檔,'-copy-links'選項默認設置。這是我的問題。通過刪除(使用上面的答案) - 這需要照顧它。 –

+1

非常有用,謝謝。雖然我希望Windows替代。 –

+4

請注意,根據Vagrant文​​檔,共享文件夾是VirtualBox用戶的默認同步文件夾類型:「如果您使用的是VirtualBox提供程序,則VirtualBox共享文件夾是默認的同步文件夾類型。」 (http://docs.vagrantup.com/v2/synced-folders/virtualbox.html)OP的問題似乎也意味着VirtualBox共享文件夾是一個問題,因此接受的答案確實試圖解決至少部分問題(並且確實爲我解決了這個問題)。 – Ajedi32

2

我試過所有這些選項以解決運行npm install的錯誤。

只需在管理員提示符下運行vagrant並加載vm(vagrant reload),即可解決問題。

我回去並從Vagrantfile中刪除了SharedFoldersEnableSymlinksCreate配置,一切都還好。

+0

'npm update'在我的流浪者共享文件夾中不起作用。這個解決方案由於某種原因修復了它 – Emre

+0

經過更多研究後,事實證明,默認情況下,創建符號鏈接需要在Windows中具有管理員權限。要修改權限,請在此處查看答案: https://superuser.com/a/125981 – gameweld

相關問題