VirtualBox en Ubuntu Server 22.04

Desde siempre me apasionó la virtualización de sistemas. Me fascinaba la posibilidad de poder tener máquinas virtuales de VirtualBox aisladas, donde poder hacer mis pruebas de laboratorio sin dejar el ordenador de trabajo hecho unos zorros. Además de la posibilidad de clonarlas, sacar instantáneas y un sinfín de posibilidades que ofrecen.

Uno de los usos mas recurrentes que les daba era cuando necesitaba conectarme a la VPN de alguno de nuestros clientes para la revisión de alguna incidencia. Muchas de estas VPN te dejaban sin conexión a internet y, mientras estuvieras conectado a ella ya podían enviarte emails, mensajes de Teams, que tú no te ibas a enterar hasta que no te desconectaras. Poco a poco se hicieron indispensables en mi jornada laboral.
Y, aunque con la llegada de Docker surgieron nuevas soluciones a algunos de los problemas que venía solucionando con VirtualBox, lo cierto es que no lo puede remplazar completamente.

Ahora sí, también cabe mencionar que el uso de máquinas virtuales también tienen su lado menos bueno, y es el consumo de recursos del sistema anfitrión. Para la gente pobre como yo, que tenemos unos equipos de trabajo bastante modestos, tener que hipotecar unos gigas de memoria mas un poquito de CPU, cuando tienes abiertos un par de IDE‘s de trabajo dificulta bastante las cosas (la gente que trabaje a diario con un Android Studio sabrá bien de lo que hablo). Por este motivo, decidí llevarme la instalación de VirtualBox a mi Ubuntu Server 22.04.

Un momento, Pedro. Pero si un servidor Ubuntu no tiene interfaz gráfica… ¿Cómo vas a instalar VirtualBox ahí?

Pues sí puedes, y puedes hacer todo lo que venías haciendo desde la GUI de VirtualBox (me atrevería a decir que incluso más…), la interacción será ahora mediante CLI. Y aunque existe una vasta documentación en internet respaldada por una gran comunidad, en este artículo os voy a enseñar los pasos para instalar VirtualBox, crear una máquina virtual, configurarla y acceder a ella.

Instalando VirtualBox

A continuación os doy los comandos para una instalación básica de VirtualBox.

Como de costumbre, actualizamos los repositorios.

sudo apt update

Instalamos las actualizaciones de software que hubieran disponibles.

sudo apt upgrade -y

Instalamos VirtualBox

sudo apt install virtualbox -y

Verificamos que VirtualBox ha sido instalado correctamente consultando la versión.

vboxmanage -version

Instalamos ahora el paquete de extensión.

sudo apt install virtualbox-ext-pack -y

Y además de los básicos, también te recomiendo que instales la iso de las Guest Additions para instalarlas en tus máquinas virtuales.

sudo apt-get install virtualbox-guest-additions-iso

Pues ya lo tenemos. Ahora mi consejo es que preparéis un directorio en alguna unidad del servidor con capacidad suficiente para alojar las máquinas virtuales.

Crear máquina virtual a partir de vdi existente

Si quieres crear una máquina virtual a partir de un disco duro virtual (por ejemplo que hayas copiado de otra máquina ya existente) los pasos son los siguientes:

Creamos la máquina, indicando el basefolder donde tengamos todas nuestras máquinas (el comando ya crea un directorio para la nueva máquina). Indicamos el tipo de sistema operativo y le asignamos un nombre.

vboxmanage createvm --ostype Windows7_64 --basefolder "/media/datahd/vms" --register --name W7_1

Con la siguiente instrucción configuramos la máquina recién creada. Le estamos asignando 2048 mb de RAM y indicamos que el tipo de interfaz de red es de tipo bridge y que enlaza con la interfaz real del servidor enp2s0 (necesitarás conocer de antemano as interfaces de las que dispones, el comando ip a es tu amigo). El resto de argumentos me los reservo para el siguiente apartado.

vboxmanage modifyvm W7_1 --memory 2048 --nic1 bridged --bridgeadapter1 enp2s0 --vrde on --vrdeport 33890 --vram 64 --clipboard-mode bidirectional --vrdeproperty Client/DisableClipboard=0

Añadimos una controladora SATA a la máquina.

vboxmanage storagectl W7_1 --name SATA --add sata --controller IntelAhci

A esta controladora le conectamos el vdi del que ya disponíamos.

vboxmanage storageattach W7_1 --storagectl SATA --port 0 --device 0 --type hdd --medium /media/datahd/vms/W7_1/W7_1.vdi

Y listo! Ya podemos encender la máquina con el siguiente comando.

vboxmanage startvm W7_1 --type headless

Ok, Pedro. ¿Y dónde está la máquina?

¿Qué es VRDE?

VirtualBox nos permite la visualización de máquinas remotas como si se estuvieran ejecutando en nuestro sistema local. Implementa la visualización remota de máquinas a través de una interfaz de extensión genérica llamada Extensión de Escritorio Remoto de VirtualBox (VRDE). Oracle proporciona soporte para el Protocolo de Visualización Remota de VirtualBox (VRDP) en dicho paquete de extensión.

Además, VRDP es una extensión compatible con versiones anteriores del Protocolo de Escritorio Remoto (RDP) de Microsoft, por lo que puedes utilizar cualquier cliente RDP estándar para controlar la máquina virtual remota.

Si ahora volvemos al comando en el que configurábamos la máquina virtual y nos fijamos en estos parámetros:

--vrde on --vrdeport 33890

Lo que estamos indicando es que se habilite en la máquina la extensión VRDE y que quede a la escucha en el puerto 33890.

Creando máquina virtual desde 0

Si, al contrario del primer ejemplo, no disponemos de un disco vdi con el sistema operativo ya instalado y queremos crear una máquina desde el inicio, los pasos serán ligeramente distintos. En esta ocasión necesitamos definir el que será nuestro vdi, así como disponer de los medios de instalación. Para este ejemplo voy a crear una máquina virtual en la que voy a instalar un Ubuntu Server a partir de la iso.

Primero consulto los tipos de sistema operativos para averiguar cuál debo utilizar en esta ocasión.

vboxmanage list ostypes

Ahora creo la máquina.

vboxmanage createvm --ostype Ubuntu_64 --basefolder "/media/datahd/vms" --register --name USERVER_1

La configuro igual que la anterior, indicando un puerto VRDE distinto y omitiendo los argumentos relacionados con el portapapeles.

vboxmanage modifyvm USERVER_1 --memory 2048 --nic1 bridged --bridgeadapter1 enp2s0 --vrde on --vrdeport 33891 --vram 27

Ahora creo un vdi vacío, con un tamaño inicial de 10 Gb.

vboxmanage createhd --filename /media/datahd/vms/USERVER_1/USERVER_1.vdi --size 10000 --format VDI

Creo una controladora SATA y le conecto el disco recién creado.

vboxmanage storagectl USERVER_1 --name SATA --add sata --controller IntelAhci
vboxmanage storageattach USERVER_1 --storagectl SATA --port 0 --device 0 --type hdd --medium /media/datahd/vms/USERVER_1/USERVER_1.vdi

Ahora creo una controladora IDE y le conecto la iso de instalación como si de un DVD se tratase.

vboxmanage storagectl USERVER_1 --name IDE --add ide
vboxmanage storageattach USERVER_1 --storagectl IDE --port 0 --device 0 --type dvddrive --medium /media/datahd/isos/ubuntu-22.04.1-live-server-amd64.iso

Arrancamos la máquina.

vboxmanage startvm USERVER_1 --type headless

Ahora ya puedes usar tu cliente RDP y conectarte al puerto 33891 de tu equipo anfitrión. Esto te mostrará el asistente de instalación del sistema operativo que elegiste. Recuerda que tras la instalación deberás eliminar el medio de instalación para que no te vuelva a parecer el GRUB tras reiniciar la máquina virtual.

vboxmanage storageattach USERVER_1 --storagectl IDE --port 0 --device 0 --type dvddrive --medium none

Ojo, esto no lo había comentado. Si tienes el firewall habilitado en tu sistema anfitrión seguramente tengas que habilitar excepciones para los puertos VRDE que elegiste. En el caso de mi máquina USERVER_1 tuve que habilitarlo con este comando:

sudo ufw allow 33891/tcp

Conclusión

Si has llegado hasta aquí, ya sabes cómo instalar VirtualBox en tu servidor Ubuntu y crear tu primera máquina virtual. Y si resulta que no eres gran amigo de la línea de comandos, me complace informarte de que existen varias alternativas para manejar tu nueva instalación de VirtualBox, como son clientes web y aplicaciones Android, pero esto ya lo veremos en otro post.

Si te gustó, comparte!