Crear servicio para VirtualBox

Para ejecutar máquinas virtuales de VirtualBox desde el inicio del sistema y como servicios es necesario crear un script para el demonio.

El primer paso que tenemos que hacer, es crear el script, para ello, abrimos una terminal como usuario ROOT:

 # vim /etc/init.d/virtualbox-Monowall

a continuación, se introduciría el siguiente contenido que posteriormente hay que adaptarlo a la máquina propia (en el ejemplo se ejecuta una máquina Monowall)

 
#! /bin/sh
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Monowall virtual machine"
NAME=virtualbox-Monowall
SCRIPTNAME=/etc/init.d/$NAME

MANAGE_CMD=VBoxManage
VM_OWNER=carlos
VM_NAME="Monowall#This has to be the name exactly as it appears in your VirtualBox GUI control panel.

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started

sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:s*running" >/dev/null && {
echo "$VM_NAME" is already running.
return 1
}

sudo -H -u $VM_OWNER $MANAGE_CMD startvm "$VM_NAME" --type vrdp >/dev/null || >/dev/null || {
echo Failed to start "$VM_NAME".
return 2
}

echo "$VM_NAME" started or resumed.
return 0
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred

sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:s*running" >/dev/null || {
echo "$VM_NAME" is already stopped.
return 1
}

sudo -H -u $VM_OWNER $MANAGE_CMD controlvm "$VM_NAME" savestate || {
echo Failed to stop "$VM_NAME".
return 2
}

echo "$VM_NAME" suspended.
return 0
}

#
# Display "State" field from showinfo action
#
do_status()
{
sudo -H -u $VM_OWNER $MANAGE_CMD showvminfo "$VM_NAME"|grep "^State:s*.*$"
}

case "$1" in
start)
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ]  ;;
2) [ "$VERBOSE" != no ]  ;;
esac
;;
stop)
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] ;;
2) [ "$VERBOSE" != no ]  ;;
esac
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
"Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
status)
do_status
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 3
;;
esac
:

Resumidamente, hay que incluir el nombre de la máquina tal y como está definida en VirtualBox, el usuario que la ejecuta (y que mantiene por tanto sus ficheros de configuración en $HOME/.VirtualBox y el nombre del propio script)

Tenemos que darle los permisos al script

# chmod 755 /etc/init.d/virtualbox-Monowall

Ahora para arrancar, parar o reiniciar la máquina de virutalbox, basta con ejecutar:

# /etc/init.d/virtualbox-Monowall {start/stop/restart}

Con esto, podemos hacer que una máquina virtual arranque desde el inicio de la máquina, para ello tenemos que añadirla al chkconfig y añadir el script al arranque, para ello ejecutamos:

# chkconfig --add virtualbox-Monowall 
# chkconfig virtualbox-Monowall on

Fuente: gacimartin.com.

Un saludo!

3 COMMENTS
  • Crear servicio para VirtualBox | Carlos Campos
    Responder

    […] Tengo nueva dirección, la entrada ahora se encuentra en http://www.ccamposfuentes.es […]

  • Borja
    Responder

    Buenas Carlos, me gustaría iniciar mi ordenador con alguna maquina virtual que tengo instalada en virtualbox, es decir, lo que quiero es antes de que inicie mi Windows 7 iniciar virtualbox o alguna maquina virtual. Puede hacerse eso? Podrías explicarme como? Gracias y perdón por las molestias.

    1. Carlos Campos
      Responder

      Hola Borja,

      si quieres hacer eso, lo que tienes que hacer es instalar el sistema operativo que desees y usar algún bootloader dual (si quieres instalar alguna distribución de linux, esto no sería necesario ya que vienen por defecto.

      Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: