23 11 / 2011

Build your own Vagrant box ready to use with chef-solo using Veewee

This is my first screencast and its a bit glitchy. The voice is not good because I’d to use the built-in microphone of my MacBook pro. I’ve to get a good one. So bare with me and the audio.

Things to shop

Assumptions

  • You know what is Virtual Box and Vagrant
  • You are familiar with Git and Github
  • You use Bundler and RVM

Building a brand new box using Ubuntu 11.10 32-bit iso image

Visit https://github.com/jedi4ever/veewee and Fork the repo under your account

Git clone git clone git://github.com/millisami/veewee cd veewee

Bundle install (if you don’t have Bundler installed, do gem install bundler --pre)

millisami at sachin in ~/gitcodes/veewee on master
± bundle install                                                                                                                                                                                                 
Fetching gem metadata from http://rubygems.org/.......
Using Platform (0.4.0) 
Using archive-tar-minitar (0.5.2) 
...
Using bundler (1.1.rc) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
millisami at sachin in ~/gitcodes/veewee on master

Gems required

gem install vagrant
gem install veewee

Define a basebox template

First, lets see what are the templates available.

millisami at sachin in ~/gitcodes/veewee on master
± bundle exec vagrant basebox templates                                                                                                                                                             
The following templates are available:
...
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-i386-netboot'
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-amd64'
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-i386'
...

So, the ubuntu 11.10 has not been defined yet. Lets build one based off the ubuntu-11.04-server-i386

millisami at sachin in ~/gitcodes/veewee on master
± bundle exec vagrant basebox define 'milli-ubuntu-11-10-32-bit' 'ubuntu-11.04-server-i386'                                                                                                         
The basebox 'milli-ubuntu-11-10-32-bit' has been successfully created from the template ''ubuntu-11.04-server-i386'
You can now edit the definition files stored in definitions/milli-ubuntu-11-10-32-bit
or build the box with:
vagrant basebox build 'milli-ubuntu-11-10-32-bit'

Lets see the structure of the generated folder

millisami at sachin in ~/gitcodes/veewee on master
± tree definitions                                                                                                                                                                                  
definitions
└── milli-ubuntu-11-10-32-bit
    ├── definition.rb
    ├── postinstall.sh
    └── preseed.cfg

1 directory, 3 files

Open up the folder in your editor

Open up the file definition.rb and change the version numbers from 11.04 to 11.10

# definition.rb
Veewee::Session.declare({
  :cpu_count => '1', :memory_size=> '384', 
  :disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
  :os_type_id => 'Ubuntu',
  :iso_file => "ubuntu-11.10-server-i386.iso",
  :iso_src => "http://releases.ubuntu.com/11.10/ubuntu-11.10-server-i386.iso",
  :iso_md5 => "881d188cb1ca5fb18e3d9132275dceda",
  :iso_download_timeout => "1000",
  :boot_wait => "10", :boot_cmd_sequence => [
    '<Esc><Esc><Enter>',
    '/install/vmlinuz noapic preseed/url=http://%IP%:%PORT%/preseed.cfg ',
    'debian-installer=en_US auto locale=en_US kbd-chooser/method=us ',
    'hostname=%NAME% ',
    'fb=false debconf/frontend=noninteractive ',
    'keyboard-configuration/layout=USA keyboard-configuration/variant=USA console-setup/ask_detect=false ',
    'initrd=/install/initrd.gz -- <Enter>'
  ],
  :kickstart_port => "7122", :kickstart_timeout => "10000", :kickstart_file => "preseed.cfg",
  :ssh_login_timeout => "10000", :ssh_user => "vagrant", :ssh_password => "vagrant", :ssh_key => "",
  :ssh_host_port => "7222", :ssh_guest_port => "22",
  :sudo_cmd => "echo '%p'|sudo -S sh '%f'",
  :shutdown_cmd => "shutdown -P now",
  :postinstall_files => [ "postinstall.sh"], :postinstall_timeout => "10000"
})

Open up the file postinstall.sh and change libreadline5-dev to libreadline5 because the Ubuntu Oneiric doesn’t have libreadline5-dev package.

millisami at sachin in ~/gitcodes/veewee on master
± be vagrant basebox build 'milli-ubuntu-11-10-32-bit'

23 11 / 2011