Vagrant中的符号链接和同步文件夹
我想使用Vagrant为我的团队提供一个共同的开发环境。 主机是完全不同的:
- 有些使用OS X,一些Linux和一些Windows。
- 有些使用VMware,有些使用VirtualBox。
在VM内部,我们要运行Linux。
到目前为止,一切都很好。
现在我们的想法是,每个开发人员都可以使用他们select的IDE,因此我们引入了一个共享文件夹,共享主机和VM之间的源代码。 这基本上,工作以及…符号链接除外。
在我们的源代码中,我们确实有一些符号链接,这在虚拟机内部的Linux内部不是问题,但是在Windows上,因为主机,这会导致问题。 我们唯一不能做的就是摆脱象征性的联系,所以我们需要另一种方式来处理这个问题。
到目前为止,我们已经尝试了一些select:
- 在Vagrant的一个问题中提到了一个解决方法,不幸的是这只是VirtualBox,并不能帮助那些运行VMware的人。 到目前为止,我们还没有find在Vagrantfile中运行代码的方法,具体取决于使用的提供程序。
- 我们现在已经尝试使用rsynctypes,而不是使用标准的共享文件夹。 这可以在Windows上运行,但是在OS X上崩溃的时候会出现一些错误,告诉我们这个
symlink has no referent
(每个符号链接symlink has no referent
一个错误)。 - 我们考虑过NFS ,但只有在不使用Windows作为主机的情况下才有效。
- 我们也关于SMB ,但是这只能作为主机在Windows上运行。
我无法想象,我们是这个星球上唯一或第一批在共享文件夹中遇到多平台主机和符号链接问题的人。
你怎么能解决这个问题,这样我们可以保持象征性的联系,但仍然使用不同的主机操作系统?
由于安全原因,Virtualbox不允许共享文件夹上的符号链接。 要启用符号链接,需要将以下行添加到Vagrantfile的vm提供程序configuration块中:
config.vm.provider "virtualbox" do |v| v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] end
另外,在windows上需要在具有pipe理权限的shell中执行。 没有必要的解决方法。
被接受的答案是不好的。 该问题描述了同步文件夹的问题, 而不是 共享文件夹。 build议的解决scheme将不会影响rsynced( 不共享 )文件夹。 即使OP使用共享文件夹,接受的答案的build议是已经在OP发布问题 (更不用说VirtualBox的共享文件夹是非常慢的 ) 15个月之前,已经被集成到stream浪者的1.1 。
我遇到了同样的问题:在OS X上,我得到的symlink has no referent
rsync错误。 我个人能够解决它通过添加特定的rsync参数到我的vagrantfile
:
config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]
我也在vagrant的github上打开了这个问题 ,指出rsync__args
默认值出现错误的rsync__args
(具体地说,默认参数之一--copy-links
似乎正在破坏另一个--archive
至less就复制破坏的符号链接而言)。
默认的同步文件夹types是vboxsf
具有大量文件/目录的已知性能问题,缺less对符号链接和硬链接的支持(参见票818 – 一个7岁以上的bug)。 避免使用它。
rsynctypes的同步文件夹可能是你最好的select。
你提到它崩溃了,你运行的是什么版本的rsync? 尝试通过brew将其更新到3.1.0,我知道OOTB是太旧了(2.x),这可能会导致问题。
在大约一个小时后,尝试了几个不同的解决scheme( vagrant-vbguest
,Marvin的build议修复)后,我无法获得共享文件夹中的符号链接来使用VirtualBox 4.8.10,Vagrant 1.5.1。
我发现一个简单的解决scheme是configuration一个单独的共享文件夹,然后使用Ruby的File.readlink
读取底层path:
config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path"
我尝试了所有这些选项来解决运行npm install
的错误。
只需在pipe理员提示符下运行vagrant并加载vm( vagrant reload
),即可解决问题。
我回去,从Vagrantfile中删除SharedFoldersEnableSymlinksCreate
configuration,一切都还好。