Inicie VBoxHeadless VM al inicio

16

Parece que no puedo hacer que mi VM se ejecute al inicio.

Probé las "aplicaciones de inicio" y update-rc.d sin suerte.

sudo update-rc.d startvms defaults 99 10

Esto creó todos los enlaces simbólicos apropiados para los diferentes niveles de ejecución, pero la VM todavía no se inicia.

Aquí está mi script startvms:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          startvms
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start my VMs at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
case "$1" in
  start)
        echo "Starting"
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  stop)
        echo "Stopping $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

¿Qué estoy haciendo mal?

Capdragon
fuente
¿Actualizó Virtual Box a PUEL para incluir el soporte VRDP (necesario para el modo sin cabeza)?
Takkat
@Takkat: sí, debería haber mencionado: el modo sin cabeza funciona muy bien para mí ... simplemente no puedo ejecutarlo en el inicio.
capdragon
1
¿Qué pasa si lo intentaste en VBoxManage startvm --type headless "UbuntuServer"lugar del VBoxHeadlesscomando?
Takkat
También es posible que deba ser root para que funcione como su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat
@Takkat: sin dados. Pero nuevamente, puedo hacer que VBoxHeadless funcione bien con el comando que estoy usando. SOLO no funciona cuando lo hago en un script de inicio.
capdragon

Respuestas:

27

Esto es lo que finalmente funcionó!

1) Crear el archivo de script de inicio

en /etc/init.d - sudo nano /etc/init.d/StartVM .

Copie Pegue lo siguiente en el archivo y reemplace "Mi nombre de VM" por su nombre de VM:

#! /bin/sh
# /etc/init.d/StartVM
#

#Edit these variables!
VMUSER=spode
VMNAME="My VM Name"

case "$1" in
  start)
    echo "Starting VirtualBox VM..."
    sudo -H -b -u $VMUSER /usr/bin/VBoxVRDP -s "$VMNAME"
    ;;
  stop)
    echo "Saving state of Virtualbox VM..."
    sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME" savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

2) Dar permiso ejecutable al script

con sudo chmod +x /etc/init.d/StartVM .

3) Indique al script que se ejecute al inicio.

diga al script que sea el primero en apagarse y el último en iniciarse.

sudo update-rc.d StartVM defaults 99 01

Capdragon
fuente
2
¿El VRDP no agrega una sobrecarga adicional, no VBoxManage startvm --type headlesssería mejor?
mojzis
3
En mi caso específico, quería que la VM se apagara con gracia en lugar de guardar el estado. reemplazar "savestate" por "acpipowerbutton" funcionó perfectamente para esto.
muzzamo
2

Para su información, esto funciona en Opensuse sin nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
Cuenta
fuente
¿Entonces uso el mismo script que tengo excepto dejar de lado el nohup?
capdragon
Se deshizo de Hohup, todavía no funciona. Debo estar haciendo algo más mal. ¿Estás seguro de que estamos usando el mismo script? Edite su respuesta e incluya su script para que pueda probarlo.
capdragon el
2

Esto funciona bien con el servidor Ubuntu 12.04 y VirtualBox 4.2.20.

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "$1" in
  start)
    echo "Starting VirtualBox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage startvm SMARTHOST --type headless
    echo "Starting VirtualBox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage startvm wxp-acceso --type headless
    echo "Starting VirtualBox VM wmmaq_edi ..."
    sudo -u $VMUSER VBoxManage startvm vmmaq_edi --type headless
    ;;
  stop)
    echo "Saving state of Virtualbox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage controlvm SMARTHOST savestate
    echo "Saving state of Virtualbox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage controlvm wxp-acceso savestate
    echo "Saving state of Virtualbox VM vmmaq_edi ..."
    sudo -u $VMUSER VBoxManage controlvm vmmaq_edi savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

Y

sudo chmod +x /etc/init.d/StartVM

y

sudo update-rc.d StartVM defaults 99 01

como se indicó en una respuesta anterior.

usuario224910
fuente
¡Esto funciona muy bien para mí! Excepto con Vbox 5.0 Sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME y startvm tiene 2 "-" y simplemente demanda a VBoxHeadless en lugar de --type headless. También vale la pena señalar que, si bien estoy seguro de que estamos en un servidor, sin el "&" al final, el servidor no se inicia para iniciar sesión, pero todos los servicios funcionan como SSH, RDP, etc., simplemente algo que noté. ¡Deja el servidor atascado en el inicio de sesión de información detallada!
FreeSoftwareServers
1

Como mencionas que VBoxHeadless funciona bien si lo escribe desde la línea de comando de un terminal pero no inicia ninguna VM cuando se inicia desde un script de inicio, supongo que está buscando alguna variable de entorno que se define cuando ejecuta un shell en su terminal pero indefinido en el entorno de script de inicio (que está básicamente vacío, excepto los parámetros dados en la línea de comando del núcleo).

¿Puedes intentar reemplazar las invocaciones VBoxHeadless en el script con esto?

env USER=username HOME=/path/to/user/homedir VBoxHeadless ...same options as before...

Aquí "nombre de usuario" y la ruta del directorio de inicio deben cambiarse para que coincidan con las del usuario que utiliza para iniciar la VM.

Si funciona, es posible que desee utilizar su -l para funcionar VBoxHeadless en lugar de esta env truco.

Riccardo Murri
fuente
+1 para su -l- ¡ese es un buen punto!
Takkat
No ... todavía no funciona. Decidí usar un trabajo cron
capdragon
1

En las versiones recientes de Virtualbox (4.2.0 en adelante) no necesita rodar su propio script para iniciar automáticamente una VM, pero requiere algo de configuración. Consulte la sección 9.24 del Manual de Virtualbox " Inicio de máquinas virtuales durante el inicio del sistema "

Lamentablemente, el manual solo da instrucciones generales y no se ha actualizado en años. Encontré esta publicación en los foros de virtualbox con algunos detalles adicionales.

Podrías poner una línea en rc.local para iniciar tu servidor, pero si quieres hacerlo sigue leyendo de manera "oficial".

Agregue estas líneas a / etc / default / virtualbox:

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

Edite /etc/vbox/vboxautostart.cfg (este ejemplo niega el permiso de inicio automático para todos los usuarios excepto el usuario "Bob":

# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny

# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
    allow = true
    startup_delay = 10
}

# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
    allow = false
}

Agregue el grupo vboxusers a / etc / vbox y un bit fijo:

# chgrp vboxusers /etc/vbox
# chmod 1775 /etc/vbox

Agregue todos los usuarios que usarán virtualbox al grupo "vboxusers", por ejemplo:

# adduser Bob vboxusers

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

Luego, los usuarios pueden configurar máquinas virtuales para que se inicien automáticamente y configurar cómo se detendrán (por ejemplo, savestate, acpishutdown) con:

$ VBoxManage modifyvm <vmname> --autostart-enabled on
$ VBoxManage modifyvm <vmname> --autostop-type acpishutdown

Lo anterior funcionó para mí con Virtualbox 5, instalado desde el repositorio virtualbox.org.

Jules
fuente
Maldición, acabo de terminar de escribir esto solo para descubrir que ya está respondido aquí , según esta publicación de blog
Julio
0

uno también puede querer configurar directamente el puerto cuando se usa vrdp ... comentar la respuesta principal, que se divide bien para usar diferentes scripts para diferentes vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
ebricca
fuente
0

Wow ... Estoy viendo todas estas soluciones, que parecen un poco complejas, pero esta es mi tercera computadora portátil en la que terminé simplemente escribiendo:

VBoxHeadless -s "Ubuntu Server"

en mi archivo rc.local en el directorio / etc / y eso funcionó bastante bien. Ejecuta la máquina virtual automáticamente al reiniciar.

Muhammad bin Yusrat
fuente