Creando una box para Vagrant

Como mencioné anteriormente, la idea de colaborar con un proyecto de Código Abierto lo comencé a realizar, de eso espero poder escribir mas adelante sobre el proceso, ya que  he podido introducir cambios en los dos proyectos que quería.

Hubo algo que necesité resolver para trabajar en el proyecto Asterisk ya tenía la necesidad de ir probando las distintas ramas donde se está desarrollando. La idea es tener una máquina de test y desarrollo para cada release. Inicialmente lo hice inicialmente manual usando virtualbox, al correr del tiempo se me hizo tedioso. Así que decidí hacer una box para vagrant y luego aplicar algunas recetas en chef que me dejen el entorno tal como quiero.

El problema a solucionar inicial es tener una box. Busqué en www.vagrantbox.es pero ninguna me acomodó, así que decidí hacerme una y documentar el proceso.

Creando maquina virtual

El primer paso es crear mediante Virtualbox una maquina virtual, en mi caso le puse el nombre  debian8. Un ejemplo para hacerlo desde una ISO lo encuentras acá, en mi caso estoy utilizando la iso de Debian net install de la versión Jessie.

En el proceso de creación configuras la cantidad de RAM, disco y configuraciones iniciales.  De las cosas a considerar en caso de una box en Linux es:

  • El password de root se debe setear como vagrant
  • Debes crear un usuario con nombre vagrant y password vagrant

Si se considera redistribuir la box posteriormente, debes considerar la siguiente definición:

  • Hostname: vagrant-[nombre-os],  ejemplo vagrant-debian-jessie en mi caso
    Domain: vagrantup.com

 

Actualización y Guest Additions

Creada la máquina e  instalado el sistema  es necesario actualizar e instalar los build-essential module-assistant que se necesitarán, también así  los headers del kernel los vamos utilizar en la compilación de los Guest Addtions.

apt-get update
apt-get upgrade
apt-get install build-essential module-assistant linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,')
m-a prepare

 

A continuación de eso tenemos que  instalar los Guest Additions de VirtualBox. Para eso  en menú de la ventana de la maquina virtual clic en  Devices y Install Guest Additions.  En  maquina virtual ejecutamos:

mount /media/cdrom
bash /media/cdrom/VBoxLinuxAdditions.run

Si tuvieras problemas  con la instalación de este punto, te recomiendo a actualizar el VirtualBox a 4.3 en caso de tener una versión más antigua.

 

Configuración

Ahora es  tiempo de configurar el sistema. Acá instalamos el software necesario que va ir por defecto en la box. También otro punto es instalar algún sistema de provisionamiento como Chef o Puppets, esto nos permitirá crear o utilizar los scripts que automatizan el proceso de configuración e instalación de sistemas  tipo base de datos, editores,  configuraciones adicional u otras herramientas que se necesiten.

En mi caso voy a trabajar con Chef, así que la Box le instalaré ese software.  También adicionaré el servidor SSH, sudo y zerofree que son necesarios para que Vagrant funcione.

apt-get install openssh-server sudo zerofree  chef

 

Sudo

El usuario vagrant creado inicialmente debe tener acceso a sudo sin password. Para esto lo configuraremos ejecutando visudo

Agregamos la siguiente línea debajo del usuario root

vagrant ALL=(ALL:ALL) NOPASSWD: ALL

Para probar el cambio, debemos hacer

su vagrant
sudo -s

Si lo anterior pasamos a ser root sin pedirnos password estamos bien.

Vagrant para hacer las distintas cosas sobre la maquina virtual necesita autentificación  mediante ssh-key, para eso existe un par de key que se pueden utilizar.  Se debe poner el contenido de la pública en el archivo .ssh/authorized_keys del usuario vagrant.

Ingresamos como usuario vagrant a la maquina virtual

vagrant:~$ mkdir .ssh
vagrant:~$ chmod 700 .ssh
vagrant:~$ nano .ssh/authorized_keys

 

ZeroFree

Lo que necesitamos ahora es llenar con ceros(0) de los sectores que no se han utilizado del disco , para eso se utiliza  zerofree.   Necesitamos pasar a modo mono usuario en el sistema.

init 1

Ingresamos el password de root.

Montamos la partición  y  procedemos con el uso de zerofree (Este proceso podría demorar un poco)

mount -o remount,ro /dev/sda1
zerofree /dev/sda1

Con esto ya se tiene lista la maquina virtual para crear la box,  para eso se debe apagar la maquina virtual.

 

Creando Box

Apagada la maquina virtual vamos a utilizar Vagrant para crear la box.  Creamos un directorio donde se almacenará el archivo .box

mkdir -p vagrant/boxes 
cd vagrant/boxes 

Ahora procedemos a crear la Box.   Acá usamos el mismo nombre de la maquina que creamos inicialmente en el VirtualBox, en mi caso debian8

vagrant package --base debian8

Con lo anterior nos debería mostrar lo siguiente:

==> debian8: Pruning invalid NFS exports. Administrator privileges will be required...
 ==> debian8: Exporting VM...
 ==> debian8: Compressing package to: /home/rodrigo/vagrant/boxes/package.box

 

Esto nos indica que se creó un  un package.box en la ruta que estabamos, este box es que podríamos compartir y usar.

 

Probando la box

Como tenemos el  archivo package.box , en nuestra maquina de trabajo  vamos a agregarlo a la lista de boxes de Vagrant.

vagrant box add MyBoxDebian8 package.box

Deberíamos tener por resultado

 ==> box: Adding box 'MyBoxDebian8' (v0) for provider:
 box: Downloading: file:///home/rodrigo/vagrant/boxes/package.box
 ==> box: Successfully added box 'MyBoxDebian8' (v0) for 'virtualbox'!

 

Para confirmar que fue agregada podemos verla listado las boxes con la siguiente instrucción

vagrant box list

nos debería mostrar …

MyBoxDebian8 (virtualbox, 0)

 

Para crear una maquina virtual a partir de nuestra box vamos a crear un nuevo directorio e iniciaremos el archivo Vagrantfile

 

mkdir -p env/test
cd env/test
vagrant init MyBoxDebian8

 

En el directorio se genera el Vagrantfile.  Este archivo es el maestro que permite agregar configuraciones especiales y las distintas recetas. Puedes revisarlo y modificarlo, se puede definir la dirección IP, nombre, paquetes a instalar, etc..

 

Iniciando la maquina virtual

Ya hemos llegado al proceso final, debemos subir nuestra nueva maquina virtual a partir de nuestra box creada.

vagrant up

El resultado debería ser algo como:

 

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'MyBoxDebian8'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: boxes_default_1431790340244_71433
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
 default: Adapter 1: nat
==> default: Forwarding ports...
 default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
 default: SSH address: 127.0.0.1:2222
 default: SSH username: vagrant
 default: SSH auth method: private key
 default: Warning: Connection timeout. Retrying...
 default: Warning: Remote connection disconnect. Retrying...
 default: 
 default: Vagrant insecure key detected. Vagrant will automatically replace
 default: this with a newly generated keypair for better security.
 default: 
 default: Inserting generated public key within guest...
 default: Removing insecure key from the guest if its present...
 default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
 default: /vagrant => /home/rodrigo/vagrant/boxes

Con esto se ha creado la maquina virtual.  Un punto a considerar que mediante nfs se  genera mediante un directorio compatido entre el equipo y la maquina virtual, este se monta en /vagrant de la virtual.

Para entrar a la maquina:

vagrant ssh

Ahora si necesitas profundizar sobre Vagrant puedes leer la  documentación sobre la configuración, los sistemas de provisionamiento (Puppets, Chef) y definición de multiples ambientes

Además si quieres, puedes  descargar la box que creé si la deseas utilizar.

 

 

 

3 thoughts on “Creando una box para Vagrant

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *