VirtualBox

Solapas principales

Índice

  1. Introducción.
  2. Instalación.
  3. Configuración.
  4. Agregar máquinas virtuales.
  5. Compartir carpetas.
  6. Crear Snapshots de nuestra máquina virtual.
  7. Otras operaciones con las máquinas virtuales.
  8. Fuentes.

 

1. Introducción.

VirtualBox es un software que nos permite ejecutar diferentes "Sistemas Operativos" simultáneamente en el mismo equipo físico, lo que conocemos como virtualización de sistemas.

VirtualBox fué desarrollado bajo el paraguas de Sun, y como otras tecnologías que fueron liberadas tras la compra de Oracle siempre supone un cierto riesgo para su continuidad. En éste caso parece que Oracle no ha cerrado el desarrollo de puertas adentro como ha hecho como por ejemplo con el sistema de ficheros ZFS, o el sistema OpenSolaris, o el sistema de base de datos MySQL, etc .... Hoy en día tenemos OpenZFS, IllumOS y MariaDB, así como LibreOffice.

Todo lo que se va a desarrollar aquí es para la CLI. Existen a nivel gráfico no sólo la interfaz conocida desarrolladora bajo QT sino que hay una interfaz web php que se parece mucho al estilo de los servidores ESX VMware.

VirtualBox realizado una virtualización completa del hardware y es un mayor consumidor de recursos a diferencia de otras técnicas que usan contenedores donde bajo el mismo kernel se ejecutan diferentes instancias.

 

2. Instalación.

En los repositorios de Debian disponemos de los paquetes necesarios pero hay ciertos módulos que deben ser cargados por el kernel y éstos se distribuyen en formato DKMS que es un sistema para compilarlos automáticamente y tras cada actualización del kernel éstos se volveran a recompilar.

$ aptitude install virtualbox virtualbox-dkms

Pero el proyecto VirtualBox tiene en su web repositorios de paquetes para diferentes sistemas operativos, y ahí te lo dan todo ya compilado. Al instalar estos dos paquetes se van a instalar por dependencias todo lo necesario para compilar empezando por las fuentes del kernel linux, el compilador y muchos paquetes más. Estos paquetes están en la rama contrib.

 

3. Configuración.

Para poder usar VirtualBox hay que darle permisos al usuario bajo el cual vamos a trabajar para que pueda acceder a ciertos recursos como los dispositivos de red, para ello debemos agregar nuestro usuario a los grupos vboxusers.

usermod -a -G vboxusers usuario

Hay cosas que cada uno hace a su estilo, yo configuro una máquina por usuario y creo cuentas de usuario numeradas por orden vboxuser1, vboxuser2....vboxuserX , con la idea de que ese orden va a estar relacionado con los puertos RDP que activaré más adelante para tener una salida gráfica en remoto de modo que en lugar de usar el puerto estandar 3389 voy a usar el orden siguiente 3301, 3302, ... 33XX . La idea es jugar con los números y hacerlo lo más simple posible en base al problema que se nos presente. Con ésto vamos a tener X máquinas virtuales ejecutadas cada una bajo la cuenta de un usuario y con un puerto RDP para acceder del siguiente modo:

rdesktop ip_maquina_fisica:33XY

Comentar en éste punto que para el uso del protocolo RDP hay que instalar un paquete de extensión que es propietario. Hay esfuerzos por usar el VNC estandar pero en el momento de usar esa solución no ha funcionado correctamente. Éste pack de extensión sólo lo encuentras en la web del proyecto en la misma url de repositorios indicada anteriormente y además debe coincidir en número de versión con el VirtualBox que vamos a usar, mirar aquí . Una vez descargado el pack de extensiones la instalación corre a cargo del comando de marras:

VBoxManage extpack install [--replace] <tarball>
VBoxManage extpack uninstall [--force] <name>
VBoxManage extpack cleanup

 

4. Agregar máquinas virtuales.

A continuación encuentras un bloque de comandos mínimo para crear una máquina virtual con un sólo disco, una tarjeta de red y con una unidad de CD donde conecto la imagen ISO del sistema a instalar.

MACHINE="maquina1"
PORTVRDE=3301
MEMORIA=1048
DISCO=8192
RED=eno0

VBoxManage createvm --name $MACHINE --register
VBoxManage modifyvm $MACHINE --vrdeport $PORTVRDE --ostype $OSTYPE --memory $MEMORIA

VBoxManage createhd --filename disco1 --size $DISCO --variant fixed
VBoxManage storagectl $MACHINE --name controladora1 --add ide --bootable on
VBoxManage storageattach $MACHINE --storagectl controladora1 --port 0 --device 0 --type hdd --medium disco1.vdi 
VBoxManage storageattach $MACHINE --storagectl controladora1 --port 0 --device 1 --type dvddrive --medium /tmp/$DVD

VBoxManage modifyvm $MACHINE --nic1 bridged --bridgeadapter1 $RED --cableconnected1 on

echo -e "Procedemos a levantar la máquina virtualbox."
echo -e ""

VBoxHeadless --startvm $MACHINE --vrde on

Es fácil de leer cada uno de los comandos, como podéis ver el comando VBoxManage es todo lo que necesitamos y tiene infinidad de opciones. Es importante indicar que en la documentación del proyecto con los años han ido cambiado muchas cosas y precisamente el como conectar a red una máquina ha cambiado mucho. De todos es conocido el modo NAT donde se le asigna vía dhcp al sistema cliente una ip que sólo tiene existencia en VirtualBox, también tenemos el modo red interna donde no hay conexión con la LAN pero si podemos defirnir una red identificada por un nombre a la que conectar varias máquinas virtuales. Pero el modo en que se conecta la interfaz de red ha cambiado, antes teniamos que crear un dispositivo bridged y ahora podemos indicar directamente el dispositivo de red del sistema anfitrión. En el ejemplo que aparece el interfaz de red del anfitrión se ha conectado directamente y debe asignarse una ip fija que tendrá presencia en la LAN.

En un servidor podemos tener diferentes máquinas virtuales compartiendo el mismo interfaz de red físico o podemos distribuir las diferentes máquinas virtuales entre las diferentes interfaces de red del servidor si disponemos de ellas. Podemos hacer que las máquinas virtuales negocien el enlace de red a 100Mb/s mientras el anfitrión el anfitrión tiene una tarjeta de red que trabaja a 1000Mb/s y de éste modo hacer una estimación del número de máquinas virtuales por interfaz físico.

El último comando es el que nos permite arrancar la máquina virtual y si nos interesa habrá que crear un script para el arranque al inicio del servidor. Mientras que el arranque lo hacemos con el comando VBoxHeadless las diferentes opciones de parada la hacemos con el comando VBoxManage:

VBoxManage controlvm $MAQUINA savestate
VBoxManage controlvm $MAQUINA poweroff

En el bloque anterior diferenciamos entre savestate que permite guardar el estado del sistema a disco de modo que un arranque posterior dejaría el sistema tal y como estaba, y el poweroff que es como desconectar la corriente. 

En el detalle resumen de una máquina virtual aparecen también las snapshots, el puerto rdp usado, el dispositivo de red asignado, etc.. 

VBoxManage showvminfo $MAQUINA

 

5. Compartir carpetas.

Para poder compartir archivos entre el Host Virtual (Invitado) y el Anfitrión es necesario instalar en el Host Invitado el software "VirtualBox Guest Additions", ésto que en la interfaz gráfica se traduce en ir al menú y marcar la opción correpondiente se traduce en la CLI en disponer de la imagen ISO que encontraremos en el paquete "virtualbox-guest-additions-iso" y conectarlo a a la unidad de CD.

VBoxManage storageattach $MACHINE --storagectl controladora1 --port 0 --device 1 --type hdd --medium imagen_iso.iso

Y una vez montado ese disco proceder a ejecutar el script correspondiente "VBoxLinuxAdditions.run" a la arquitectura del sistema virtualizado, en el caso de Debian se traduce en un fuente que hay compilar!!

Para compartir la carpeta del sistema en el Host anfitrión con el comando:

VBoxManage sharedfolder add "Nombre_Maquina_Virtual" -name "nombre_a_mostrar" -hostpath "/ruta/carpeta/compartida"

En Windows ejecutar: \\vboxsvr\Nombre_carpeta_compartida y luego vaya a "Mi PC" y ahí estará montada el directorio compartido. También puede mapear la unidad de red con: net use z: \\vboxsrv\Nombre_carpeta_compartida (Observar que hay que introducir un espacio después de z:) Donde Nombre_carpeta_compartida es lo mismo que pusimos como argumento del parámetro -name en el comando VBoxManage (nombre_a_mostrar) en el Host Anfitrión.

En Linux se monta la unidad con:

 mount -t vboxsf [-o OPTIONS] Nombre_carpeta_Compartida /ruta/donde/se/desea/montar

 

6. Crear Snapshots de nuestra máquina virtual.

Las instantáneas (snapshots) sirven para crear fotos del disco duro virtual, esa foto puede restaurarse en cualquier momento. 

Un recurso que hago de las snapshots es tener una por cada día de la semana en un sistema rotatorio de modo que al volver a empezar borro la anterior snapshot que corresponde a dicho día de la semana, ésto no constituye un backup pero sí un salvavidas para cuando ocurre un desastre no hardware.

VBoxManage snapshot $MAQUINA take nombre_snapshot

Revisar la documentación para borrar snapshot, hacer un listado de los snapshots, etc ... 

 

7. Otras operaciones con las máquinas virtuales.

El comando VBoxManage nos permite hacer muchas otras operaciones con las máquinas virtuales:

  • Podemos exportar una máquina virtual para poder importarla en otra instalación de VirtualBox, hay que tener cuidado con las direcciones MAC y para ello hay opcióno adicional para que las regenere de nuevo.
  • Al igual que hicimos en la creación de la máquina virtual al crear un disco y asignarle un conector ide/sata podemos definir a posteriori más discos y asignarlos, eso sí todas estas operaciones requieren que la máquina virtual esté apagada, apagada no es el sistema parado con el estado guardado.
  • Se puede hacer tunning del acceso red, del acceso a disco, del uso de cpu... de modo que se pueda limitar el uso de dichos recursos.

 

12. Fuentes.

http://virtualbox.org
http://virtualbox.org/download/UserManual.pdf