Mostrando las entradas con la etiqueta VBoxManage. Mostrar todas las entradas
Mostrando las entradas con la etiqueta VBoxManage. Mostrar todas las entradas

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.




miércoles, 4 de mayo de 2016

Crear Maquina Virtual en VirtualBox desde Script Bash Linux Ubuntu

En una anterior entrada compartí los pasos a seguir para crear y configurar una maquina virtual en VirtualBox desde linea de comando Linux Ubuntu mediante la herramienta VBoxManage, en el siguiente link pueden leer en detalle los comandos utilizados:



[ VirtualBox desde Línea de Comandos Linux Ubuntu mediante la herramienta VBoxManage ]



En esta entrada quiero compartir un Script que hice en Bash para ejecutar en Linux Ubuntu y que nos construye una maquina virtual con solo ejecutar el Script.



Si desean tengo el archivo en un repositorio de GitHub para quienes quieran aportar código al Script.


martes, 3 de mayo de 2016

VirtualBox desde Línea de Comandos Linux Ubuntu mediante la herramienta VBoxManage



ACTUALIZACIÓN

He creado un Script para crear una maquina de VirtualBox con solo ejecutar el Script en Bash, pueden consultar el Script en la siguiente entrada:


[ Crear Maquina Virtual en VirtualBox desde Script Bash Linux Ubuntu ]




VBoxManage es la interfaz de línea de comandos para VirtualBox, con esta herramienta se puede controlar completamente VirtualBox desde la línea de comandos del sistema operativo host.


Mediante el uso de VBoxManage se puede acceder a todas las características dadas desde la interfaz gráfica de usuario de VirtualBox, pero la herramienta VBoxManage soporta un poco más de características.


Hay que tener en mente dos cosas cuando usamos el comando VBoxManage, primero que todo el comando VBoxManage siempre debe ser usado con un subcomando específico, por ejemplo; list, createvm, startvm, la lista completa de subcomandos la pueden consultar en el siguiente Chapter 8. VBoxManage o desde línea de comandos ejecutar el comando VBoxManage sin subcomandos. Cada subcomando requiere que sea especificado una máquina virtual en particular, excepto el subcomando list.


Podemos identificar las máquinas virtuales creadas en VirtualBox mediante el uso del subcomando list:


usuario@linux~$ VBoxManage list vms


De esta forma la salida del comando nos lista todas las máquinas virtuales que tenemos creadas y información general de cada una de ellas. Podemos relacionar comandos a máquinas virtuales específicas, mediante el uso de su nombre o relativo a su UUID el cual es un identificador único interno generado por VirtualBox. Si el nombre de la máquina virtual incluye espacios, debemos escribir el nombre entre comillas dobles.




A continuación se describe el uso de comandos básicos para la gestión de máquinas virtuales en VirtualBox desde línea de comandos usando la herramienta VBoxManage.


Para este ejemplo, se va a configurar una máquina virtual que tiene como propósito funcionar con Linux Ubuntu Server 16.04 Xenial Xerus. Los requerimientos básicos de instalación se pueden consultar en el siguiente Ubuntu Server 16.04 Requerimientos.


  • VBoxManage createvm


Crea una máquina virtual mediante la definición de un archivo XML el parámetro --name <nombremaquina> es requerido para especificar el nombre de la máquina.


Por defecto este comando solo crea un archivo XML sin registrar automáticamente la máquina virtual en la instalación de VirtualBox. Para registrar inmediatamente la máquina virtual en VirtualBox se usa el parámetro --register o usando el comando VBoxManage registervm <nombremaquina> si ya tenemos una máquina virtual creada pero no registrada en VirtualBox.


usuario@linux~$ VBoxManage createvm --name “UbuntuServerXenial” --register


Hasta el momento solo se ha creado y notificado en VirtualBox un archivo XML de definición de máquina virtual, esto es como si tuviéramos hasta ahora una máquina sin configurar su hardware, como disco duro, tarjeta de red, memoria ram, procesador, etc.


Ahora debemos crear y asociar a la máquina virtual la configuración de hardware que deseamos tener.


  • VBoxManage createhd


Crea una nueva imagen de un disco duro virtual, el parámetro --filename <nombrearchivo> es obligatorio para el nombre de archivo del disco duro, el parámetro --size <espaciodisco> es obligatorio para definir el tamaña del disco duro virtual en unidades de MB.


El parámetro --format <formato> el formato de salida del archivo de disco duro, por defecto es VDI que es un archivo de expansión dinámica, este archivo no ocupa inmediatamente todo el espacio en disco que le fué asignado sino que a medida que es usado el espacio en disco duro virtual este archivo toma ese valor en disco duro del host. El formato VDI es el formato por defecto de VirtualBox, otros posibles formatos son VMDK, VHD.


usuario@linux~$ VBoxManage createhd --filename “UbuntuServerXenial.vdi” --size 2024 --format VDI


  • VBoxManage storagectl


Con este comando se puede vincular, modificar o remover un controlador de almacenamiento a una máquina virtual, para posteriormente vincular un medio virtual al controlador como por ejemplo un disco duro, unidad de cd/dvd.


El parámetro uuid|vmname es obligatorio para especificar a qué máquina virtual deseamos agregar el controlador. Con el parámetro --name <nombrecontrolador> especificamos el nombre del controlador que deseamos asignar, el parámetro --add <bus> define el bus del sistema al cual el controlador de almacenamiento debe ser conectado, los posibles valores son ide, sata, scsi y floppy.


usuario@linux~$ VBoxManage storagectl “UbuntuServerXenial” --name “IDE Controller” --add ide


  • VBoxManage storageattach


Usando este comando se puede vincular, modificar o remover un medio de almacenamiento conectado a un controlador de almacenamiento que ha sido previamente creado y agregado mediante el comando storagectl.


El parámetro uuid|vmname es obligatorio para especificar a qué máquina virtual deseamos agregar el controlador. Con el parámetro --storagectl se especifica el nombre del controlador de almacenamiento previamente creado, para ver la lista de controladores vinculados a una máquina virtual podemos usar el comando VBoxManage showvminfo <uuid|vmname>.


Con el parámetro --port <numeropuerto> se especifica el número del puerto del controlador de almacenamiento que se va a modificar, es obligatorio a menos que el controlador de almacenamiento tenga un único puerto.


El parámetro --device <numerodispositivo> especifica el número del dispositivo del puerto que se va a modificar, es obligatorio a menos que el controlador de almacenamiento tenga solo un dispositivo por puerto.


Con el parámetro --type <tipo> se especifica el tipo de medio que se va a vincular, desvincular o modificar, los posibles valores son dvddrive para un archivo de cd/dvd, hdd para un archivo de disco duro virtual y fdd para un archivo floppy.


El parámetro --medium <nombrearchivo> especifica que es lo que se va a vincular, si se especifica un nombre de archivo, este debe ser el path absoluto al archivo de una imagen de disco existente (ISO, VDI, RAW, VMDK u otro) el cual será vinculado al slot del dispositivo dado. Este parámetro tiene otros posibles valores que permiten vincular otros orígenes, por ejemplo la unidad DVD del host o vincular una imagen de VirtualBox Guest Additions, las posibles opciones se pueden consultar en el siguiente Chapter 8. VBoxManage storageattach.


Con el siguiente comando se vincula una imagen de disco duro virtual a la máquina virtual:


usuario@linux~$ VBoxManage storageattach “UbuntuServerXenial” --storagectl “IDE Controller” --port 0 --device 0 --type hdd --medium /PATHTO/UbuntuServerXenial.vdi


Donde /PATHTO/ representa el path absoluto a la ubicación del archivo de disco duro virtual UbuntuServerXenial.vdi, los parámetro --port 0 y --device 0 especifica que la imagen de disco duro virtual será montada en el puerto 0 del dispositivo 0.


Con el siguiente comando se vincula una imagen de disco cd/dvd a la máquina virtual:


usuario@linux~$ VBoxManage storageattach “UbuntuServerXenial” --storagectl “IDE Controller” --port 1 --device 0 --type dvddrive --medium /PATHTO/ubuntu-16.04-server-amd64.iso


Donde /PATHTO/ representa el path absoluto a la ubicación del archivo de una imagen de disco cd/dvd, en este caso es el instalador de Ubuntu Server 16.04 Xenial Xerus, los parámetro --port 1 y --device 0 especifica que la imagen de disco cd/dvd será montada en el puerto 1 del dispositivo 0.


  • VBoxManage modifyvm


Con este comando se pueden cambiar las propiedades de una máquina virtual que está registrada en VirtualBox y la cual no está en ejecución. La lista completa de propiedades que pueden ser configuradas se pueden consultar en el siguiente Chapter 8. VBoxManage modifyvm. Estas propiedades generalmente se definen con los requerimientos mínimos del sistema que deseamos instalar y configurar. El parámetro uuid|vmname es obligatorio para especificar a qué máquina virtual deseamos configurar sus propiedades.


usuario@linux~$ VBoxManage modifyvm “UbuntuServerXenial” [<propiedades>]


A continuación se describen las propiedades [<propiedades>] generales básicas para configurar una máquina virtual que previamente se ha creado y registrado.


Con el parámetro --description <descripción> podemos especificar una descripción de la máquina virtual que se ha creado, con esto podemos asociar fácilmente el propósito de la máquina virtual.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --description “Máquina Virtual para una instalación de Ubuntu Server 16.04 Xenial Xerus”


El parámetro --ostype <tipoos> sirve para especificar el tipo de sistema operativo que tiene instalado la máquina virtual.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --ostype “Ubuntu”


Se puede especificar la cantidad de memoria RAM que debe tomar la máquina virtual, la cantidad que es asignada debe ser inferior a la cantidad disponible del host, esto se hace mediante el comando --memory <cantidad> la cantidad se especifica en unidades de MB.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --memory 524


Es posible indicar si la máquina virtual tiene soporte para ACPI o I/O APIC se usa el parámetro --acpi <on|off>, en el caso de estar instalando un sistema operativo en la máquina virtual de 64-bit usamos el parámetro --ioapic <on|off>.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --ioapic on


Con el comando --cpus <cantidadcpu> se especifica la cantidad de CPUs virtuales para la máquina virtual, hay que tener en cuenta no usar un número máximo de núcleos de CPUs superior al total disponible en el host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --cpus 1


El parámetro --cpuexecutioncap <1-100> configura el porcentaje de procesamiento que deseamos asignar a las CPUs un valor de 50 indica que una CPU virtual solo puede usar el 50% de un CPU del host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --cpuexecutioncap 100


Si estamos seguros que nuestro sistema host soporta Virtualizacion por Hardware podemos activarlo en nuestra máquina virtual, usamos el parámetro --hwvirtex <on|off> para activar o desactivar la virtualización por hardware (Intel VT-x o AMD-V).


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --hwvirtex on


El parámetro --boot<1-4> permite configurar el orden de booteo de la máquina virtual, son cuatro slots que pueden ser accedidos, none|floppy|dvd|disk|net. En el caso de configurar el arranque en la unidad de cd/dvd el parámetro sería --boot1 dvd.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --boot1 dvd --boot2 disk --boot3 none --boot4 none


Es posible especificar la tarjeta de red virtual y que tipo de red debería estar disponible para la máquina virtual. Con el parámetro --nic<1-N> se especifica la tarjeta de red, se pueden vincular desde 1 hasta N tarjetas de red a la máquina virtual, las opciones disponibles para el tipo de red que debe tener la tarjeta son none|null|nat|natnetwork|bridged|intnet|hostonly|generic la especificación de cada tipo de red se puede consultar en el siguiente Chapter 8. VBoxManage modifyvm.


Una configuración básica es configurar un adaptador de red tipo bridged el cual consiste en conectar nuestra máquina virtual al adaptador de red de la máquina host así nuestra máquina virtual es visible a toda la red donde esta conectada la máquina host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --nic1 bridged


Si se ha configurado una tarjeta de red para la máquina virtual tipo bridged se debe especificar el adaptador de red de la máquina host, para esto se usa el parámetro --bridgeadapter<1-N> podemos tener tantos adaptadores de red como sea posible, las opciones disponibles son none|<devicename> donde <devicename> es el nombre de nuestro adaptador de red de la máquina host. Lo podemos consultar desde una terminal linux con el comando ifconfig.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --bridgeadapter1 wlp4s0


Con el parámetro --vram <cantidadvideoram> es posible especificar la cantidad de memoria para la tarjeta gráfica virtual de video, se establece en unidades de MB y no debe superar la cantidad física disponible en el host.


usuario@linux~$ VBoxManage modifyvm "UbuntuServerXenial" --vram 128


  • VBoxManage startvm


Con este comando se inicia el arranque de una máquina virtual, como parámetro se indica el nombre o el UUID de la máquina virtual.


usuario@linux~$ VBoxManage startvm “UbuntuServerXenial”


  • VBoxManage controlvm


Con este comando podemos cambiar el estado de una máquina virtual que actualmente se está ejecutando.


El parámetro <vm> poweroff permite apagar una maquina virtual, con el parámetro <vm> reset permite hacer un reinicio duro de la máquina virtual.


usuario@linux~$ VBoxManage controlvm “UbuntuServerXenial” poweroff


usuario@linux~$ VBoxManage controlvm “UbuntuServerXenial” reset


  • VBoxManage export


Con este comando es posible exportar una o más máquinas virtuales de VirtualBox en un dispositivo virtual en formato OVF el cual incluye una copia de la imagen del disco virtual comprimida en VMDK. El parámetro --output <nombrearchivo> define el nombre del archivo OVF donde se exporta.


usuario@linux~$ VBoxManage export --output maquina.ovf


  • VBoxManage import


Con este comando es posible importar una máquina virtual en formato OVF copiando las imágenes de disco virtual y creando una máquina virtual en VirtualBox. El parámetro --dry-run muestra en pantalla un log del proceso de importar una máquina virtual en formato OVF.


usuario@linux~$ VBoxManage import maquina.ovf --dry-run