So, you want to try out Vagrant, and you’re using Windows with Cygwin? Have I got something for you!
Preparing the Environment
Firstly, get Oracle VirtualBox installed. I personally prefer VMware Workstation, but VirtualBox works better for this. Also get the extensions while you’re at it.
Next, go and install Vagrant, and use the default settings. Now we’re going to have to manually patch a file in the Vagrant source. Go to /cygdrive/c/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/guests/linux/cap
in Cygwin, and edit public_key.rb
. At line 57, make the code look like the bit that’s highlighted here;
if test -f ~/.ssh/authorized_keys; then
grep -v -x -f '#{remote_path}' ~/.ssh/authorized_keys > ~/.ssh/authorized_keys.tmp
mv ~/.ssh/authorized_keys.tmp ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
fi
This won’t be necessary in a newer version of Vagrant, but it is required in 1.8.5 for some boxes to work.
Next up, bring up your Cygwin prompt, and do this. This will remove the default VMware provider (if it’s installed), and put in a plugin that automatically updates VirtualBox Guest Additions (optional, but very useful)
vagrant plugin uninstall vagrant-vmware-workstation vagrant plugin install vagrant-vbguest vagrant version
It should spit out that you’re running an up-to-date Vagrant. Great.
Bringing up your first Vagrant box
Now, I’m a CentOS fan, so we’ll be bringing up a CentOS box first. From your Cygwin prompt, do this;
vagrant box add centos/7 --provider virtualbox mkdir vagrant-test && cd vagrant-test vagrant init centos/7 vagrant up vagrant ssh
If everything’s been done correctly, you’ll find yourself in a shell on your new Vagrant box. By default, the VM will be using NAT. Poke around, and when done, exit and do;
vagrant destroy -f cd .. rm -rf vagrant-test
To clean everything up. After cleanup, you’ll still be left with the centos/7
box cached, you can ditch that with vagrant box remove centos/7
.
All done! You’ve got a working Vagrant environment on Windows, running under Cygwin against a VirtualBox provider. Magic!