[lang_de]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)
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
[/lang_de]