domingo, 16 de septiembre de 2018

Publicar y Compartir un Box en Vagrant Cloud

Bueno, esta entrada súper rápida y es la explicación Paso a Paso para publicar los Base Box de Vagrant que nosotros creamos en el servicio en la nube de Vagrant Cloud donde podemos compartir de forma pública o privada y de forma colaborativa con nuestro equipo de trabajo los Boxes.

Antes que nada recomiendo leer mi anterior entrada al Blog donde se explica Paso a Paso la forma en que podemos construir nuestros propios Boxes de Vagrant usando VirtualBox.

Crear un Base Box de Vagrant Paso a Paso


Listo, primero lo primero, deben crear una cuenta en Vagrant Cloud y tener ya configurado un Boxes que deseen publicar.

Registrarse en Vagrant Cloud


Crear cuenta Vagrant Cloud
Crear cuenta Vagrant Cloud

Paso 1: Crear un Nuevo Vagrant Box

Suponiendo que ya tienen configurado un Box, es decir, ya tienen un archivo package.box, tiene sentido iniciar proceso del Paso 1.

Cuando ya iniciamos sesión en nuestra cuenta de Vagrant Cloud, desde el menú Dashboard existe un botón que nos permite crear un Nuevo Vagrant Box.

Dashboard Vagrant Cloud
Dashboard Vagrant Cloud

Seleccionamos el botón New Vagrant Box y nos despliega un panel desde el cual por medio de un formulario nos solicita información relacionada con la creación del nuevo Box. El nombre con el cual queremos identificar el Box, entre mas simple mejor, el tipo de visibilidad, es decir, si queremos que nuestro Box sea visible para todo el publico o solo para usuarios específicos, con una cuenta gratis podemos solo publicar Boxes publicos, si necesitamos que sean solo de acceso privado tenemos que pagar, también podemos agregar una breve descripción sobre el Box que vamos a crear.

Crear nuevo Vagrant Box
Crear nuevo Vagrant Box
Cuando ingresamos todos los datos que nos solicita, hacemos clic sobre el botón Create box, esto nos despliega un siguiente formulario donde debemos ingresar la versión del Box que vamos a crear, este sugiere usar la semántica de versiones de Ruby, adicionalmente una descripción sobre la versión del Box que vamos a crear, finalmente hacemos clic en Create version.

Versión del Box

Ya con los pasos anteriores solo hemos creado la definición del Box, para poder publicar y hacer un Release del Box tenemos que agregar un Provider al Box, es decir, el provider corresponde a la configuración de maquina virtual a la que está destinado a funcionar nuestro Box y hacer la carga de nuestro archivo package.box al correspondiente provider.

Nuevo Box
Nuevo Box

Paso 2: Agregar un Provider

Este paso consiste en definir el tipo de maquina virtual en donde puede ser ejecutado el Box y también debemos realizar la carga del archivo package.box que previamente hemos construido.

Agregar Provider
Agregar Provider
Este proceso puede tomar un largo tiempo, todo depende de nuestro ancho de banda de subida y del tamaño del archivo package.box que tenemos, al finalizar el proceso ya estamos cerca para hacer publico nuestro Box en Vagrant Cloud.


Paso 3: Publicar nuestro Box

Finalmente y después de asegurarnos que tenemos agregado a nuestro Box un Provider, podemos continuar con la liberación o publicación del Box, para esto solo tenemos que hacer clic en el botón Release ... y ya estará disponible una versión de nuestro Box en Vagrant Cloud.

Release de Box
Release de Box

Paso 4: Usar nuestro Box

Ahora ya solo es cuestión de compartir nuestro Box para que otras personas puedan hacer uso de el, incluso nosotros podemos usarlo, para eso vamos usar la CLI de Vagrant en nuestro equipo y vamos agregar el Box para poder crear todas las instancias que necesitemos a partir de el.

  • Listar los Boxes que tenemos agregados:
    • promt$ vagrant box list
  • Agregar el Box:
    • promt$ vagrant add sebaxtian/bionic64
  • Crear una instancia a partir del Box sebaxtian/bionic64
    • promt$ vagrant init sebaxtian/bionic64
  • Ejecutar la instancia
    • promt$ vagrant up
  • Iniciar sesión en la instancia ejecutada
    • promt$ vagrant ssh

Listo eso es todo, ya solo es cuestión de cachariar y aprender mas sobre la CLI de Vagrant y la configuración de las instancias a partir del archivo Vagrantfile.


Para más información leer la documentación oficial de Vagrant:


viernes, 14 de septiembre de 2018

Crear un Base Box de Vagrant Paso a Paso

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:
  1. Instalar VirtualBox -> https://www.virtualbox.org/
  2. Instalar Vagrant -> https://www.vagrantup.com/downloads.html
  3. Descargar un ISO de Ubuntu Server -> https://www.ubuntu.com/download/server
  4. 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
Memoria RAM: 512MB
Virtual Disk: 10GB tipo VDI
Adaptador de red: NAT
Instalar OpenSSH Server

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:

promt$ sudo passwd 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í:

promt$ su -

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.


# add vagrant user
vagrant ALL=(ALL) NOPASSWD:ALL

Podemos comprobar que la configuración se aplicó correctamente ejecutando un comando como sudo:

promt$ sudo pwd

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$ cd /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
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.

promt$ vagrant up

Para iniciar sesión o identificarnos en la instancia de Box que tenemos ejecutado, usamos el mecanismo de conexión SSH que provee vagrant.

promt$ vagrant ssh



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.