Symbolic links and synced folders in Vagrant

柔情痞子 提交于 2019-11-27 10:05:51
Marvin

Virtualbox does not allow symlinks on shared folders for security reasons. To enable symlinks the following line needs to be added to the vm provider config block in the Vagrantfile:

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

Additionally, on windows vagrant up needs to be executed in a shell with admin rights. No workarounds necessary.

The accepted answer is no good. The question describes an issue with synced folders, not shared folders. The proposed solution would have no effect on an rsynced (not shared) folder. And even if the OP was using a shared folder, the accepted answer's suggestion is something that had already been integrated into vagrant as of 1.1, released 15 months before the OP posted the question (not to mention VirtualBox's shared folders are abysmally slow).


I encountered this same issue: on OS X, I got the symlink has no referent rsync error. I was personally able to solve it by adding particular rsync args to my vagrantfile:

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

I also opened this issue on vagrant's github to point out something that appears to be wrong with their default value for rsync__args (specifically, that one of the default args, --copy-links, seems to be breaking another, --archive, at least as far as copying broken symlinks is concerned).

I tried all these options in order to resolve an error running npm install.

Simply running vagrant in an admin prompt and loading the vm (vagrant reload), resolved the issue.

I went back and removed the SharedFoldersEnableSymlinksCreate configuration from the Vagrantfile, and everything was still fine.

The default synced folder type is vboxsf has known performance issue with large number of files / directories, and lacks support for symbolic links and hard links (see ticket 818 - a 7+ year old bug). Avoid using it.

rsync type synced folder may be your best choice.

You mentioned that it crashed, what version of rsync are you running? Try to update it to 3.1.0 via brew, I know the OOTB one is way too old (2.x), which could be causing issues.

After fussing around for an hour and trying a few different solutions (vagrant-vbguest, Marvin's suggested fix), I wasn't able to get symlinks in shared folders to work with VirtualBox 4.8.10, Vagrant 1.5.1.

I found that a simpler solution is to configure a separate shared folder and then use Ruby's File.readlink to read in the underlying path:

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

Add the following line to Vagrantfile:

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

This worked for me ONLY after i downgraded virtualbox 6.0.8 to 6.0.4 and vagrant 2.2.4 to 2.2.1.

when you open terminal ( i use git bash on windows 10) with "Run as Admin".

also try in git bash changing : in project file: $ vim .git/config change to 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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!