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
Last revision Both sides next revision
vagrant [2016/01/08 01:07]
admin [Introduction to Vagrant]
vagrant [2016/01/08 04:40]
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=fr ', 
 +     '​keyboard-configuration/​xkb-keymap=fr ', 
 +... 
 +</​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",​ 
 +... 
 +</​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>​
  
 ---- ----