VirtualBox im Headless-Mode

Der Headless mode von VirtualBox kann verwendet werden, um eine virtuelle Maschine auf einem Host ohne grafisches Frontend zu betreiben.

Host-System

Betriebssystem

Ubuntu Server ohne grafische Benutzeroberfläche als Standard-Installation mit OpenSSH-Server. (Getestet mit 8.04)

VirtualBox installieren

Der Headless mode ist nur in der non-OSE-Version von VirtualBox verfügbar. Die non-OSE-Version ist nicht bei Ubuntu dabei, daher muss erst das VirtualBox-Repository hinzugefügt werden.

sudo bash -c "echo deb http://download.virtualbox.org/virtualbox/debian hardy non-free > /etc/apt/sources.list.d/virtualbox.list"
sudo wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install mc virtualbox-2.0
sudo adduser vboxuser
sudo usermod -a -G vboxusers vboxuser
sudo usermod -a -G admin vboxuser

Netzwerkbrücke einrichten (bridged networking)

Hinweis: Netzwerk-Bridging ist in der aktuellen Version von VirtualBox für die meisten Anwendungen nicht mehr nötig. Mein Tipp: Versuche erst, ob der Server nicht auch ohne Bridging läuft. ;)

Damit ein Server-Dienst auf dem Gast erreichbar ist, muss die virtuelle Netzwerkkarte mit Hilfe einer Netzwerkbrücke an die Host-Netzwerkkarte angeschlossen werden (siehe auch http://wiki.ubuntuusers.de/VirtualBox).

Achtung: Die Netzwerkkarte, an die die virtuellen Maschinen angekoppelt werden, muss als eth0 konfiguriert sein.
(Dies kann ggf. in /etc/udev/rules.d/70-persistent-net.rules angepasst werden.)

Auf dem Host werden die Pakete bridge-utils und uml-utilities benötigt:

sudo apt-get install bridge-utils uml-utilities

Beim Systemstart muss die Netzwerkbrücke erstellt und mit eth0 verbunden werden und für jede virtuelle Maschine wird ein virtuelles Netzwerkgerät tap erstellt:

sudo mcedit /etc/init.d/iapp-network-bridge.sh

Der Inhalt der Datei:

#!/bin/bash 

NUMBER_OF_TAPS=1

BRCTL=/usr/sbin/brctl
IFCONFIG=/sbin/ifconfig
DHCLIENT=/sbin/dhclient
CHMOD=/bin/chmod
CHGRP=/bin/chgrp
TUNCTL=/usr/sbin/tunctl

test -f $BRCTL || exit 0
test -f $IFCONFIG || exit 0
test -f $DHCLIENT || exit 0
test -f $CHMOD || exit 0
test -f $CHGRP || exit 0
test -f $TUNCTL || exit 0

. /lib/lsb/init-functions

case "$1" in
start)   log_daemon_msg "Starting network bridge" "iapp-network-bridge"
         $BRCTL addbr br0
         $BRCTL addif br0 eth0
         $DHCLIENT br0
         $IFCONFIG eth0 0.0.0.0
         $CHMOD 0660 /dev/net/tun
         $CHGRP vboxusers /dev/net/tun
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do $TUNCTL -t tap$i -u vboxuser
            ifconfig tap$i up
            brctl addif br0 tap$i
            i=i+1
         done
         log_end_msg $?
         ;;
stop)    log_daemon_msg "Stopping network bridge" "iapp-network-bridge"
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do ifconfig tap$i down
            brctl delif br0 tap$i
            i=i+1
         done
         $IFCONFIG br0 down
         $BRCTL delbr br0
         $DHCLIENT eth0
         log_end_msg $?
         ;;
restart) /etc/init.d/iapp-network-bridge.sh stop
         /etc/init.d/iapp-network-bridge.sh start
         ;;
esac
exit 0

Die Anzahl der virtuellen Netzwerkkarten (taps), die erstellt werden, kann in der ersten Programmzeile festgelegt werden. Die erstellten Devices werden, beginnend mit tap0, tap1 etc. durchnummeriert.

Mit den folgenden Kommandos wird die Netzwerkbrücke automatisch beim Systemstart gestartet.

sudo chmod a+x /etc/init.d/iapp-network-bridge.sh
sudo ln -s ../init.d/iapp-network-bridge.sh /etc/rc2.d/S50iapp-network-bridge
sudo /etc/init.d/iapp-network-bridge.sh start

Virtuelle Maschine einrichten

Eine virtuelle Maschine neu erstellen und installieren

Virtuelle Maschine erstellen und für die Installation der Betriebssystems konfigurieren:

VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine
MAC=MAC-Adresse_ohne_Doppelpunkte_z.B._001122334455
INSTALL_ISO=ISO-Datei_der_Installations-CD_absoluter_Pfad
sudo -H -u vboxuser VBoxManage createvm -name $VBOXNAME -register
sudo -H -u vboxuser VBoxManage createvdi -filename $VBOXNAME.vdi -size 10240 -register
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -ostype ubuntu -memory 2000 -hda $VBOXNAME.vdi -nic1 hostif -hostifdev1 $TAPDEVICE -macaddress1 $MAC
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -pae off -dvd $INSTALL_ISO -boot1 dvd

Virtuelle Maschine für Betriebssystem-Installation starten:

sudo -H -u vboxuser VBoxHeadless -startvm $VBOXNAME -vrdp on &

Jetzt m.H.v. „rdesktop <IP-Adresse des Hosts>“ mit der virtuellen Maschine verbinden und Betriebssystem installieren. Dabei ist darauf zu achten, dass auf der virtuellen Maschine ein SSH-Server installiert und aktiviert wird.

Falls das Gast-System Ubuntu ist, muss der Generic-Kernel installiert werden, da der Standard-Kernel nur im PAE/NX-Modus mit der Virtuellen Maschine kompatibel ist. (Der PAE/NX-Modus kann nur bei aktiviert werden, wenn nur ein Gast auf dem Host läuft, sonst bricht die Zuverlässigkeit dramatisch ein; er sollte daher generell vermieden werden.)

  • Die virtuelle Maschine herunterfahren und die Installation-CD erneut einhängen
    sudo -H -u vboxuser VBoxManage controlvm $VBOXNAME poweroff
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd $INSTALL_ISO -boot1 dvd
  • Im Rettungsmodus starten, dort den Generic-Kernel installieren
    apt-get install linux-generic
    exit
  • Den Gast neu starten und von Festplatte booten, dabei per Escape-Taste ins Grub-Menü springen und den Generic-Kernel (dritter Eintrag) booten
  • Im Boot-Menü die Boot-Abschnitte so sortieren, dass der Generic-Kernel an erster Stelle steht
    sudo apt-get install mc
    sudo mcedit /boot/grub/menu.lst
  • Den Gast herunterfahren
    sudo halt

Nun kann die virtuelle Maschine für den regulären Betrieb vorbereitet werden (ISO-Image aushängen, PAE/NX-Modus deaktivieren):

sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none -boot1 disk -pae off

Eine virtuelle Maschine umziehen

1. Auf der virtuellen Maschine

Die virtuelle Maschine muss heruntergefahren werden:

sudo halt

2. Auf dem Ursprungs-Host

Den Namen der virtuellen Maschine definieren:

VBOXNAME=Name_der_virtuellen_Maschine

Eine virtuelle Maschine kann nur umgezogen werden, wenn keine Datenträger an sie angeschlossen sind. Zunächst muss also die Festplatte ausgehängt werden:

sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda none

Dann kann die virtuelle Maschine von VirtualBox abgemeldet werden:

sudo -H -u vboxuser VBoxManage unregistervm $VBOXNAME

3. Auf dem Ziel-Host

Den Namen der virtuellen Maschine definieren:

VBOXNAME=Name_der_virtuellen_Maschine
VBOXSOURCEHOST=IP_des_Ursprungs-Hosts

Nun werden das Festplattenimage und die Virtuelle Maschine auf das Zielsystem kopiert:

sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/VDI
sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp -r $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/Machines/$VBOXNAME ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/VDI/$VBOXNAME.vdi ~vboxuser/.VirtualBox/VDI/

Nun müssen die Dateien bei VirtualBox registriert werden:

sudo -H -u vboxuser VBoxManage registerimage disk $VBOXNAME.vdi
sudo -H -u vboxuser VBoxManage registervm Machines/$VBOXNAME/$VBOXNAME.xml
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda $VBOXNAME.vdi

Ggf. muss nun noch das richtige TAP-Device angegeben werden:

sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hostifdev1 TAP-Device

Nun ist die virtuelle Maschine lauffähig.

Startup- und Shutdown-Skripte erstellen

Die Skripte sind notwendig, wenn die virtuelle Maschine automatisch beim Systemstart gestartet werden soll. Sie sorgen auch dafür, dass beim Herunterfahren des Systems auch die virtuelle Maschine automatisch eingefroren und beim nächsten Booten an derselben Stelle fortgesetzt wird.

Zunächst wird das Skript erstellt:

VBOXNAME=Name_der_virtuellen_Maschine
sudo mcedit /etc/init.d/iapp-vbox-$VBOXNAME.sh

Der Inhalt der Datei:

#!/bin/bash

VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine

VBOXHEADLESS=/usr/bin/VBoxHeadless
VBOXMANAGE=/usr/bin/VBoxManage
IFCONFIG=/sbin/ifconfig

test -f $VBOXHEADLESS || exit 0
test -f $VBOXMANAGE || exit 0
test -f $IFCONFIG || exit 0

. /lib/lsb/init-functions

case "$1" in
start)    log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp off &
          sleep 1
          log_end_msg $?
          exit 0
          ;;
start_with_vrdp) log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp on &
          sleep 1
          echo You can connect the virtual machine now using \"rdesktop `ifconfig br0 | grep -oe "inet addr:\\([0-9]\\+\\.\\?\\)\\+" | grep -oe "\\([0-9]\\+\\.\\?\\)\\+"`\"
          log_end_msg $?
          exit 0
          ;;
stop)     log_daemon_msg "Stopping virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME savestate
          log_end_msg $?
          exit 0
          ;;
reset)    log_daemon_msg "Resetting virtual machine $VBOXNAME" ""
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME reset
          log_end_msg $?
          exit 0
          ;;
poweroff) log_daemon_msg "Switching off virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME poweroff
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          log_end_msg $?
          exit 0
          ;;
esac
echo No valid option found. Valid options are: start, start_with_vrdp, stop, reset, poweroff
exit 0

… und dann ausführbar gemacht und ins System eingetragen:

sudo chmod a+x /etc/init.d/iapp-vbox-$VBOXNAME.sh
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc2.d/S99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc0.d/K99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc6.d/K99iapp-vbox-$VBOXNAME
sudo /etc/init.d/iapp-vbox-$VBOXNAME.sh start

Virtuelle Maschine manuell starten/stoppen

  • Mit Hilfe des Startup-Skripts:
    • Starten:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start
    • Einfrieren für späteres Fortsetzen an derselben Stelle:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh stop
    • Reset bei abgestürztem Gast-System:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh reset
    • Ausschalten bei abgestürztem Gast-System:
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh poweroff
    • Starten mit rdp-Protokoll (zum Verbinden via rdesktop host-ip):
      /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start_with_vrdp
  • Direkt mit den VirtualBox-Kommandos VBoxManage und VBoxHeadless (als Benutzer vboxuser):
    • Virtuelle Maschinen und ihre Konfigurationen anzeigen lassen:
      VBoxManage list vms | less
    • Aktuell laufende virtuelle Maschinen anzeigen lassen:
      VBoxManage list runningvms
    • Virtuelle Maschine konfigurieren:
      VBoxManage modifyvm Name_der_virtuellen_Maschine
      Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Virtuelle Maschine starten:
      VBoxHeadless -s Name_der_virtuellen_Maschine -vrdp on|off
    • Virtuelle Maschine anhalten/resetten/etc.:
      VBoxManage controlvm Name_der_virtuellen_Maschine
      Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Eine Liste aller verfügbaren Aktionen erscheint direkt nach Eingabe von VBoxManage

Quellen/Links

Host-System

Betriebssystem

Ubuntu Server ohne grafische Benutzeroberfläche als Standard-Installation mit OpenSSH-Server. (Getestet mit 8.04)

VirtualBox installieren

Der Headless mode ist nur in der non-OSE-Version von VirtualBox verfügbar. Die non-OSE-Version ist nicht bei Ubuntu dabei, daher muss erst das VirtualBox-Repository hinzugefügt werden.
sudo bash -c "echo deb http://download.virtualbox.org/virtualbox/debian hardy non-free > /etc/apt/sources.list.d/virtualbox.list"
sudo wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install mc virtualbox-2.0
sudo adduser vboxuser
sudo usermod -a -G vboxusers vboxuser
sudo usermod -a -G admin vboxuser

Netzwerkbrücke einrichten (bridged networking)

Hinweis: Netzwerk-Bridging ist in der aktuellen Version von VirtualBox für die meisten Anwendungen nicht mehr nötig. Mein Tipp: Versuche erst, ob der Server nicht auch ohne Bridging läuft. ;) Damit ein Server-Dienst auf dem Gast erreichbar ist, muss die virtuelle Netzwerkkarte mit Hilfe einer Netzwerkbrücke an die Host-Netzwerkkarte angeschlossen werden (siehe auch http://wiki.ubuntuusers.de/VirtualBox). Achtung: Die Netzwerkkarte, an die die virtuellen Maschinen angekoppelt werden, muss als eth0 konfiguriert sein. (Dies kann ggf. in /etc/udev/rules.d/70-persistent-net.rules angepasst werden.) Auf dem Host werden die Pakete bridge-utils und uml-utilities benötigt:
sudo apt-get install bridge-utils uml-utilities
Beim Systemstart muss die Netzwerkbrücke erstellt und mit eth0 verbunden werden und für jede virtuelle Maschine wird ein virtuelles Netzwerkgerät tap erstellt:
sudo mcedit /etc/init.d/iapp-network-bridge.sh
Der Inhalt der Datei:
#!/bin/bash 

NUMBER_OF_TAPS=1

BRCTL=/usr/sbin/brctl
IFCONFIG=/sbin/ifconfig
DHCLIENT=/sbin/dhclient
CHMOD=/bin/chmod
CHGRP=/bin/chgrp
TUNCTL=/usr/sbin/tunctl

test -f $BRCTL || exit 0
test -f $IFCONFIG || exit 0
test -f $DHCLIENT || exit 0
test -f $CHMOD || exit 0
test -f $CHGRP || exit 0
test -f $TUNCTL || exit 0

. /lib/lsb/init-functions

case "$1" in
start)   log_daemon_msg "Starting network bridge" "iapp-network-bridge"
         $BRCTL addbr br0
         $BRCTL addif br0 eth0
         $DHCLIENT br0
         $IFCONFIG eth0 0.0.0.0
         $CHMOD 0660 /dev/net/tun
         $CHGRP vboxusers /dev/net/tun
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do $TUNCTL -t tap$i -u vboxuser
            ifconfig tap$i up
            brctl addif br0 tap$i
            i=i+1
         done
         log_end_msg $?
         ;;
stop)    log_daemon_msg "Stopping network bridge" "iapp-network-bridge"
         typeset -i i
         i=0
         while [ $i -lt $NUMBER_OF_TAPS ]
         do ifconfig tap$i down
            brctl delif br0 tap$i
            i=i+1
         done
         $IFCONFIG br0 down
         $BRCTL delbr br0
         $DHCLIENT eth0
         log_end_msg $?
         ;;
restart) /etc/init.d/iapp-network-bridge.sh stop
         /etc/init.d/iapp-network-bridge.sh start
         ;;
esac
exit 0
Die Anzahl der virtuellen Netzwerkkarten (taps), die erstellt werden, kann in der ersten Programmzeile festgelegt werden. Die erstellten Devices werden, beginnend mit tap0, tap1 etc. durchnummeriert. Mit den folgenden Kommandos wird die Netzwerkbrücke automatisch beim Systemstart gestartet.
sudo chmod a+x /etc/init.d/iapp-network-bridge.sh
sudo ln -s ../init.d/iapp-network-bridge.sh /etc/rc2.d/S50iapp-network-bridge
sudo /etc/init.d/iapp-network-bridge.sh start

Virtuelle Maschine einrichten

Eine virtuelle Maschine neu erstellen und installieren

Virtuelle Maschine erstellen und für die Installation der Betriebssystems konfigurieren:
VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine
MAC=MAC-Adresse_ohne_Doppelpunkte_z.B._001122334455
INSTALL_ISO=ISO-Datei_der_Installations-CD_absoluter_Pfad
sudo -H -u vboxuser VBoxManage createvm -name $VBOXNAME -register
sudo -H -u vboxuser VBoxManage createvdi -filename $VBOXNAME.vdi -size 10240 -register
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -ostype ubuntu -memory 2000 -hda $VBOXNAME.vdi -nic1 hostif -hostifdev1 $TAPDEVICE -macaddress1 $MAC
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -pae off -dvd $INSTALL_ISO -boot1 dvd
Virtuelle Maschine für Betriebssystem-Installation starten:
sudo -H -u vboxuser VBoxHeadless -startvm $VBOXNAME -vrdp on &
Jetzt m.H.v. "rdesktop <IP-Adresse des Hosts>" mit der virtuellen Maschine verbinden und Betriebssystem installieren. Dabei ist darauf zu achten, dass auf der virtuellen Maschine ein SSH-Server installiert und aktiviert wird. Falls das Gast-System Ubuntu ist, muss der Generic-Kernel installiert werden, da der Standard-Kernel nur im PAE/NX-Modus mit der Virtuellen Maschine kompatibel ist. (Der PAE/NX-Modus kann nur bei aktiviert werden, wenn nur ein Gast auf dem Host läuft, sonst bricht die Zuverlässigkeit dramatisch ein; er sollte daher generell vermieden werden.)
  • Die virtuelle Maschine herunterfahren und die Installation-CD erneut einhängen
    sudo -H -u vboxuser VBoxManage controlvm $VBOXNAME poweroff
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none
    sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd $INSTALL_ISO -boot1 dvd
  • Im Rettungsmodus starten, dort den Generic-Kernel installieren
    apt-get install linux-generic
    exit
  • Den Gast neu starten und von Festplatte booten, dabei per Escape-Taste ins Grub-Menü springen und den Generic-Kernel (dritter Eintrag) booten
  • Im Boot-Menü die Boot-Abschnitte so sortieren, dass der Generic-Kernel an erster Stelle steht
    sudo apt-get install mc
    sudo mcedit /boot/grub/menu.lst
  • Den Gast herunterfahren
    sudo halt
Nun kann die virtuelle Maschine für den regulären Betrieb vorbereitet werden (ISO-Image aushängen, PAE/NX-Modus deaktivieren):
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -dvd none -boot1 disk -pae off

Eine virtuelle Maschine umziehen

1. Auf der virtuellen Maschine Die virtuelle Maschine muss heruntergefahren werden:
sudo halt
2. Auf dem Ursprungs-Host Den Namen der virtuellen Maschine definieren:
VBOXNAME=Name_der_virtuellen_Maschine
Eine virtuelle Maschine kann nur umgezogen werden, wenn keine Datenträger an sie angeschlossen sind. Zunächst muss also die Festplatte ausgehängt werden:
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda none
Dann kann die virtuelle Maschine von VirtualBox abgemeldet werden:
sudo -H -u vboxuser VBoxManage unregistervm $VBOXNAME
3. Auf dem Ziel-Host Den Namen der virtuellen Maschine definieren:
VBOXNAME=Name_der_virtuellen_Maschine
VBOXSOURCEHOST=IP_des_Ursprungs-Hosts
Nun werden das Festplattenimage und die Virtuelle Maschine auf das Zielsystem kopiert:
sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/VDI
sudo -H -u vboxuser mkdir -p ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp -r $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/Machines/$VBOXNAME ~vboxuser/.VirtualBox/Machines
sudo -H -u vboxuser scp $VBOXSOURCEHOST:/home/vboxuser/.VirtualBox/VDI/$VBOXNAME.vdi ~vboxuser/.VirtualBox/VDI/
Nun müssen die Dateien bei VirtualBox registriert werden:
sudo -H -u vboxuser VBoxManage registerimage disk $VBOXNAME.vdi
sudo -H -u vboxuser VBoxManage registervm Machines/$VBOXNAME/$VBOXNAME.xml
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hda $VBOXNAME.vdi
Ggf. muss nun noch das richtige TAP-Device angegeben werden:
sudo -H -u vboxuser VBoxManage modifyvm $VBOXNAME -hostifdev1 TAP-Device
Nun ist die virtuelle Maschine lauffähig.

Startup- und Shutdown-Skripte erstellen

Die Skripte sind notwendig, wenn die virtuelle Maschine automatisch beim Systemstart gestartet werden soll. Sie sorgen auch dafür, dass beim Herunterfahren des Systems auch die virtuelle Maschine automatisch eingefroren und beim nächsten Booten an derselben Stelle fortgesetzt wird. Zunächst wird das Skript erstellt:
VBOXNAME=Name_der_virtuellen_Maschine
sudo mcedit /etc/init.d/iapp-vbox-$VBOXNAME.sh
Der Inhalt der Datei:
#!/bin/bash

VBOXNAME=Name_der_virtuellen_Maschine
TAPDEVICE=Tap-Device_der_virtuellen_Maschine

VBOXHEADLESS=/usr/bin/VBoxHeadless
VBOXMANAGE=/usr/bin/VBoxManage
IFCONFIG=/sbin/ifconfig

test -f $VBOXHEADLESS || exit 0
test -f $VBOXMANAGE || exit 0
test -f $IFCONFIG || exit 0

. /lib/lsb/init-functions

case "$1" in
start)    log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp off &
          sleep 1
          log_end_msg $?
          exit 0
          ;;
start_with_vrdp) log_daemon_msg "Starting virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXHEADLESS -startvm $VBOXNAME -vrdp on &
          sleep 1
          echo You can connect the virtual machine now using \"rdesktop `ifconfig br0 | grep -oe "inet addr:\\([0-9]\\+\\.\\?\\)\\+" | grep -oe "\\([0-9]\\+\\.\\?\\)\\+"`\"
          log_end_msg $?
          exit 0
          ;;
stop)     log_daemon_msg "Stopping virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME savestate
          log_end_msg $?
          exit 0
          ;;
reset)    log_daemon_msg "Resetting virtual machine $VBOXNAME" ""
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME reset
          log_end_msg $?
          exit 0
          ;;
poweroff) log_daemon_msg "Switching off virtual machine $VBOXNAME" ""
          sudo -H -u vboxuser $VBOXMANAGE -nologo controlvm $VBOXNAME poweroff
          $IFCONFIG $TAPDEVICE down
          $IFCONFIG $TAPDEVICE up
          log_end_msg $?
          exit 0
          ;;
esac
echo No valid option found. Valid options are: start, start_with_vrdp, stop, reset, poweroff
exit 0
... und dann ausführbar gemacht und ins System eingetragen:
sudo chmod a+x /etc/init.d/iapp-vbox-$VBOXNAME.sh
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc2.d/S99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc0.d/K99iapp-vbox-$VBOXNAME
sudo ln -s ../init.d/iapp-vbox-$VBOXNAME.sh /etc/rc6.d/K99iapp-vbox-$VBOXNAME
sudo /etc/init.d/iapp-vbox-$VBOXNAME.sh start

Virtuelle Maschine manuell starten/stoppen

  • Mit Hilfe des Startup-Skripts:
    • Starten: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start
    • Einfrieren für späteres Fortsetzen an derselben Stelle: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh stop
    • Reset bei abgestürztem Gast-System: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh reset
    • Ausschalten bei abgestürztem Gast-System: /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh poweroff
    • Starten mit rdp-Protokoll (zum Verbinden via rdesktop host-ip): /etc/init.d/iapp-vbox-Name_der_virtuellen_Maschine.sh start_with_vrdp
  • Direkt mit den VirtualBox-Kommandos VBoxManage und VBoxHeadless (als Benutzer vboxuser):
    • Virtuelle Maschinen und ihre Konfigurationen anzeigen lassen: VBoxManage list vms | less
    • Aktuell laufende virtuelle Maschinen anzeigen lassen: VBoxManage list runningvms
    • Virtuelle Maschine konfigurieren: VBoxManage modifyvm Name_der_virtuellen_Maschine Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Virtuelle Maschine starten: VBoxHeadless -s Name_der_virtuellen_Maschine -vrdp on|off
    • Virtuelle Maschine anhalten/resetten/etc.: VBoxManage controlvm Name_der_virtuellen_Maschine Dann wird eine Hilfe für die verfügbaren Argumente angezeigt.
    • Eine Liste aller verfügbaren Aktionen erscheint direkt nach Eingabe von VBoxManage

Quellen/Links

Sonntag, 28. September 2008, 19:49
Server, System Kommentare/Comments: RSS 2.0 Kommentare und Pings sind derzeit nicht erlaubt.

Die Kommentarfunktion ist derzeit geschlossen.