Getting Started with Vagrant
Published 2015-1-2DRAFT
I've never set up a vagrant box before and I'm on Skype with @ryanburnette who is guiding me...
Install VirtualBox
curl -fSL http://download.virtualbox.org/virtualbox/4.3.20/VirtualBox-4.3.20-96996-OSX.dmg -o /tmp/virtualbox.dmg
open /tmp/virtualbox.dmg
sudo /usr/sbin/installer -pkg /Volumes/VirtualBox/VirtualBox.pkg -target /
# BTW, if you rename the extpack file it won't install. Weird, right?
curl -fSL http://download.virtualbox.org/virtualbox/4.3.20/Oracle_VM_VirtualBox_Extension_Pack-4.3.20-96996.vbox-extpack -o /tmp/Oracle_VM_VirtualBox_Extension_Pack-4.3.20-96996.vbox-extpack
sudo VBoxManage extpack install /tmp/Oracle_VM_VirtualBox_Extension_Pack-4.3.20-96996.vbox-extpack
Install Vagrant
curl -fSL https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.1.dmg -o /tmp/vagrant.dmg
hdiutil attach /tmp/vagrant.dmg
sudo /usr/sbin/installer -pkg /Volumes/Vagrant/Vagrant.pkg -target /
hdiutil detach /Volumes/Vagrant
Create your first Vagrantfile and install
When you're in your vagrant directory you're in the context of that file.
mkdir -p ~/Code/vagrantbuntu
pushd ~/Code/vagrantbuntu
vim Vagrantfile
VagrantFile
:
Vagrant.configure(2) do |config|
config.vm.box = 'ubuntu/trusty64'
config.vm.hostname = 'blog-dev'
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.network :forwarded_port, guest: 443, host: 8443
config.vm.provider :virtualbox do |vb|
vb.customize ['modifyvm', :id, '--memory', '256']
end
config.vm.synced_folder './home', '/home/vagrant/vagrant', owner: 'vagrant', group: 'vagrant', mount_options: ['dmode=755','fmode=755']
config.vm.synced_folder './vagrant', '/vagrant', owner: 'vagrant', group: 'vagrant', mount_options: ['dmode=755','fmode=755']
end
mkdir home vagrant
vagrant up
Access your box
vagrant ssh
Shutting down
vagrant halt
Next Steps
dotfiles
I like to copy .gitconfig
, .jshint
, .vim/
, .vimrc
, and a few keys from .ssh/
.
If you're going to share projects between your local system and the vagrant box, set git config core.fileMode false
on the vagrant box.
Swap
You'll notice that I alloted 256mb of RAM to the vagrant box. For my purposes that will usually be adequate, but occasionally (if I need to compile something from source on the box or use npm for large packages like 'bower' or 'yo') it won't, so I'm also creating a swapfile for those short, brief occasions.
curl https://gist.githubusercontent.com/coolaj86/15a42f09a4d88e03906a/raw/create-swap.sh -o /tmp/create-swap.sh
bash /tmp/create-swap.sh 384
Fish
sudo apt-add-repository ppa:fish-shell/release-2; \
sudo apt-get update; \
sudo apt-get install -y fish
# Make fish my default shell
sudo chsh -s $(which fish) $(whoami)
Node + Dev Tools
curl -fsSL bit.ly/easy-install-node | bash
Ruby
Possible Errors
Extension pack name mismatch
If you rename the awkwardly long Oracle_VM_VirtualBox_Extension_Pack-4.3.20-96996.vbox-extpack
to something shorter, it fails to install.
VBoxManage: error: Extension pack name mismatch between the downloaded file and the XML inside it (xml='Oracle VM VirtualBox Extension Pack' file='')
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ExtPackFile, interface IExtPackFile, callee nsISupports
VBoxManage: error: Context: "Install(fReplace, NULL, ptrProgress.asOutParam())" at line 1141 of file VBoxManageMisc.cpp
create-swap.bash
#!/bin/sh
set -e
# size of swapfile in megabytes
if [ -n "$1" ]; then
swapsize=$1
else
swapsize=256
fi
# does the swap file already exist?
SWAPFILE=$(grep "swapfile" /etc/fstab || echo -n "")
# if not then create it
if [ -z "$SWAPFILE" ]; then
echo 'swapfile not found. Adding swapfile.'
sudo bash -c "fallocate -l ${swapsize}M /swapfile"
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo bash -c "echo '/swapfile none swap defaults 0 0' >> /etc/fstab"
else
echo 'swapfile found. No changes made.'
fi
# output results to terminal
cat /proc/swaps
cat /proc/meminfo | grep Swap
# TO UNDO
# sudo swapoff /swapfile
# sudo rm /swapfile
# sudo vim /etc/fstab
ruby script thing for rvm
curl -L --create-dirs -o ~/.config/fish/functions/rvm.fish https://raw.github.com/lunks/fish-nuggets/master/functions/rvm.fish
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
By AJ ONeal
Did I make your day?
Buy me a coffee
(you can learn about the bigger picture I'm working towards on my patreon page )