Vagrant中的符号链接和同步文件夹

Gol*_*den 94 rsync synchronization sync vagrant vagrantfile

我想使用Vagrant为我的团队提供一个共同的开发环境.主机完全不同:

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

在VM内部我们想要运行Linux.

到目前为止,一切都很好.

现在我们的想法是每个开发人员都应该能够使用他们选择的IDE,因此我们引入了一个同步文件夹,该文件夹共享主机和VM之间的源代码.这基本上也适用......除了符号链接.

在我们的源代码中,我们实际上有一些符号链接,这在VM内部的Linux中不是问题,但在Windows上作为主机,这会导致问题.我们唯一不能做的就是摆脱符号链接,所以我们需要另一种方法来解决这个问题.

到目前为止,我们尝试了许多选择:

  • 在Vagrant 问题中提到了一种解决方法,不幸的是,这只是VirtualBox,并没有帮助那些运行VMware的人.到目前为止,我们还没有找到在Vagrantfile中运行代码的方法,具体取决于使用的提供程序.
  • 我们现在尝试使用rsync类型,而不是使用标准的共享文件夹.这适用于Windows,但在OS X上崩溃时会出现一些错误,告诉我们symlink has no referent(每个符号链接有一个错误).
  • 我们考虑过NFS,但只有在不使用Windows作为主机时才有效.
  • 我们也关于SMB,但这只能在Windows上作为主机使用.

我无法想象我们是这个星球上唯一或第一个遇到共享文件夹中的多平台主机和符号链接问题的人.

你如何解决这个问题,以便我们可以保持符号链接,但仍然使用不同的主机操作系统?

jdu*_*unk 91

接受的答案是不好的.该问题描述了同步文件夹的问题,而不是 共享文件夹.建议的解决方案对rsynced(非共享)文件夹没有影响.即使OP使用的是共享文件夹,接受的答案的建议也是已经整合到流浪者中的1.1版本,在OP发布问题前15个月发布(更不用说VirtualBox的共享文件夹非常慢).


我遇到了同样的问题:在OS X上,我遇到了symlink has no referentrsync错误.我个人能够通过添加特定的rsync args来解决它vagrantfile:

config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]
Run Code Online (Sandbox Code Playgroud)

我还在vagrant的github上打开了这个问题,指出了一些看似错误的东西rsync__args(特别是那个默认的args --copy-links,似乎打破了另一个,--archive至少就复制破坏的符号链接而言) ).

  • 请注意,根据Vagrant文​​档,共享文件夹是VirtualBox用户的同步文件夹的默认类型:"如果您使用的是VirtualBox提供程序,则VirtualBox共享文件夹是默认的同步文件夹类型." (http://docs.vagrantup.com/v2/synced-folders/virtualbox.html)OP的问题似乎也暗示VirtualBox共享文件夹是一个问题,因此接受的答案确实试图解决至少部分问题(确实为我解决了问题). (4认同)

小智 59

出于安全原因,Virtualbox不允许在共享文件夹上使用符号链接.要启用符号链接,需要将以下行添加到Vagrantfile中的vm提供程序配置块:

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
Run Code Online (Sandbox Code Playgroud)

此外,在Windows上,vagrant up需要在具有管理员权限的shell中执行.没有必要的变通方法.

  • 我怀疑OP和观看这个问题的很多人都在互换地使用"共享"和"同步"一词.请注意OP的第二个要点强烈暗示他正在使用共享文件夹,但尝试切换到rsynced文件夹,因为它们不起作用.IIRC,这里提供的解决方案解决了我遇到的问题,无论如何. (9认同)
  • 只需要在具有管理员权限的shell中运行`vagrant up`即可.正如@jdunk所指出的那样,这个配置选项在Vagrant中已默认设置,截至[this commit](https://github.com/mitchellh/vagrant/commit/387692f9c8fa4031050646e2773b3d2d9b2c994e),这个答案发布前差不多一年了.也就是说,在具有管理员权限的shell中运行`vagrant up`确实解决了我的问题. (5认同)
  • @SteveBennett,同意了:潜在的混乱.更有理由澄清.很难想象这个建议在提到这样一个旧的[长期解决]问题时会解决你的问题,除非你使用的是相当旧版本的流浪汉.即使它确实如此,考虑到VBox对于共享目录的糟糕文件系统性能(例如"git status"需要几秒钟),IMO也没什么帮助,尽管你可能只共享一个只有很少文件的小项目.http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines (2认同)
  • 不回答这个问题.它不适用于同步文件夹. (2认同)

gam*_*eld 5

我尝试了所有这些选项以解决运行错误npm install.

只需在管理员提示符中运行vagrant并加载vm(vagrant reload)即可解决问题.

我回去并SharedFoldersEnableSymlinksCreate从Vagrantfile中删除了配置,一切都还不错.