Tabla de Contenidos

Instalando y usando VirtualBox OSE

OSE - Open Source Edition

Esta versión no cuenta con soporte USB por lo que no podrá utilizar sus dispositivos. Al menos por ahora.

Consideraciones

Si ha instalado VirtualBox sobre un sistema GNU/Linux hay un paso que debe realizar manualmente para que los usuarios puedan poner a correr sus máquinas virtuales.

Consiste en agregar el/los usuario(s) que se desea tenga(n) permiso(s) para usar el virtualbox al grupo vboxusers creado durante la instalación de la aplicación. Para ellos tiene 2 formas de hacerlo:

  1. Editar el archivos /etc/group y agregar el/los usuario(s) al grupo vboxusers
  2. Agregar el grupo vboxusers al/los usuario(s) que se considere necesario usando el comando usermod:
  usermod -Gvboxusers -a <user>

Si no se especifica lo contrario, VirtualBox creará en el home del usuario que corra el sistema un directorio .VirtualBox dónde colocará el listado de las máquinas creadas por el usuario(VirtualBox.xml) y las configuraciones de cada una(~/.VirtualBox/Machines) y los discos virtuales(~/.VirtualBox/VDI) usados por las mismas.

VirtualBox (desde la línea de comandos)

No he encontrado un documento donde estén reseñados los comandos de línea más interesantes de VirtualBox, por eso escribo aquí mi breve resúmen.

Administración de máquinas virtuales

Máquinas disponibles

 vboxmanage list vms | grep <nombre_maquina>

Prender y apagar máquina

 vboxsdl -vm <nombre_maquina>
Apagar la máquina desde línea de comando equivale a apagarla desde el botón de power en un hardware real (puede ser peligroso para los datos)
 vboxmanage controlvm MaquinaVirtual poweroff

Duplicar disco de una máquina

 vboxmanage clonevdi <nombre_maquina_acutal>.vdi <nombre_maquina_nueva>.vdi

También es posible mediante la copia normal:

 cp clonevdi <nombre_maquina_acutal>.vdi
 vboxmanage internalcommands setvdiuuid <nombre_maquina_acutal>.vdi
En este caso, luego de copiar el disco se deberá crear un nuevo número único de identificación(UUID) para esa unidad, de lo contrario el sistema no lo reconocerá correctamente.

Veamos un ejemplo práctico de ambos casos:

  vboxmanage clonevdi hd_maq1.vdi hd_maq2.vdi

o

  cp hd_maq1.vdi hd_maq2.vdi
  vboxmanage internalcommands setvdiuuid hd_maq2.vdi

Redes

Forwardiar puertos hacia la maquina virtual

Para que la maquina virtual la pueda levantar un usuario comun, el puerto HostPort debe ser alto.

Esto nos permitirá acceder a servicios de la maquina virtual desde el equipo host.

 vboxmanage setextradata "<nombre_maquina_virtual>" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/<nombre_servicio>/HostPort" <puerto_origen_servicio>
 vboxmanage setextradata "<nombre_maquina_virtual>" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/<nombre_servicio>/GuestPort" <puerto_destino_servicio>
 vboxmanage setextradata "<nombre_maquina_virtual>" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/<nombre_servicio>/Protocol" <protocolo_servicio>

Esta información queda guardada en ~/.VirtualBox/Machines/<nombre_maquina_virtual>/<nombre_maquina_virtual>.xml así que se corre una sola vez. Por consiguiente, podría editar el archivo y agregar las lineas manualmente y agregar las siguientes lineas dentro del tag <ExtraData>:

    <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/<nombre_servicio>/HostPort" value="<puerto_origen>"/>
    <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/<nombre_servicio>/GuestPort" value="<puerto_destino>"/>
    <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/<nombre_servicio>/Protocol" value="<protocolo>"/>

Veamos un ejemplo:

Aquí agregamos un forward para los puertos 22, 3690 y 80 de la máquina virtual usando los puertos 2222, 3690 y 8080 respectivamente editando el archivo XML de la maquina virtual:

      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" value="2222"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" value="22"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" value="TCP"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/svn/HostPort" value="3690"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/svn/GuestPort" value="3690"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/svn/Protocol" value="TCP"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/HostPort" value="8080"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/GuestPort" value="80"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/web/Protocol" value="TCP"/>

esto mismo usando el comando vboxmanage quedaría de la siguiente forma:

   vboxmanage setextradata "mimaqvirtual" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2222
   vboxmanage setextradata "mimaqvirtual" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
   vboxmanage setextradata "mimaqvirtual" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP

Referencias y datos adicionales