I had a problem getting symlinks to work with Vagrant. But let’s get symlinks setup first, before I get to the problem. The first thing to do – which is well documented – is you need to add the following line to your Vagrantfile:

The problem most people have is that this line relates to your share_folder config value. See the following:

config.vm.share_folder “WebDocRoot”, “/var/www”, “www”

The share_folder config option has 3 initial params (identifier, guest path, host path). The customize option must relate to the identifier, look at the WebDocRoot value in those two options.

The problem is that I received the following error:

The following SSH command responded with a non-zero exit status.

Vagrant assumes that this means the command failed!

mkdir -p /vagrant/www

So let’s look at the error. I can’t make the directory /vagrant/www, it’s returning an error.

vagrant ssh

ls -l /vagrant

In my case I could see that /vagrant/www already existed and was a dead symlink that pointed to a non-existent directory. But wait a minute. It links to a directory on my host machine, not my guest machine. Why is that?

The /vagrant directory in the guest is an automatically generated share_folder by Vagrant and it maps to the current directory your Vagrantfile is located in. I had put a symlink in this directory on my host machine and that symlink was then available in the guest as its parent was a share_folder already. Thus when I tried to create a new share_folder at the path /vagrant/www it failed as it already existed as a symlink.

Simple enough: don’t create a share_folder there, create it elsewhere inside the guest machine. I moved it from /vagrant/www/ to /var/www/ as outlined above and problem solved.

Wes was one of Invoke’s first hires and he just won’t leave. Not that we’d want him to, as he’s our resident tech expert. He’s an actual rockstar (in Korea) and winner of several competitive eating titles.