Starten Sie VBoxHeadless VM beim Start

16

Ich kann meine VM beim Start nicht zum Laufen bringen.

Ich habe die "Start-Anwendungen" und update-rc.d ohne Glück ausprobiert.

sudo update-rc.d startvms defaults 99 10

Dadurch wurden alle entsprechenden symbolischen Links für die verschiedenen Ausführungsebenen erstellt, aber die VM wird immer noch nicht gestartet.

Hier ist mein Startvms-Skript:

#!/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

Was mache ich falsch?

Capdragon
quelle
Haben Sie Virtual Box auf PUEL aktualisiert, um die VRDP-Unterstützung einzuschließen (für den Headless-Modus erforderlich)?
Takkat
@Takkat: Ja, ich hätte sagen sollen: Der Headless-Modus funktioniert hervorragend für mich ... ich kann ihn beim Start einfach nicht zum Laufen bringen.
Capdragon
1
Was wäre, wenn Sie es VBoxManage startvm --type headless "UbuntuServer"anstelle des VBoxHeadlessBefehls versuchen würden ?
Takkat
Möglicherweise müssen Sie auch root sein, damit es funktioniert su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat
@ Takkat: keine Würfel. Aber auch hier kann ich mit dem Befehl, den ich verwende, VBoxHeadless zum Laufen bringen. Es funktioniert NUR nicht, wenn ich es in einem Startskript mache.
Capdragon

Antworten:

27

DAS hat endlich geklappt!

1) Erstellen Sie die Startskriptdatei

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

Kopieren Fügen Sie Folgendes in die Datei ein und ersetzen Sie "My VM Name" für Ihren VM-Namen:

#! /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) Erteilen Sie dem Skript die ausführbare Berechtigung

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

3) Das Skript soll beim Start ausgeführt werden.

Sagen Sie dem Skript, dass es als erstes heruntergefahren und als letztes gestartet werden soll.

sudo update-rc.d StartVM defaults 99 01

Capdragon
quelle
2
Fügt der VRDP nicht zusätzlichen Overhead hinzu, wäre das VBoxManage startvm --type headlessnicht besser?
Mojzis
3
In meinem speziellen Fall wollte ich, dass die VM ordnungsgemäß heruntergefahren wird, anstatt den Status zu speichern. Das Ersetzen von "savestate" durch "acpipowerbutton" funktionierte hierfür perfekt.
muzzamo
2

Zu Ihrer Information, dies funktioniert auf Opensuse ohne nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
Rechnung
quelle
Also verwende ich dasselbe Skript, das ich habe, außer das Nohup wegzulassen?
Capdragon
Hohup losgeworden, funktioniert immer noch nicht. Ich muss etwas anderes falsch machen. Sind Sie sicher, dass wir dasselbe Skript verwenden? Bitte bearbeite deine Antwort und füge dein Skript hinzu, damit ich es ausprobieren kann.
Capdragon
2

Dies funktioniert einwandfrei mit Ubuntu Server 12.04 und 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

Und

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

und

sudo update-rc.d StartVM defaults 99 01

wie in einer vorherigen Antwort angegeben.

user224910
quelle
Das funktioniert super bei mir! Mit Ausnahme von Vbox 5.0 ist es sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME & so hat startvm 2 "-" und Sie verklagen nur VBoxHeadless anstelle von --type headless. Erwähnenswert ist auch, dass der Server, obwohl ich mir sicher bin, dass wir auf einem Server sind, ohne das "&" am Ende, nicht startet, um sich anzumelden, aber alle Dienste funktionieren wie SSH, RDP usw. usw., nur etwas, was mir aufgefallen ist. Der Server bleibt bei der Startanmeldung mit ausführlichen Informationen hängen!
FreeSoftwareServers
1

Da Sie erwähnen, dass VBoxHeadless einwandfrei funktioniert, wenn Sie es über die Befehlszeile eines Terminals eingeben , aber beim Starten über ein Init-Skript keine VM starten, wird nach einer Umgebungsvariablen gesucht, die beim Ausführen einer Shell definiert wird in Ihrem Terminal, aber undefiniert in der Init-Skript-Umgebung (die im Grunde genommen leer ist, mit Ausnahme der in der Kernel-Befehlszeile angegebenen Parameter).

Können Sie versuchen, die VBoxHeadless-Aufrufe im Skript durch diese zu ersetzen?

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

Hier sollten "Benutzername" und der Pfad des Basisverzeichnisses so geändert werden, dass sie mit denen des Benutzers übereinstimmen, den Sie zum Starten der VM verwenden.

Wenn das funktioniert, möchten Sie vielleicht su -l verwenden , um VBoxHeadless anstelle dieses env- Hacks auszuführen .

Riccardo Murri
quelle
+1 für su -l- das ist ein guter Punkt!
Takkat
Nö ... funktioniert immer noch nicht. Ich beschloss, nur einen
Cronjob
1

In neueren Versionen von Virtualbox (ab 4.2.0) müssen Sie kein eigenes Skript erstellen, um eine VM automatisch zu starten. Es sind jedoch einige Konfigurationsschritte erforderlich. Siehe Abschnitt 9.24 des Virtualbox-Handbuchs " Starten virtueller Maschinen während des Systemstarts ".

Leider enthält das Handbuch nur eine Kurzanleitung und wurde seit Jahren nicht mehr aktualisiert. Ich habe diesen Beitrag in den Virtualbox-Foren mit einigen zusätzlichen Details gefunden.

Sie könnten einfach eine Zeile in rc.local einfügen, um Ihren Server zu starten. Wenn Sie dies jedoch auf "offizielle" Weise tun möchten, lesen Sie weiter.

Fügen Sie diese Zeilen zu / etc / default / virtualbox hinzu:

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

Bearbeiten Sie /etc/vbox/vboxautostart.cfg (in diesem Beispiel wird die Autostart-Berechtigung für alle Benutzer mit Ausnahme des Benutzers "Bob" verweigert):

# 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
}

Fügen Sie die Gruppe vboxusers zu / etc / vbox und Sticky Bit hinzu:

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

Fügen Sie alle Benutzer, die virtualbox verwenden, zur Gruppe "vboxusers" hinzu, z. B .:

# adduser Bob vboxusers

Jeder Benutzer, der den Autostart für einzelne Computer aktivieren möchte, muss den Pfad zum Autostart-Datenbankverzeichnis wie folgt festlegen:

$ VBoxManage setproperty autostartdbpath /etc/vbox

Benutzer können dann VMs so einstellen, dass sie automatisch gestartet werden, und konfigurieren, wie sie angehalten werden (z. B. Speichern, Herunterfahren), mit:

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

Das Obige funktionierte für mich mit Virtualbox 5, das aus dem virtualbox.org-Repository installiert wurde.

Jules
quelle
Verdammt, ich bin gerade damit fertig geworden, nur um herauszufinden, dass es hier bereits beantwortet wurde , basierend auf diesem Blog-Beitrag
Jules
0

Möglicherweise möchten Sie auch den Port direkt festlegen, wenn Sie vrdp verwenden

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

Wow .. Ich sehe all diese Lösungen, die ein bisschen komplex erscheinen, aber dies ist mein dritter Laptop, auf dem ich einfach geschrieben habe:

VBoxHeadless -s "Ubuntu Server"

in meiner rc.local Datei im / etc / Verzeichnis und das hat ziemlich gut funktioniert. Führt die virtuelle Maschine beim Neustart automatisch aus.

Muhammad bin Yusrat
quelle