Ich habe mein 14.04-System durch eine Neuinstallation von 15.10 ersetzt. Mit 14.04 habe ich das Init-Skript vboxautostart verwendet, um einen Vbox-Gast beim Systemstart zu starten und ihn beim Herunterfahren des Systems zu stoppen. Das hat früher sehr gut funktioniert.
Jetzt versuche ich, ein ähnliches Setup mit Ubuntu 15.10 zu erreichen. Der Hauptunterschied besteht darin, dass ich systemd verwenden muss, mit dem ich noch nicht sehr vertraut bin. Ich konnte das vbox-spezifische Setup durchführen, sodass ich
/usr/lib/virtualbox/vboxautostart-service.sh start/stop
von der Shell aus aufrufen kann und es perfekt funktioniert. Ich kann auch verwenden, systemctl start vboxautostart-service.service
um den vbox-Gast zu starten. Er wird sogar automatisch beim Systemstart gestartet, nachdem ich den Dienst aktiviert habe. Wenn ich jedoch versuche, den Dienst mit zu stoppen
systemctl stop vboxautostart-service.service
es passiert nichts, der Gast läuft also danach immer noch.
systemctl status zeigt folgendes an:
root@linux:~# systemctl -l status vboxautostart-service.service
● vboxautostart-service.service
Loaded: loaded (/usr/lib/virtualbox/vboxautostart-service.sh; enabled; vendor preset: enabled)
Active: inactive (dead) since Sa 2015-10-31 16:39:10 CET; 4min 57s ago
Process: 5645 ExecStop=/usr/lib/virtualbox/vboxautostart-service.sh stop (code=exited, status=0/SUCCESS)
Process: 5586 ExecStart=/usr/lib/virtualbox/vboxautostart-service.sh start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/vboxautostart-service.service
├─ 875 /usr/lib/virtualbox/VBoxXPCOMIPCD
├─ 880 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
└─5602 /usr/lib/virtualbox/VBoxHeadless --comment server --startvm b3376916-8562-442e-a25e-cfe26fa800db --vrde config
Okt 31 16:37:52 linux systemd[1]: Starting vboxautostart-service.service...
Okt 31 16:37:52 linux vboxautostart-service.sh[5586]: Starting VirtualBox VMs configured for autostart
Okt 31 16:37:52 linux systemd[1]: Started vboxautostart-service.service.
Okt 31 16:39:10 linux systemd[1]: Stopping vboxautostart-service.service...
Okt 31 16:39:10 linux systemd[1]: Stopped vboxautostart-service.service.
Der ExecStop-Befehl im Dienst sieht ganz richtig aus, funktioniert jedoch aus irgendeinem Grund nicht, wenn er von systemd aufgerufen wird. Irgendeine Idee, was ich hier tun kann?
Antwort1
Sieht so aus, als hätte ich unter Debian Jessie mit systemd und Virtualbox 5.0.10, gepackt von Oracle, dasselbe Problem.
Nach viel Debugging scheint es etwas mit der Art und Weise zu geben, wie der Start-Stop-Daemon in der stop()-Funktion in /usr/lib/virtualbox/vboxautostart-service.sh (ungefähr Zeile 236) aufgerufen wird, was die Start()-Funktion nicht auf die gleiche Weise auslöst
Was ich mir ausgedacht habe, ist ein furchtbarer Hack, aber ich würde mir wirklich wünschen, dass sich jemand, der sich mit Systemd auskennt, mit diesem Problem befasst.
Ich habe in /usr/lib/virtualbox/vboxautostart-service.sh ersetzt:
for user in `ls $VBOXAUTOSTART_DB/*.stop`
do
start_daemon `basename $user | sed -ne "s/\(.*\).stop/\1/p"` $binary $PARAMS > /dev/null 2>&1
done
mit :
for user in `ls $VBOXAUTOSTART_DB/*.stop`
do
su - `basename $user | sed -ne "s/\(.*\).stop/\1/p"` -c "$binary $PARAMS" > /dev/null 2>&1
done
Antwort2
Sieht so aus, als hätte ich dasselbe Problem unter Ubuntu 16.06 Xenial mit systemd und VirtualBox 5.1.x, gepackt von Oracle.
Ich habe hier eine Lösung gefunden: https://www.virtualbox.org/ticket/14955
Verändern in /usr/lib/virtualbox/vboxautostart-service.sh
:
start-stop-daemon --background --chuid $usr --start --exec $bin -- $@
start-stop-daemon --chuid $usr --start --exec $bin -- $@