Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vagrant [2016/01/08 01:07]
admin [Introduction to Vagrant]
vagrant [2016/01/08 04:43] (current)
admin [Custom Vagrant Box Using Veewee]
Line 11: Line 11:
 In a few words:\\ In a few words:\\
 > Vagrant uses Oracle’s VirtualBox to create its virtual machines and then uses Chef or Puppet to provision them. > Vagrant uses Oracle’s VirtualBox to create its virtual machines and then uses Chef or Puppet to provision them.
-> Once you or someone else creates a single Vagrantfile,​ you just need to //<wrap hi>vagrant up</​wrap>// ​and everything is installed and configured for you to work.+> Once you or someone else creates a single Vagrantfile,​ you just need to ''​%%vagrant up%%'' ​and everything is installed and configured for you to work.
  
-An very well made introduction to Vagrant (with video) can be viewed on the [[https://​sysadmincasts.com/​episodes/​4-vagrant|SysadminCasts.com episode #04]]. Or you could directly view the revised [[https://​sysadmincasts.com/​episodes/​42-crash-course-on-vagrant-revised|Episode #42 - Crash Course on Vagrant]].+very well made introduction to Vagrant (with video) can be viewed on the [[https://​sysadmincasts.com/​episodes/​4-vagrant|SysadminCasts.com episode #04]]. Or you could directly view the revised [[https://​sysadmincasts.com/​episodes/​42-crash-course-on-vagrant-revised|Episode #42 - Crash Course on Vagrant]].
  
 > Vagrant makes it easy to create disposable environments for testing scripts and infrastructure changes. > Vagrant makes it easy to create disposable environments for testing scripts and infrastructure changes.
Line 50: Line 50:
  
 ---- ----
-===== Vagrant ​Box & Templates =====+===== Vagrant ​Boxes & Templates =====
  
-What follows mainly comes from the [[https://​sysadmincasts.com/​episodes/​5-create-a-vagrant-box-with-veewee|sysadmincasts.com episode #05]].+What follows mainly comes from the [[https://​sysadmincasts.com/​episodes/​5-create-a-vagrant-box-with-veewee|sysadmincasts.com episode #05]] and [[https://​sysadmincasts.com/​episodes/​42-crash-course-on-vagrant-revised|episode #42]]. 
 + 
 +In Vagrant, the term **box** represents what's usually defined as a **virtual machine**. 
 + 
 +> ''​%%Vagrant init%%''​ allows you to initialize a new Vagrant environment. 
 +> A Vagrant environment can be a single Vagrant virtual machine, or a collection of virtual machines. So, an environment will describe what boxes, or virtual machines to boot, along with all of the associated settings, through a configuration file called a Vagrantfile. 
 + 
 +> You can define really complex environments through a single configuration file, then share that with other people. The added bonus, is that your environments are self documenting,​ in that it is easy to read the configuration file and see what is going on. 
 + 
 + 
 +==== Custom Vagrant Box Using Veewee ==== 
 + 
 +The following requires VirtualBox, Ruby, and Vagrant to be installed. 
 + 
 +=== Install Veewee === 
 +<​code>​ 
 +> sudo gem install veewee 
 +</​code>​ 
 + 
 +In case you get an error of type: 
 +<​code>​ 
 +ERROR: ​ Error installing veewee: 
 + ERROR: Failed to build gem native extension. 
 + 
 +    /​usr/​bin/​ruby2.1 extconf.rb 
 +mkmf.rb can't find header files for ruby at /​usr/​lib/​ruby/​include/​ruby.h 
 + 
 +extconf failed, exit code 1 
 + 
 +Gem files will remain installed in /​var/​lib/​gems/​2.1.0/​gems/​posix-spawn-0.3.11 for inspection. 
 +Results logged to /​var/​lib/​gems/​2.1.0/​extensions/​x86_64-linux/​2.1.0/​posix-spawn-0.3.11/​gem_make.out 
 +</​code>​ 
 + 
 +You need to install the ruby-dev library: 
 +<​code>​ 
 +> sudo apt-get install ruby-dev 
 +</​code>​ 
 + 
 +=== List available Veewee templates === 
 + 
 +To list available templates issue the following command: 
 +<​code>​ 
 +> veewee vbox templates 
 +> veewee vbox templates | grep -i debian 
 +</​code>​ 
 + 
 +=== Define a new basebox off and existing template === 
 + 
 +We'd like to set up a **Debian 8.2** box, but there is only a **Debian-7.6.0-amd64-netboot** template available, let's start with this one: 
 +<​code>​ 
 +> veewee vbox define '​debian-8.2-amd64'​ '​Debian-7.6.0-amd64-netboot'​ --workdir=/​home/​user/​Vagrant 
 +</​code>​ 
 + 
 +At this stage we have a //​**definitions**//​ directory that was created under //​**/​home/​user/​Vagrant**//​ (our workdir). Inside this directory is another one named //​**debian-8.2-amd64**//​ after our previous ''​%%veewee vbox define%%''​ command options. Inside this //​definitions//​ directory we'll look at two files: 
 + 
 +__//​**definition.rb**//​__ 
 + 
 +Change the following lines: 
 + 
 +<​code>​ 
 +... 
 +  :iso_file => "​debian-7.6.0-amd64-netinst.iso",​ 
 +  :iso_src => "​http://​mirror.i3d.net/​pub/​debian-cd/​7.6.0/​amd64/​iso-cd/​debian-7.6.0-amd64-netinst.iso",​ 
 +  :iso_md5 => "​8a3c2ad7fd7a9c4c7e9bcb5cae38c135",​ 
 +... 
 +     '​console-keymaps-at/​keymap=us ', 
 +     '​keyboard-configuration/​xkb-keymap=us ', 
 +... 
 +     '​kbd-chooser/​method=us ', 
 +... 
 +</​code>​ 
 + 
 +To this: 
 +<​code>​ 
 +... 
 +  :iso_file => "​debian-8.2.0-amd64-netinst.iso",​ 
 +  :iso_src => "​http://​cdimage.debian.org/​debian-cd/​8.2.0/​amd64/​iso-cd/​debian-8.2.0-amd64-netinst.iso",​ 
 +  #:iso_md5 => "​8a3c2ad7fd7a9c4c7e9bcb5cae38c135",​ 
 +... 
 +     '​console-keymaps-at/​keymap=fr ', 
 +     '​keyboard-configuration/​xkb-keymap=fr ', 
 +... 
 +     '​kbd-chooser/​method=fr ', 
 +... 
 +</​code>​ 
 + 
 +The **iso_md5** parameter is commented out as I couldn'​t figure out where to find this for Debian releases :-\ 
 + 
 +__//​**preseed.cfg**//​__ 
 + 
 +Change the following lines: 
 +<​code>​ 
 +... 
 +# Keyboard selection. 
 +#d-i keymap select us 
 +d-i keyboard-configuration/​xkb-keymap select us 
 +... 
 +d-i partman/​default_filesystem string ext3 
 +... 
 +# Individual additional packages to install 
 +d-i pkgsel/​include string openssh-server ntp acpid  sudo bzip2 rsync 
 +... 
 +#d-i grub-installer/​bootdev ​ string (hd0,0) 
 +... 
 +</​code>​ 
 + 
 +To this: 
 +<​code>​ 
 +... 
 +# Keyboard selection. 
 +#d-i keymap select us 
 +d-i keyboard-configuration/​xkb-keymap select fr 
 +... 
 +d-i partman/​default_filesystem string ext4 
 +... 
 +# Individual additional packages to install 
 +d-i pkgsel/​include string openssh-server ntp acpid sudo bzip2 rsync ruby-dev 
 +... 
 +d-i grub-installer/​bootdev ​ string /dev/sda 
 +... 
 +</​code>​ 
 + 
 +Adding ruby-dev is mandatory here as otherwise an error will be thrown when trying to install some gems. 
 + 
 +=== Local iso repository === 
 + 
 +We can create an **iso** directory in our workdir where downloaded iso will be stored for future usage (avoiding recurrent downloads). 
 +<​code>​ 
 +> mkdir /​home/​user/​Vagrant/​iso 
 +</​code>​ 
 + 
 +=== Build the box === 
 + 
 +We can now tell Veewee to build our Debian 8.2.0 box: 
 +<​code>​ 
 +> veewee vbox build '​debian-8.2-amd64'​ 
 +</​code>​
  
 ---- ----