¿Cómo iniciar máquinas virtuales de caja automáticamente al arrancar?

53

Tengo muchas máquinas de caja virtual en mi Ubuntu12.04, cada vez que apago o reinicio tengo que iniciarlas una por una.

Quiero una ayuda para escribir un script para iniciar automáticamente las máquinas VBox automáticamente al arrancar.

Maythux
fuente
@SergiyKolodyazhnyy Esta pregunta no es un duplicado de eso, de ninguna manera.
Muhammad bin Yusrat

Respuestas:

51

Puede usar el servicio de inicio automático de VirtualBox. Un buen tutorial que describe cómo hacer esto se publica en el blog "Life of a Geek Admin" .

Los siguientes pasos están adaptados de la publicación de blog vinculada:

  1. Primero debe crear el archivo /etc/default/virtualboxy agregar algunas variables.

    VBOXAUTOSTART_DB que contiene una ruta absoluta al directorio de la base de datos de
    inicio automático y VBOXAUTOSTART_CONFIG que contiene la ubicación de la configuración de inicio automático. El archivo debería ser similar a esto:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
  2. Ahora necesitamos crear el /etc/vbox/vbox.cfgarchivo y agregar

    # Default policy is to deny starting a VM, the other option is "allow".
    default_policy = deny
    # Create an entry for each user allowed to run autostart
    myuserid = {
    allow = true
    }

    Nota: Si el nombre del archivo vbox.cfgno funciona arriba, intente nombrarlo autostart.cfg.

    Si usted es el único usuario, simplemente puede agregar la línea default_policy = allowal vbox.cfgarchivo.

  3. Establezca permisos en el directorio para el grupo de usuarios de vbox y asegúrese de que los usuarios puedan escribir en el directorio, así como en bits fijos.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
  4. Agregue cada uno de los usuarios al vboxusersgrupo.

    sudo usermod -a -G vboxusers USERNAME

    (reemplazar USERNAMEcon el nombre de usuario)

NOTA : Si ha cambiado los permisos de grupo para el usuario actual, cierre la sesión y vuelva a iniciarla para actualizar los permisos. (crédito @ kR105)

  1. Cada usuario que quiera habilitar el inicio automático para máquinas individuales debe establecer la ruta al directorio de la base de datos de inicio automático con

    VBoxManage setproperty autostartdbpath /etc/vbox

    y habilite el inicio automático para una VM individual con

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

    Esto creará un myuserid.start archivo en el /etc/vboxdirectorio

  2. Ahora reinicie vboxautostart-service para leer los cambios.

    sudo service vboxautostart-service restart
  3. Reinicie su sistema y su VM debería comenzar

kdmurray
fuente
cómo iniciar una máquina virtual en particular usando un script de inicio
Principiante
1
Mi 14.04 afirma que no existe un servicio como 'vboxautostart-service', ¿has probado esto?
Arronical
@Arronical El OP y las instrucciones de las que se obtuvo la respuesta fueron para Ubuntu 12.04. YMMV con versiones después de eso.
kdmurray
Resulta que virtualbox 4.3.10 no descarga los scripts de inicio en 14.04, pero la respuesta de ndasuser a continuación me ayudó a solucionarlo. ¡+1 en todo!
Arronical
Intenté hacer que esta solución funcionara en ubuntu 15.10 sin éxito. Terminé de usar esta publicación freesoftwareservers.com/index.php/2015/10/24/… .. tal vez no sea el enfoque correcto, pero funciona
mozart_ar
15

Tuve incidentes infelices similares al intentar esta operación en el Vanilla LTS.

~$ cat /etc/os-release 
NAME="Ubuntu" 
VERSION="14.04.1 LTS, Trusty Tahr" 

En esta versión, el archivo de clave /etc/init.d/vboxautostart-service no estaba instalado.

Hasta donde yo sé, apt-get puso todos los requisitos y VitualBox, así que no puedo decir por qué el archivo 'vboxautostart-service' no se proporcionó también. Pero para superar esto, aquí está mi actualización de la publicación de kdmurray.

1) El archivo / etc / default / virtualbox existía para mí. Por lo tanto, debe agregar vars:

VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg

2) Debe crear /etc/vbox/autostart.cfg como lo indica OP.

6b) Necesita obtener un script vboxautostart-service y hacerlo ejecutable.

cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service

6c) Alerté al controlador rc.d, pero usé 24 como hora de inicio. Poniendo solo 20 y no se inició. Quizás funcionó incluso antes de que virtualbox funcionara.

sudo update-rc.d vboxautostart-service defaults 24 24

Luego reiniciar lanzó la VM correctamente.

ndasusers
fuente
1
En la versión 5.2, debe editar vboxautostart-service y reemplazar vboxdrven las líneas # Required Start/ # Required Stoppor virtualbox. Parece que cambiaron el nombre del servicio, por lo que el sistema operativo no puede detectar correctamente las prioridades de inicio / detención. Creo que no necesita el paso 6c si reemplazó esas líneas.
espina de pescado
Muchas gracias @fishbone, tu comentario fue el truco que me faltaba
Jairo Andres Velasco Romero
6

Puedes usar vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(uno de esos). Use "sin cabeza" si son servidores a los que se conecta por otros medios que no sean la interfaz gráfica de usuario.

Para ejecutar estos comandos en el momento correcto durante el arranque, querrá leer en Upstart.

Jo-Erlend Schinstad
fuente
6

Después de muchas horas infelices tratando de que los procedimientos de kdmurray anteriores funcionen, sin éxito finalmente encontré un método que funcionó de manera simple.

Primero, mi host Linux (Mint 17) se configuró en el momento del arranque para iniciar sesión automáticamente en mi cuenta principal.

En segundo lugar, utilicé las instalaciones en VirtualBox GUI (v4.3.12) para crear un acceso directo para cada máquina virtual en el escritorio. {haga clic derecho en la VM en la columna izquierda y seleccione "Crear acceso directo en el escritorio"}

A continuación: ya descubrí que al abrir Menú-> Centro de control -> Aplicaciones de inicio -> Agregar y agregar accesos directos del escritorio, los archivos no funcionaban, descubrí en otra respuesta en esta página que la ubicación de las nuevas empresas es / home /USERNAME/.config/autostart, así que hice clic derecho en cada uno de los accesos directos de VM de escritorio y luego los pegué en esa carpeta, sobrescribiendo los archivos basura anteriores. Ahora desarrollaron los iconos 'bonitos' de VirtualBox.

Y efectivamente, al reiniciar la computadora host, las 3 máquinas virtuales se iniciaron automáticamente.

:-)

Bill Williams

PD: por desgracia, todavía me falta algo, porque a menudo las máquinas virtuales no se inician al arrancar, sino que generan un cuadro de diálogo de error que dice que están bloqueadas, incluso si les he dicho que se apaguen antes de reiniciar el host.

Bill Williams
fuente
1
FYI no hay "respuesta 5". El número que ve a la izquierda de cada respuesta es el recuento total de votos. Dicho esto, el tuyo es un buen método alternativo de GUI. Gracias por el aporte.
hmayag
5

Además de la buena descripción del servicio vboxautostart anterior, puede hacer

VBoxManage modifyvm server --autostop-type savestate

para detener automáticamente al invitado en el apagado. Para Ubuntu 14.04 tuve que agregar un sleep 30 a la sección de parada vboxautostart-service, para que espere hasta que el invitado se haya guardado por completo.

Michael Schlueter
fuente
2

Encontré una forma más simple en Ubuntu 16.04 ejecutando VBox 5.1.34.

Mientras esté en VBox, haga clic con el botón derecho en la máquina virtual en ejecución o inactiva en la lista, seleccione 'Crear acceso directo en el escritorio ". Una vez que vea el icono en su escritorio, abra con cualquier herramienta que le permita ver el comando subyacente creado por VBox (en mi sistema, hago clic derecho y selecciono 'propiedades') Copiar esto al portapapeles.

Abra el programa para actualizar las 'aplicaciones de inicio' y cree una nueva aplicación que se inicie en el momento del arranque, pegando el comando que copió del enlace de escritorio creado por VirtualBox.

Dave Nagy
fuente
1

Para iniciar una VM al iniciar sesión en nuestra sesión, es posible que queramos definir un archivo .desktop:

Cuando este archivo se copió o movió a nuestro directorio de inicio automático, se ejecutará después de iniciar sesión:

Ejecutar Virtual Box en el espacio del usuario puede ayudar a evitar efectos secundarios no deseados al iniciarlos durante el arranque (por ejemplo, la VM se ejecuta como root, el tiempo de arranque aumenta increíblemente, ...).

Takkat
fuente
1

Esto se puede hacer usando la interfaz de administración de línea de comandos de VirtualBox. Simplemente ejecute el siguiente script al inicio.

#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")

case "$1" in
    start)
        echo "===Starting VirtualBox VM==="
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    stop)
        echo "===Saving state of Virtualbox VM==="
    sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
    sleep 20
        ;;
    shutdown)
        echo "===Shutting down Virtualbox VM==="
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
    sleep 20
        ;;
    reset)
        echo "===Resetting VirtualBox VM==="
         sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    status)
         echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
        ;;
        echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
        exit 1
        ;;
    esac

exit 0

Hay un buen tutorial para más información.

Artex
fuente
Bienvenido .. Copie / pegue información importante del enlace
tormenta
1

Complemento a la respuesta @kdmurray.

Si obtiene un error en:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

Para resolver esto, tuve que crear manualmente los archivos "username" .start y "username" .stop con:

sudo touch "username".start
sudo touch "username".stop

Y cambia de dueño con:

sudo chown "username" "username".start
sudo chown "username" "username".stop

repetición:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

luego reinicie el servicio:

sudo service vboxautostart-service stop
sudo service vboxautostart-service start

comprobar es todo está bien con:

top

y debería ver el proceso "VBox ..." en una lista, si la máquina virtual se está ejecutando

Solata
fuente
0

También puede obtener el administrador de sesión de gnome descrito aquí. Gnome Session Manager Está en el centro de software o simplemente puede ir a una terminal y escribir sudo apt-get install gnome-session-common

A continuación, puede crear un pequeño script para ejecutar y utilizar el administrador de sesión de gnome para iniciarlo. Aquí hay un pequeño script de muestra para que pueda comenzar ...

#!/bin/sh

#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...

vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui
Scott Goodgame
fuente
0

Así es como inicio mi Centos (nombre de mi máquina virtual) cuando mi máquina host se reinicia. Yo uso crontab para ese trabajo. Aquí está mi entrada crontab:

@reboot VBoxHeadless --startvm "Centos" &
usuario514700
fuente
0

Para el servidor Ubuntu 16.04.1 LTS resolví esto haciendo:

Primero active el rc-local.service

sudo systemctl enable rc-local.service

Agregue la siguiente línea en /etc/rc.local

su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"

Tenga en cuenta que virtual_box_user es el que puede ver la máquina virtual (que está dispuesto a iniciar) ejecutando el comando:

VBoxManage list vms

Ejemplo:

$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28} 
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}

El modificado /etc/rc.localdebería verse así

#!/bin/sh -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. 
# 
# By default this script does nothing. 

su bob -c "VBoxManage startvm 'virtualbox1' --type headless &" 
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &" 

exit 0 

Si no elige el propietario correcto de virtualbox, debería ver el error al escribir el comando:

sudo systemctl status rc-local.service

Espero que esto pueda ayudar

Alessandro Cimbelli
fuente
0

1 - Crear un archivo:

nano /etc/init.d/vm-start

Pega esto:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Reemplace "usuario válido" con su nombre de usuario
  • Reemplace "MACHINENAME" con el nombre de su máquina virtual
  • Si necesita iniciar más de 1 máquina, repita la línea anterior con el nombre de su máquina virtual:

/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless" /bin/sleep 1

2 - Hacer el archivo vm-start ejecutable:

chmod +x /etc/init.d/vm-start

3 - Editar rc.local

nano /etc/rc.local

Agrega esto:

#!/bin/bash
/etc/init.d/vm-start
exit 0

4 - Reiniciar.

Lucas Catani
fuente