Hola, seré breve en esta entrada del Blog, vamos a Crear un Base Box de Vagrant Paso a Paso, intentando explicar lo que se debe hacer para poder construir nuestros propios 'Boxes' a partir de una Imagen ISO de una distribución de Linux en una Máquina Virtual de VirtualBox.
Si encontraron de casualidad esta entrada al Blog y no tienen ni idea sobre que es Vagrant, Base Box o VirtualBox, creo que están en el lugar equivocado. O tal vez no ?
VirtualBox es un sistema de virtualización que nos permite crear maquinas a nivel de software que comparten los recursos de hardware de una maquina anfitriona. Esto nos permite crear varias maquinas virtuales en una misma maquina anfitriona compartiendo información entre ellas y el host.
Vagrant es una herramienta que nos permite administrar maquinas virtuales, básicamente es una interfaz que nos permite configurar y administrar maquinas virtuales sin importar el tipo de sistema de virtualización que estemos usando, es decir, podemos administrar y configurar maquinas virtuales de Amazon, VirtualBox, VMWare entre otros.
Un Base Box es una configuración de una maquina virtual previamente construida y desde la cual podemos crear nuestras múltiples instancias de maquinas virtuales a partir de la configuración del Base Box, cada una de las instancias que creamos tendrá sus propios programas y configuraciones que nosotros decidamos. Se puede generalizar el concepto de Base Box como una Clase en Programación Orientada a Objetos, donde la Clase provee la definición de atributos y configuraciones generales, así cuando hacemos una Instancia de la Clase estamos creando un Objeto y cada uno tiene su propio estado, atributos y configuraciones.
Bueno, ahora en esta entrada no quiero entrar en detalles sobre cada uno de esos temas, tal vez mas adelante escribo algo sobre cada cosa, por ahora vamos al grano.
REQUERIMIENTOS:
- Instalar VirtualBox -> https://www.virtualbox.org/
- Instalar Vagrant -> https://www.vagrantup.com/downloads.html
- Descargar un ISO de Ubuntu Server -> https://www.ubuntu.com/download/server
- Comprar una cerveza bien helada
Después de cumplir los requerimientos necesarios para poder lograr nuestro objetivo, lo primero que debemos hacer para crear nuestro Base Box, es tener una maquina virtual creada y configurada a partir de la cual vamos a construir nuestro Base Box.
Paso 1: Crear y Configurar Maquina en VirtualBox
Vamos a crear una máquina con una configuración básica usando una distribución de Ubuntu Linux Server, como requerimientos mínimos para instalar Ubuntu Linux Server vamos a usar los siguientes:
Nombre de la maquina: ubuntu-server
Virtual Disk: 10GB tipo VDI
Con la configuración anterior se realiza la instalación de ubuntu server en la maquina virtual que vamos a crear, tener en cuenta que durante la instalación de Ubuntu Server, se debe instalar como software adicional el OpenSSH Server.
Mi objetivo es crear un Base Box que pueda compartir con mi equipo de trabajo o la comunidad, por lo tanto hay que configurar un usuario vagrant como usuario root de nuestra maquina virtual, el password es el mismo nombre de usuario vagrant, este usuario ademas será configurado para que no se le solicite el password para realizar tareas de root, igualmente el root del sistema debe tener el mismo password que el usuario vagrant.
Configurar Password de Root:
El sistema nos va permitir modificar el password del usuario root, debemos asignar el mismo password del usuario vagrant, para comprobar que modificamos el password del root correctamente nos logueamos así:
Con el anterior comando nos identificamos como usuario root en ubuntu server de nuestra maquina virtual.
Configurar Usuario vagrant como usuario Root:
promt$ sudo visudo -f /etc/sudoers.d/vagrant
Se debe guardar el archivo con la siguiente configuración para que así el usuario vagrant puede ejecutar comando que requieren autenticación de root sin que se le pregunte cada vez por el password del usuario.
vagrant ALL=(ALL) NOPASSWD:ALL
Podemos comprobar que la configuración se aplicó correctamente ejecutando un comando como sudo:
Ya no debería preguntar la linea de comando por el password del usuario, esto debería permitir la ejecución directa del comando como usuario con privilegios de root.
Instalar Actualizaciones y Reiniciar la Maquina Virtual:
Es recomendable instalar actualizaciones disponibles de Ubuntu Server y reiniciar la maquina.
promt$ sudo apt-get update
promt$ sudo apt-get upgrade
promt$ sudo shutdown -r now
Instalar el Authorized Key SSH de Vagrant:
Como mi objetivo es compartir el Base Box con mi equipo de trabajo y la comunidad debemos usar la configuración de llave publica de autorización SSH generada por Vagrant con el propósito de poder validar la autenticación mediante SSH con nuestra maquina virtual de forma genérica.
Claro esta que si el objetivo no es compartir el Base Box, deberíamos generar nuestras propias llaves de autorización SSH.
Desde el Ubuntu Server de nuestra maquina virtual realizar las siguientes tareas:
promt$ mkdir -p /home/vagrant/.ssh
promt$ chmod 0700 /home/vagrant/.ssh
promt$ wget --no-check-certificate https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys
promt$ chmod 0600 /home/vagrant/.ssh/authorized_keys
promt$ chown -R vagrant /home/vagrant/.ssh
Debemos configurar el OpenSSH Server para que cargue la configuración de la llave de autorización de Vagrant, para esto se debe modificar el archivo de configuración y agregar o descomentar como se detalla a continuación:
promt$ sudo nano /etc/ssh/sshd_config
En el archivo, sshd_config agregar o descomentar:
AuthorizedKeysFile %h/.ssh/authorized_keys
Finalmente debemos reiniciar el servicio de OpenSSH:
promt$ sudo service ssh restart
Instalar VirtualBox Guest Additions:
Se debe montar en la maquina virtual el ISO donde están los instadores de VirtualBox Guest Additions desde la unidad de CD de la maquina virtual, también se debe instalar ciertas dependencias para poder realizar la instalación del VirtualBox Guest Additions.
promt$ sudo apt-get install linux-headers-$(uname -r) build-essential dkms
promt$ sudo mount /dev/cdrom /media/cdrom
promt$ sudo ./VBoxLinuxAdditions.run
Listo, con esto finalmente terminamos de Instalar y Configurar la Maquina Virtual con Ubuntu Server la cual vamos a usar para Generar un Base Box usando las herramientas de Vagrant.
Paso 2: Empaquetar el Base Box
Usamos la herramienta de Vagrant que nos permite generar o empaquetar un Base Box a partir de una maquina virtual creada y configurada en VirtualBox.
Desde la maquina anfitriona y en un directorio destinado para guardar los Base Box generados ejecutamos:
promt$ vagrant package --base my-virtual-machine
La herramienta se encarga de compilar y empaquetar toda la configuración de nuestra maquina virtual en un solo archivo de nombre package.box, este archivo tiene una estructura interna de archivos como se muestra la imagen:
|
Estructura de un Base Box |
Finalmente el archivo package.box es nuestra definición de Clase a partir de la maquina virtual que nosotros construimos.
Paso 3: Probar nuestro Base Box
Debemos agregar el Box a nuestro vagrant en la maquina anfitriona para que posteriormente podamos generar o construir todas las instancias necesarias de nuestro Box.
promt$ vagrant box add --name my-box /path/to/the/package.box
Creamos o inicializamos el Vagrantfile tomando como base el Box que creamos.
promt$ vagrant init my-box
Ejecutamos o desplegamos la instancia del Box.
Para iniciar sesión o identificarnos en la instancia de Box que tenemos ejecutado, usamos el mecanismo de conexión SSH que provee vagrant.
Paso 4: Compartir nuestro Base Box
Como mi objetivo es compartir y distribuir el Base Box con mi equipo de trabajo o la comunidad, debemos usar mecanismos para compartir nuestro archivo package.box, ya sea usando alguna herramienta de compartir recursos en la nube o usando los servicios dedicados para esto que ofrece Vagrant Cloud, desde el cual podemos compartir de forma gratuita nuestros Boxes con la comunidad.
En una próxima entrada escribiré sobre el paso a paso para compartir el archivo package.box en el servicio que ofrece Vagrant Cloud.
Chao.