RTFM! – oder: VirtualBox – Headless und Autostart

Für Testinstallationen nutzt man gerne mal die eine oder andere virtuelle Maschine – so auch bei uns. Wir nutzen dafür eine ältere Box mit Ubuntu LTS als Wirt, der einige Domino Server auf CentOS als Gäste hostet. Anfangs wurde das Ganze über die GUI des Wirts gemanaged, dann kamen die SSH Zugänge dazu um Updates über Putty direkt vom eigenen Rechner einspielen zu können. Als letztes wollte ich noch das 2. Set Monitor-Maus-Tastatur vom Tisch haben, das zum Starten der VMs nötig war. Die Aufgabe ist also klar: VMs ohne GUI starten, und das möglichst automatisch.

Der erste Punkt ist schnell geklärt – eine kurze Google Suche bringt folgendes zu Tage:

Soll eine VM ohne grafische Oberfläche betrieben werden, gibt es 3 Möglichkeiten:

1. Der normale Start von der Kommandozeile mit Angabe eines Frontends „headless“: VBoxManage startvm „VM name“ –type headless

2. Der Befehl „VBoxHeadless“: VBoxHeadless –startvm <uuid|name> Achtung: hier startet die VM im Vordergrund! Kann aber hilfreich sei, wenn detaillierte Fehlermeldungen gebraucht werden.

3. Start über die VirtualBox Manager GUI – durch Auswahl von „Headless start“/“Ohne GUI starten

Der zweite Punkt, also der automatische Start ist etwas schwerer zu finden…

Auf den ersten Seiten der Google Suche stößt man in der Rege auf Anleitungen, die ein init bzw. systemd Script beschreiben, dass die VMs startet. Hier ein Beipiel:

[Unit]
Description=VBox Virtual Machine %i Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service vboxdrv.service

[Service]
User=user
Group=vboxusers
ExecStart=/usr/bin/VBoxHeadless -s %i
ExecStop=/usr/bin/VBoxManage controlvm %i acpipowerbutton
KillMode=process
KillSignal=SIGWINCH
TimeoutStopSec=40

[Install]
WantedBy=multi-user.target

Zweifellos wird das funktionieren, allerdings bin ich bei der Suche nach dem richtigen Ablageort für das Script ( /etc/systemd/system oder /lib/systemd/system ?) unter anderem auf vboxautostart-service.service gestoßen. Ein bisschen weitere Recherche in der VirtualBox Dokumentation hat dann gezeigt, dass Oracle schon eine Autostart Funktion integriert hat! (Wie immer: RTFM!)

Hier meine Zusammenfassung aus der Dokumentation und einigen Blog Einträgen:

Ab Version 4.2.0 ist es möglich VMs beim Systemstart zu laden (nur Linux, Solaris, Mac OS X). Unter Linux (hier Ubuntu 16.04 LTS mit VirtualBox 5.1 aus dem Oracle Repo) läuft nach der Installation ein Dienst vboxautostart-service. Dieser Dienst sorgt dafür, dass entsprechend markierte VMs von berechtigten Usern beim Systemstart mit gestartet werden.

Folgende Schritte sind nötig:

1. Erstellen von /etc/default/virtualbox mit dem Inhalt:

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

2. Erstellen von /etc/vbox/vbox.cfg mit dem Inhalt:

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

myuserid ist dabei der Name des Besitzers der VM.

3. Berechtigungen für das Verzeichnis /etc/vbox

chmod 1775 /etc/vbox

Weiterhin muss jeder der eine VM starten soll Mitglied der Gruppe vboxusers sein (default)

4. Jeder User der eine VM starten soll muss den Pfad zur Autostart DB setzen:

VBoxManage setproperty autostartdbpath /etc/vbox

5. Für jede VM, die automatisch gestartet werden soll muss das Autostart Flag gesetzt werden:

VBoxManage modifyvm <VM Name> –autostart-enabled on

6. Neustart des vboxautostart-service:

service vboxautostart-service restart

Fertig. Nach dem Neustart des Wirtssystems werden die entsprechenden VM mit gestartet.