Archivo de la etiqueta: VirtualBox

Instalar VirtualBox con soporte para USB en Ubuntu 12.04 LTS

1) Instalar VirtualBox

sudo apt-get install virtualbox virtualbox-dkms

El primero instala el programa y el segundo los módulos del kernel para ser recompilados automáticamente (DKMS: Dynamic Kernel Module Support), de forma que no sea necesario recompilar los módulos de VirtualBox en cada actualización del kernel. En Ubuntu 12.04 LTS la versión en repositorios es la 4.1.12.

Se requiere instalar en huéspedes los guest additions puede instalar el ISO para ser montado en los mismos con:

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

2) Agregar extensiones propietarias

VirtualBox es Software Libre bajo la GPL desarrollado por Oracle. Sin embargo el soporte para USB es una extensión propietaria bajo una licencia diferente, la PUEL (VirtualBox Personal Use and Evaluation License). Para instalar el soporte USB se debe descargar dicha extensión desde la página de VirtualBox: https://www.virtualbox.org/wiki/Downloads

Para la versión incluida en los repositorios oficiales es ésta.

Al descargar el archivo .vbox-extpack se hace doble click en el mismo y se abrirá VirtualBox. Se acepta la licencia y se ingresa la clave de root para su instalación.

3) Incluir usuarios al grupo de VirtualBox

Todos los usuarios que deseen capturar dispositivos USB en sus máquinas virtuales deben pertenecer al grupo vboxusers. Para agregar el usuario actual al grupo se ejecuta:

sudo usermod -aG vboxusers $USER

Se puede confirmar los grupos a los que pertenece el usuario con el comando id, por ejemplo:

$ id
uid=1000(cjenkins) gid=1000(cjenkins) groups=1000(cjenkins),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare),125(vboxusers),1001(bumblebee)

SE DEBE SALIR de la sesión de escritorio y volver a entrar para que los cambios de grupo surtan efecto.

4) (Opcional) Actualizar versión a 4.2

Para actualizar a la versión 4.2 se debe agregar la clave y repositorio de VirtualBox:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" > /etc/apt/sources.list.d/virtualbox.list'
sudo apt-get update

Seguidamente se instala la versión 4.2:

sudo apt-get install virtualbox-4.2

Seguramente es necesario instalar la versión de las extensiones propietarias para ésta versión en particular.

Anuncios
Etiquetado , , ,

Clonar un servidor Ubuntu en VirtualBox

Digamos que tienes que crear una red de computadoras virtual o tienes un servidor base que quieres clonar para especializarlo de forma que te ahorres la instalación y actualización de un servidor. VirtualBox permite clonar una máquina virtual y reiniciar el MAC Address de dicha máquina para que la puedas levantar en la red sin que halla colisiones. Esto es fácilmente realizable con nuestro servidor Ubuntu Server y vale mencionar que por cuestiones de licencia ésto no se puede realizar tal cual en servidores Windows.

El problema es que las máquinas clonadas se llaman igual, y una vez de que reinicias el Mac Address las máquinas no vuelven a tener red. Para distinguirlas en la red y hacer que vuelva a funcionar la interfaz eth0 se debe realizar los siguientes pasos:

  1. Cambiar el nombre del sistema.
  2. Cambiar el nombre del sistema en el archivo de hosts.
  3. Eliminar el archivo de red persistente.

1. Cambiar el nombre del sistema:

sudo nano /etc/hostname

Cambiar el nombre del sistema.

2. Cambiar el nombre del sistema en el archivo de hosts:

sudo nano /etc/hosts

Cambiar la línea 127.0.1.1 nombresistema con el nombre del sistema.

3. Eliminar el archivo de red persistente:

sudo rm /etc/udev/rules.d/70-persistent-net.rules

Este archivo contiene los MAC Address y será regenerado cuando se reinicie el sistema.

Finalmente reiniciamos sudo reboot y listo.

Etiquetado , ,

Iniciar máquinas virtuales de VirtualBox al inicio

Tengo una máquina virtual que quiero que inicie cada vez que bootea el servidor. Tanto mi VM como el servidor físico son Debian Lenny, ambos con openssh-server instalado como demonio de SSH para administrarlos, por lo que adrede no habilito el RDP de la VM y la corro como headless.

1. Iniciar las máquinas virtual

Para iniciar las máquinas ponemos esto en nuestro archivo /etc/rc.local :

#/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# VirtualBox start virtual machines on boot
# VMs Run user
RUN_USER=userexecutesvm
# VM run type. Options are [gui|sdl|vrdp|headless]. Check 'VBoxManage startvm'
VM_RUN_TYPE=headless
# Put the ID of the VMs. You can  put the unique id (ex. da52db1a-5b6e-4297-b4b6-aa9e293efcc8)
# or the human friendly VM name (ex. "Name of the VM").
# Check 'VBoxManage --nologo list vms' for information about your VMs
# Example variable:
# VMS=("Name of the VM 1" "Name of the VM2" da52db1a-5b6e-4297-b4b6-aa9e293efcc8)
VMS=("Name of the VM")
# Check for missing binaries
VIRTUALBOX_BIN=/usr/bin/VBoxManage
test -x $VIRTUALBOX_BIN || { echo "$VIRTUALBOX_BIN not installed"; exit 5; }
# Start the VMs
for i in "${VMS[@]}"
        do
		su - $RUN_USER -c "$VIRTUALBOX_BIN --nologo startvm '${i}' --type $VM_RUN_TYPE"
        done
exit 0

Es importante que cambien el usuario con el que ejecutarán las VM y que no sea root por seguridad. Está de más decir que el usuario es el mismo que con el que ejecutan normalmente la VM. El script /etc/rc.local es llamado sin argumentos por el script /etc/init.d/rc.local , pueden revisarlo para conocer como funciona. Ese script se encuentra enlazado como S99rc.local en los Run Levels 2 al 5 (link simbólico /etc/rcX.d/S99rc.local), que en Debian significan lo mismo. Por lo que entonces tenemos cubierto el inicio de la VMs.

2. Detener las VMs

Inicialmente cree mi propio script para detener las VMs. Sin embargo noté que existe el script /etc/init.d/vboxdrv . Al revisarlo, observé una buena implementación llamada stop_vms. El encabezado de la función menciona:

# enter the following variables in /etc/default/virtualbox:
# SHUTDOWN_USERS="foo bar"
# check for running VMs of user foo and user bar
# SHUTDOWN=poweroff
# SHUTDOWN=acpibutton
# SHUTDOWN=savestate
# select one of these shutdown methods for running VMs

Por lo que creamos el archivo /etc/default/virtualbox (ya que por defecto no existe) de esta forma:

host:~# nano /etc/default/virtualbox

SHUTDOWN_USERS="usuarioejecutavms"
SHUTDOWN=savestate

Ese script se encuentra enlazado como S20vboxdrv en los Run Levels 2 al 5 (link simbólico /etc/rcX.d/S20vboxdrv). Y como K20vboxdrv en los Run Levels 0, 1 y 6 (link simbólico /etc/rcX.d/K20vboxdrv). Es decir, que se llamará el script /etc/init.d/vboxdrv con el argumento stop cuando se apague el sistema (Run Level 0), se inicie como single-user mode (Run Level 1) o se reinicie el sistema (Run Level 6). El script vboxdrv sólo llama a stop_vms cuando se le llama con el argumento stop. Es decir, que las máquinas virtuales de los usuarios de la variables se apagarán usando el método especificado (en mi caso puse savestate) en dichos casos.

Con esto ya queda funcionando el sistema.

En resumen: El sistema al ejecutar rc.local se encarga de iniciar nuestras VMs. Al apagar o reiniciar vboxdrv se encarga de apagar nuestras VMs de forma como lo configuramos en /etc/default/virtualbox.

Etiquetado , ,

Redirección de puertos con VirtualBox

Mi router es una cochinada, es un DSL-2640T y desgraciadamente no se le puede poner DD-WRT o similares :S Tiene un bug terrible, que los “Virtual Servers”, o en español, redirección de puertos, no funcionan. O se borran al reiniciar el router o desaparecen después de unos minutos. Tengo una máquina en la DMZ y esta máquina tiene máquinas virtuales con diversos servicios. Ya que no puedo redireccionar puertos específicos a las máquinas virtuales configuradas en bridge con IP estáticas, las puse en NAT y con DHCP y seguí estos pasos en el host para redireccionar los puertos del (de los) guests:


VBoxManage modifyvm "Nombre de la VM" --natpf1 "guesthttp,tcp,,2080,,80"
VBoxManage modifyvm "Nombre de la VM" --natpf1 "guestssh,tcp,,2022,,22"

En este ejemplo estoy “publicando” el puerto 80 de una máquina virtual (un apache) en el puerto 2080 de nuestra máquina host (mi máquina en la DMZ). También hago lo mismo para el SSH.

Nota muy importante, no se pueden asignar puertos menores que 1024 sin ejecutar VirtualBox como root y escalar permisos (super desaconsejado!). Por eso puse 2022 y 2080 en lugar de 1022 y 1080.

La documentación de esta característica está en el manual aquí.

Etiquetado ,