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 , ,

3 pensamientos en “Iniciar máquinas virtuales de VirtualBox al inicio

  1. Gabriel Diaz dice:

    Te queria consultar porque en debian 7, se me apaga la maquina fisica antes que las maquinas viruales… y segui tus pasos, el arranque esta todo ok, el problema es en el apagado!

  2. Weymar dice:

    buenos dias soy muy nuevo en este tema de linux instale en un equipo viejo para hacer pruebas lubuntu y cree dos maquinas virtuales con virtualbox pero la verdad no entiendo cuales son los usuarios que tengo que modificar es que segun yo estos son usuarios? RUN_USER=userexecutesvm
    su – $RUN_USER -c «$VIRTUALBOX_BIN –nologo startvm ‘${i}’ –type $VM_RUN_TYPE»

  3. […] También vamos a decirle al servidor que arranque automáticamente nuestro router virtualizado cuando se encienda. […]

Replica a Gabriel Diaz Cancelar la respuesta