我想使用Vagrant为我的团队提供一个共同的开发环境。主机完全不同:
我们希望在VM内部运行Linux。
到目前为止,一切都很好。
现在我们的想法是每个开发人员都应该能够使用他们选择的IDE,因此我们引入了一个同步文件夹,该文件夹共享主机和VM之间的源代码。这基本上也适用......除了符号链接。
在我们的源代码中,我们确实有一些符号链接,这在VM内部的Linux中不是问题,但在Windows上作为主机会导致问题。我们不做的唯一事情是摆脱符号链接,所以我们需要另一种方法来解决这个问题。
到目前为止,我们尝试了很多选择:
symlink has no referent
(每个符号链接一个错误)。我无法想象我们是这个星球上唯一或第一个遇到共享文件夹中多平台主机和符号链接问题的人。
如何解决此问题,以便我们可以保留符号链接,但仍使用不同的主机操作系统?
答案 0 :(得分:90)
接受的答案是不好的。该问题描述了同步文件夹,不 共享 文件夹的问题。建议的解决方案对rsynced( not shared )文件夹没有影响。即使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错误。我个人能够通过向我的vagrantfile
添加特定的rsync args来解决它:
config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]
我也在流浪汉的github上opened this issue指出了rsync__args
的默认值(特别是默认args --copy-links
之一)似乎错误的东西打破另一个,--archive
,至少就复制破碎的符号链接而言。)
答案 1 :(得分:56)
出于安全原因,Virtualbox不允许在共享文件夹上使用符号链接。要启用符号链接,需要将以下行添加到Vagrantfile中的vm提供程序配置块:
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
此外,在Windows上,需要在具有管理员权限的shell中执行vagrant up。 没有必要的解决方法。
答案 2 :(得分:5)
我尝试了所有这些选项,以解决运行npm install
的错误。
只需在管理员提示符中运行vagrant并加载vm(vagrant reload
)即可解决问题。
我回去并从Vagrantfile中删除了SharedFoldersEnableSymlinksCreate
配置,一切都还不错。
答案 3 :(得分:2)
默认的同步文件夹类型vboxsf
已知存在大量文件/目录的性能问题,并且缺少对符号链接和硬链接的支持(请参阅ticket 818 - 一个7岁以上的bug )。避免使用它。
rsync type synced文件夹可能是您的最佳选择。
你提到它崩溃了,你在运行什么版本的rsync?尝试通过brew将它更新到3.1.0,我知道OOTB太旧了(2.x),这可能会导致问题。
答案 4 :(得分:1)
经过一个小时的忙碌并尝试了几个不同的解决方案(vagrant-vbguest
,Marvin的建议修复),我无法在共享文件夹中获取符号链接以使用VirtualBox 4.8。 10,Vagrant 1.5.1。
我发现更简单的解决方案是配置一个单独的共享文件夹,然后使用Ruby的File.readlink
来读取基础路径:
config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path"
答案 5 :(得分:0)
将以下行添加到Vagrantfile:
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
在我将virtualbox 6.0.8降级到6.0.4之后,这对我唯一有效 和无业游民2.2.4至2.2.1
当您打开终端时(我在Windows 10上使用git bash) 使用“以管理员身份运行”。
也可以尝试git bash更改: 在项目文件中: $ vim .git /配置 更改为 symlinks = true
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master