Using packer to build a Vagrant box

Background

So, Oracle Linux 7.4 was just released. Previously when a new version was released I downloaded it and manually installed it to see what the fuss was about (and to make sure you could actually install Oracle on it).

These days I tend to use Vagrant (as written about previously). But how do you build a Vagrant box?
You could of course do it the manual way, which means you click through the installation of the OS, then customize it to your hearts desire and finally export the VM as a Vagrant box, and that is fine. But as with all manual tasks, it gets tedious after a while.
I also tend to make the box look sort of the same every time (with the same extra packages installed and whatnot), so how do you easily automate this process?

Enter Packer, a tool to ‘Build Automated Machine Images’, as the slogan goes. Packer is built by Hashicorp (who also built Vagrant, Terraform and bunch of other awesome tools), and it helps you create identical images for a variety of different platforms using the same source configuration.

The source configuration in this case is a json file, which describes the builder (Virtualbox, Vmware, Amazon ec2 etc), and also have different types of provisioners that can be called (shell, Ansible, Chef, Puppet, Powershell) to further customize the image.

Continue reading

Oracle Linux Vagrant boxes

I use Vagrant a lot. It is an awesome tool when it comes to quickly spin up a local VM for some testing.

All my boxes are stored on Hashicorp’s Vagrant Cloud.

I try to create one box per Oracle Linux release (starting with 6.5) and I create the box as soon as a new version is released. I use Packer to create the boxes, which makes it a really painless exercise. I’ll describe that process in later blog-post.

Vagrant supports Virtualbox by default but also a lot of other providers (VMware, AWS ec2 etc), and I build all my boxes for Virtualbox.

The boxes all come with the Oracle pre-req packages installed and a couple of other nice-to-have packages, Ansible among other things. I then usually use this to do the Oracle installations.

As for naming, I use the following standard: ol<releasenumber>
i.e: ol68, ol72 etc
In Vagrant Cloud, you can have different versions of a specific box, and I try to keep the version number to the date when the box was created (i.e 20170326). It makes it easy to see how up-to-date the specific box is. I usually don’t update a box unless there is something I’ve missed to add.

So how can you use these boxes?

Vagrant uses a ‘Vagrantfile’ to describe the VM you want to create (in terms of IP’s, number of cores, amount of RAM etc), and in its simplest form you can let Vagrant create that file for you by running the:
vagrant init <boxname> command. So if you wanted to create a VM with my latest ol73 box, you’d do this:

miksan-macbook-pro:vagrant miksan$ vagrant init oravirt/ol73
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
miksan-macbook-pro:vagrant miksan$ grep oravirt Vagrantfile

  config.vm.box = "oravirt/ol73" <-- This tells Vagrant which box to use

The above will not have any customizations in terms of cpu’s etc.
For more customized configurations I have 2 github repos containing Vagrant configurations for both a RAC config and a single instance config. I’ll go through them in more detail in a later blogpost.
They use 2 different ways of customizing the configuration, vbox-si uses an external file called hosts.yml where you specify the ip, name etc of the VM(s) you want to create.
Vbox-rac is based on the work Alvaro Miranda and I did for this, and in that case the customization is done in the actual Vagrantfile.

https://github.com/oravirt/vagrant-vbox-si
https://github.com/oravirt/vagrant-vbox-rac

Note:
https://github.com/oravirt/vagrant-vbox-si is deprecated and has been replaced by these 2 repositories:
https://github.com/oravirt/vagrant-vbox-si-fs
https://github.com/oravirt/vagrant-vbox-si-asm

 

 

These are the boxes I currently have available. They also include some Centos boxes.

Vagrant up!

racattack, meet ansible-oracle!

A while back I was approached by Jeremy Schneider, who is one of the original contributors to the racattack project and he wanted to know if I was interested in integrating ansible-oracle with the RAC Attack automation project, and of course I was!

The idea was to provide a completely hands off installation of an Oracle RAC cluster, from VM creation to a fully configured cluster, and that is what we’re happy to be able to provide.

So Alvaro Miranda and I have been working on getting racattack-ansible-oracle going. Alvaro wrote the original packer/vagrant code for the Vagrant version of Racattack and then we’ve integrated ansible-oracle with that.

The actual integration worked straight away, so we’ve been weeding out edge cases and making it as easy and flexible to use as possible.
As of now it is possible to install 11.2.0.4, 12.1.0.1 & 12.1.0.2, which are the releases currently supported by ansible-oracle. As more releases are supported by ansible-oracle, they will also work with racattack-ansible-oracle.

Continue reading