PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suse 13.1: Virtualbox Headless beim Boot



smartysmart34
25.11.13, 07:43
Hallo zusammen,

was ich erreichen möchte ist eigentlich ganz einfach ;-)

- Ich möchte, dass eine bestimmte VM beim Einschalten meines Servers in einer Headless-VM mit gestartet wird. Und zwar unter einem spezielen VM-Server-User.
- Wenn ich auf den Power-Knopf des Servers drücke, soll erst die VM und danach der ganze Server heruntergefahren werden.

Ich habe das Ganze zunächst mit der neuen Autostartfunktion von Virtualbox versucht. Die VM ist beim Einschalten des Servers auch unter dem richtigen User gestartet worden. Allerdings wurde der Prozess beim Drücken des Power-Knopfs gekillt, sodass die VM nicht sauber in den Savestate gehen konnte. So hab ich mir das leider nicht vorgestellt.

Also habe ich es mit systemd-Mitteln versucht.
Mein .service-File sah folgendermaßen aus:

cat vbheadless.service -->

[Unit]
Description=virtualbox windows vm control service
After=vboxweb-service.service
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/usr/bin/VBoxManage startvm Windows
ExecStop=/usr/bin/VBoxManage controlvm Windows savestate
RemainAfterExit=true
KillMode=none

[Install]
WantedBy=multi-user.target


Das File liegt unter /etc/systemd/system.
Wenn ich den Service mit

>systemctl enable vbheadless.service

aktiviere, dann erzeugt er den Link:
ln -s '/etc/systemd/system/vbheadless.service' '/etc/systemd/system/multi-user.target.wants/vbheadless.service'
Allerdings kann er den Service beim Boot nicht starten, da der Bootprozess unter Root läuft, und die VM unter dem User "vbheadless" eingerichtet ist, unter dem sie auch laufen soll. In den Details zu
> systemctl status vbheadless.service
finde ich den Hinweis, dass die VM nicht bekannt ist.

Nun habe ich meinen Service um einen User-Parameter erweitert:

[Unit]
Description=virtualbox windows vm control service
After=vboxweb-service.service
Before=shutdown.target reboot.target halt.target

[Service]
User=vbheadless
Type=oneshot
ExecStart=/usr/bin/VBoxManage startvm Windows
ExecStop=/usr/bin/VBoxManage controlvm Windows savestate
RemainAfterExit=true
KillMode=none

[Install]
WantedBy=multi-user.target

Das Überprüfen des Status mit
> systemctl status vbheadless.service
zeigt mir nun ein paar laufende Prozesse:

systemctl status vbheadless.service
vbheadless.service - virtualbox windows vm control service
Loaded: loaded (/etc/systemd/system/vbheadless.service; enabled)
Active: activating (start) since Mo 2013-11-25 08:37:53 CET; 2min 5s ago
Main PID: 1022 (VBoxManage)
CGroup: /system.slice/vbheadless.service
├─1022 /usr/lib/virtualbox/VBoxManage startvm Windows
├─1124 /usr/lib/virtualbox/VBoxXPCOMIPCD
└─1133 /usr/lib/virtualbox/VBoxSVC --auto-shutdown

Nov 25 08:37:53 SoltauSuseServer systemd[1]: Starting virtualbox windows vm control service...


Wenn ich die VM manuell starten will sagt er, dass sie bereits läuft oder gerade gestartet wird.

Allerdings zeigt mir "top" keinen entsprechenden Prozess und anmelden kann ich mich auch nicht. Anmelden funktioniert aber grundsätzlich, denn wenn ich den Service disable und die VM manuell als User vbheadless starte, dann sehe ich sie in "top" und das Anmelden von remote geht auch.

Daher nun die Frage in die Runde: Was fehlt denn noch, damit die VM beim Systemboot unter dem genannten User vernünftig starten kann?

Danke und Gruß,
Martin

smartysmart34
25.11.13, 22:55
Manchmal ist es so einfach und man sieht es nicht.

Wenn man eine VM als "Headless" starten will, dann muss man auch den Parameter --type headless mitgeben.

Danke und Gruß,
Martin