Veewee is a useful tool helping to build Vagrant boxes for virtualised development. Here is how I build Debian, Scientific Linux, CentOS, and FreeBSD boxes.
Installing prerequisites
If you do not have Vagrant installed yet, you should start with that:
sudo apt-get install vagrant
You may also need to enable VT-x virtualisation in BIOS in order to be able to run Vagrant with VirtualBox on your laptop.
Let's now install veewee:
sudo apt-get install ruby-dev sudo gem install veewee
Building Debian-7 box
Debian box type is already available:
veewee vbox templates | grep Debian
so let's clone it:
veewee vbox define debian7-amd64 'Debian-7.2.0-amd64-netboot'
Now I've edited the template, because I had already downloaded Debian ISO image file previously; so I opened definitions:
vim definitions/debian7-amd64/definition.rb
and replaced ISO image name debian-7.2.0-amd64-netinst.iso by the one I downloaded debian-7.2.0-amd64-i386-netinst.iso and placed in iso subdirectory.
Optionally, one can also download VirtualBox guest additions:
sudo aptitude install virtualbox-guest-additions-iso wget http://download.virtualbox.org/virtualbox/4.2.16/VBoxGuestAdditions_4.2.16.iso
and again place it in the iso subdirectory.
Now let's build the base box:
veewee vbox build 'debian7-amd64'
Depending on the laptop specs and the network speed, the box will be built in about twenty minutes.
Export it for vagrant via:
vagrant package --base debian7-amd64 --output debian7-amd64.box
Now it can be used with vagrant in the usual manner; we can add it via:
vagrant box add debian7-amd64 ./debian7-amd64.box
and test it out by creating and connecting to a new Debian virtual machine:
mkdir -p ~/private/vagrant/test-vm-debian7 cd ~/private/vagrant/test-vm-debian7 vagrant init cat > Vagrantfile <<EOF1 Vagrant.configure("2") do |config| config.vm.box = "precise64" config.vm.hostname = 'localhost.localdomain' config.vm.network :forwarded_port, host: 8080, guest: 8080 config.vm.network :forwarded_port, host: 8443, guest: 8443 end EOF1 vagrant up vagrant ssh
We are done.
Building ScientificLinux-6.4 box
Here is a complete compact recipe on how to build a Scientific Linux box:
veewee vbox templates | grep scientificlinux veewee vbox define sl6-x86_64 'scientificlinux-6.4-x86_64-netboot' curl -C - -L 'http://ftp.heanet.ie/pub/rsync.scientificlinux.org/6.4/x86_64/iso/SL-64-x86_64-2013-03-18-boot.iso' -o 'iso/SL-64-x86_64-2013-03-18-boot.iso' md5sum 'iso/SL-64-x86_64-2013-03-18-boot.iso' veewee vbox build 'sl6-x86_64' # fails at the very end due to chef needing ruby >= 1.9.2 so let's remove chef/puppet and restart... vim definitions/sl6-x86_64/definition.rb # edit :postinstall_files to comment out chef and puppet loading veewee vbox build 'sl6-x86_64' --force # restart vbox creation # now it succeeded vagrant package --base sl6-x86_64 --output sl6-x86_64.box vagrant box add sl6-x86_64 ./sl6-x86_64.box
Building CentOS-6.4 box
The same recipe obviously works to build CentOS too, since they both stem from RHEL:
veewee vbox define centos6-x86_64 'CentOS-6.4-x86_64-netboot' vim definitions/centos6-x86_64/definition.rb # comment away chef and puppet veewee vbox build 'centos6-x86_64' # press `No' so that we download manually curl -C - -L 'http://www.mirrorservice.org/sites/mirror.centos.org/6.4/isos/x86_64/CentOS-6.4-x86_64-netinstall.iso' -o 'iso/CentOS-6.4-x86_64-netinstall.iso' md5sum 'iso/CentOS-6.4-x86_64-netinstall.iso' veewee vbox build 'centos6-x86_64' # now go on vagrant package --base centos6-x86_64 --output centos6-x86_64.box vagrant box add centos6-x86_64 ./centos6-x86_64.box
Building FreeBSD-9.1 box
I've also build FreeBSD box using the same approach. When doing so, the installation was timing out; so I had to add more Wait statements in the box definition:
$ vim definitions/freebsd-9.1/definition.rb $ less definitions/freebsd-9.1/definition.rb [...] '<Enter>', '<Wait><Wait><Wait><Wait><Wait><Wait><Wait><Wait><Wait><Wait>', '<Wait><Wait><Wait><Wait><Wait><Wait><Wait><Wait><Wait><Wait>', '/bin/sh<Enter>', 'mdmfs -s 100m md1 /tmp<Enter>', [...]
after which the build succeeded.