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.
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!
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»
[…] También vamos a decirle al servidor que arranque automáticamente nuestro router virtualizado cuando se encienda. […]