flexibel neue Server für spezielle (Test)Zwecke anschalten – GreenIT 2010

Sicherlich braucht man nicht immer einen laufenden Server für den Dienst X,einen anderen für Dienst Y oder wieder einen anderen um nur mal schnell was zu testen. Hat man einen Server laufen, der ausreichend dimensioniert ist, so spricht nicht viel dagegen, sich einmal mit Virtualisierung auseinander zu setzen. Sei es für das Testen von Software, die man nicht auf seinem Desktop installieren möchte. Sei es aus Sicherheitsanforderungen an die Testumgebung. Oder natürlich die Entwicklung von Software oder Aktualisierung, die man erst auf einem „Staging-System“ testen und erst dann auf das Hauptsystem einspielen will.
Und natürlich auch, um sich einfach mal ein anderes Betriebssystem für selten gebrauchte Anwendungen zu starten. Wozu soll ich auf meinem Desktop parallel zwei Betriebssysteme installieren, nur weil ich für eine Software X, die ich alle zig Monate mal starte, ein anderes Betriebssystem benötige?
In großen Unternehmen stellt die Virtualisierung natürlich ganz andere Punkte in den Vordergrund: Ressourcen sparen und sinnvoll nutzen. Und damit Geld sparen.

Für mich natürlich noch ein ganz wichtiger Grund: Man braucht auch immer mal was neues, mit dem man spielen kann 😉


Virtualisierungssoftware gibt es Unmengen: Xen, VMWare, Solaris Zones, Jails unter FreeBSD, Qemu und so weiter und so fort. Alle haben ihre Vor- und Nachteile, arbeiten ähnlich oder komplett unterschiedlich. Manche Emulieren die Hardware komplett, andere reichen die „Hardware“ des Hosts 1 zu 1 an das Gastbetriebssystem weiter.
Das soll mich hier nicht weiter interessieren. Für technische Abhandlungen über Virtualisierung kann man sich Stunden um die Ohren hauen. Das will ich hier nicht machen, interessiert eh nur einen ganz kleinen Teil.

Ich habe eine schnelle und einfache Möglichkeit gesucht, auf meinen Linux Server ein paar virtuelle Server mit unterschiedlichen Betriebssystemen (vll. mal ein OpenSolaris, vll. ein FreeBSD, ein Linux X, ein Linux Y) vorbereitet zu haben, die ich bei Bedarf einfach mal starten kann. Hardware ist für die paar im ausgeschalteten Zustand befindlichen Systeme vollkommen ausreichend, selbst ein paar parallel laufende Systeme sind je nach Ausstattung der Hardware leicht zu bewältigen.


Welche Voraussetzung habe ich als vorgegeben:

    – mein Server hat ausreichend freien RAM und ein paar freie GB auf der Festplatte für weitere virtuelle Maschinen
    – der Server hat keinen angeschlossenen Monitor, keine Tastatur
    – auf dem Server gibt es kein X, also keine Grafik

Ich muss also die virtuellen Maschinen im „headless“ Betrieb über ein Command Line Interface (CLI) einrichten, starten und verwalten können. Zusätzlich muss eine Installation von einem neuen System natürlich irgendwie gemacht werden können. Alle Installationsprozesse sind eigentlich grafisch gesteuert und bedürfen etwas Interaktion.


Da ich sowieso immer mal wieder mit VirtualBox experimentiert habe, habe ich mich hier einmal mit dem Thema „Installation von Virtualbox auf einem Headless Server“ auseinander gesetzt. In wenigen Schritten ist auf dem Ubuntu 10.4 Linux Host Virtualbox installiert und die Einrichtung für einen (in diesem Fall Linux) Gast, durchgeführt:

  1. Schritt: Installation von VirtualBox auf dem Host
    Auf dem Linux Host wird mit einem Paketmanager der Wahl das zum System passende Paket von http://www.virtualbox.org/wiki/Linux_Downloads installiert. Intel 64Bit Systeme installieren ebenfalls die mit AMD64 bezeichneten Pakete.
    Pakete herunterladen und mit einem Paketmanager installieren. Zum Beispiel unter Ubuntu mit dpkg:
    #Shell> dpkg -i /pfad/zum/paket/virtualbox-3.2_3.2.8-64453~Ubuntu~lucid_amd64.deb
    Hinweis für Ubuntu Benutzer: Die Paketversion der mitgelieferten Pakete ist veraltet. Es würde eine alte Version (3.1) installiert werden, die einige Funktionen noch nicht hat. Derzeit aktuell ist Version 3.2.8. In dieser Version ist auch die RDP Unterstüzung vorhanden, die für die Headless Installation von Gastbetriebssystemen benötigt wird.
  2. Schritt: Registrierung der virtuellen Maschine
    Wir erstellen und registrieren (machen dem Host bekannt) eine virtuelle Maschine und benennen diese GastLinux (einfach passende Namen auswählen und entsprechend benennen):
    #Shell> VBoxManage createvm -name GastLinux -register
  3. Schritt: Anpassung der Werte für die VM
    Der virtuellen Maschine weisen wir passende Werte für die Hardware zu. In diesem Fall reichen uns 512 MB, als erstes Bootdevice geben wir dvd an, das Netzwerk wird per NAT bezogen:
    #Shell> VBoxManage modifyvm GastLinux --memory 512 --acpi on --boot1 dvd --nic1 nat
    Später kann einer beendeten VM auch mehr Speicher zugewiesen werden.
  4. Schritt: Erstellung einer HDD
    Wir erstellen für die VM eine Festplatte im VDI („Virtual Disk Image“) Format mit einer maximalen Größe von 10GB:
    #Shell> VBoxManage createvdi -filename GastLinux.vdi -size 10000 -register
    Die belegte Größe der Festplatte wächst dynamisch. Der Speicherplatz von „max 10GB“ wird also nicht von Anfang an für die Installation auf dem Host belegt. Man sollte hier natürlich passende Größen auswählen. Angabe des Wertes von -size ist in MB.
    Die .vdi Dateien werden regulär erstmal im Homeverzeichnis des Benutzers angelegt, der die entsprechende Maschine erstellt. Darin befindet sich dann das Verzeichnis ~/.VirtualBox/HardDisks/ mit einer Datei GastLinux.vdi
  5. Schritt: einen IDE Controller für die Festplatte bereit stellen
    Die Festplatte muss an einen (IDE) Controller gebunden werden. Hierzu legen wir einen ide Controller an:
    #Shell> VBoxManage storagectl GastLinux --name "IDE Controller" --add ide
  6. Schritt: Die „Festplatte“ (VDI Datei) attachen
    Wir „hängen“ nun die Festplatte an den eingerichteten IDE Controller:
    #Shell> VBoxManage storageattach GastLinux --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /home/Benutzername/.VirtualBox/HardDisks/GastLinux.vdi
  7. Schritt: ISO Abbild einer Installations CD/DVD für die Installation einbinden
    Das ISO Image liegt uns als ISO Abbild vor und wird nun als quasi DVD dem System bekannt gemacht:
    #Shell> VBoxManage storageattach GastLinux --storagectl "IDE Controller"
    --port 1 --device 0 --type dvddrive --medium /pfad/zum/ISO-Abbild/ubuntu-10.04.1-server-i386.iso
  8. Schritt: Ansehen der Konfigurationseinstellungen der VM
    Nun kann man sich noch einmal die Einrichtung der VM ansehen:
    #Shell> VBoxManage showvminfo GastLinux

    Oracle VM VirtualBox Command Line Management Interface Version 3.2.8
    (C) 2005-2010 Oracle Corporation
    All rights reserved.

    Name: GastLinux
    Guest OS: Other/Unknown
    UUID: 6612311fb-ec118-411-b6222-7733d25854
    Config file: /home/benutzername/.VirtualBox/Machines/GastLinux/GastLinux.xml
    Hardware UUID: 6612311fb-ec118-411-b6222-7733d25854
    Memory size: 512MB
    Page Fusion: off
    VRAM size: 8MB
    HPET: off
    Number of CPUs: 1
    Synthetic Cpu: off
    CPUID overrides: None
    Boot menu mode: message and menu
    Boot Device (1): DVD
    Boot Device (2): DVD
    Boot Device (3): HardDisk
    Boot Device (4): Not Assigned
    ACPI: on
    IOAPIC: off
    PAE: on
    Time offset: 0 ms
    RTC: local time
    Hardw. virt.ext: on
    Hardw. virt.ext exclusive: on
    Nested Paging: on
    Large Pages: off
    VT-x VPID: on
    State: powered off (since 2010-09-19T10:53:26.000000000)
    Monitor count: 1
    3D Acceleration: off
    2D Video Acceleration: off
    Teleporter Enabled: off
    Teleporter Port: 0
    Teleporter Address:
    Teleporter Password:
    Storage Controller Name (0): IDE Controller
    Storage Controller Type (0): PIIX4
    Storage Controller Instance Number (0): 0
    Storage Controller Max Port Count (0): 2
    Storage Controller Port Count (0): 2
    IDE Controller (0, 0): /home/benutzername/.VirtualBox/HardDisks/GastLinux.vdi (UUID: b1111ac-111a1-1121fe-8220-4333222bc39)
    NIC 1: MAC: 001122334455, Attachment: Bridged Interface 'eth0', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps, Boot priority: 0
    NIC 2: disabled
    NIC 3: disabled
    NIC 4: disabled
    NIC 5: disabled
    NIC 6: disabled
    NIC 7: disabled
    NIC 8: disabled
    Pointing Device: PS/2 Mouse
    Keyboard Device: PS/2 Keyboard
    UART 1: disabled
    UART 2: disabled
    Audio: disabled
    Clipboard Mode: Bidirectional
    VRDP: disabled
    USB: disabled


    USB Device Filters:


    Shared folders:


    Guest:


    Configured memory balloon size: 0 MB

  9. Schritt: Erster Start der neuen VM
    Wir können nun erstmals die Virtuelle Maschine starten. Auf der Konsole sagen wir, welche VM gestartet werden soll und erhalten (sofern wir vorher alles richtig gemacht haben...) eine Rückmeldung, dass die VM gestartet wurde:
    #Shell> VBoxHeadless --startvm GastLinux
    Oracle VM VirtualBox Headless Interface 3.2.8
    (C) 2008-2010 Oracle Corporation
    All rights reserved.

    Listening on port 3389.

    Die Angabe "Listening on Port 3389" ist für uns wichtig. Dieses zeigt uns, dass der RDP Dienst gestartet wurde und wir uns mit einem RDP Client an diesen Port verbinden können. Damit sehen wir, was das Gastsystem grafisch ausgibt.

  10. Schritt: Remote Zugriff per RDP
    Wir greifen von einem anderen System remote auf die grafische Ausgabe der Installationsroutine des Gastbetriebssystems zu. Von einem Client wird mit dem RDP Protokoll auf diese Ausgabe zugegriffen. Hierbei erhalten wir ein Fenster mit der grafischen Ausgabe:
    #Shell> rdesktop IP_des_servers &
    Ein kleines Fenster geht auf und wir sehen die Installationsgrafik von Ubuntu mit den Auswahlmenüs.
  11. Schritt: Installation des Gastbetriebssystems
    Gut, ich erspare hier einmal die Erkärung der Installationsschritte...
  12. Schritt: Gast-OS Installation ist fertig
    Die Installation des Gastes ist fertig. Wir fahren die Installation herunter oder rebooten. Rebooten würde nun allerdings dafür sorgen, dass das Installationsmedium abermals gestartet wird, da das Image als erstes Bootmedium ausgewählt ist. Sollten wir das System aus irgenwelchen Gründen nicht herunterfahren, und damit die VM beenden, so kann man den "harten" Weg wählen und die VM ausschalten:
    #Shell> VBoxManage controlvm GastLinux poweroff
    Das hat den gleichen Effekt wie ein Stromkabel rausziehen bei einem richtigen Server. Die andere Variante ist zum Beispiel durch ein kill -HUP der Prozess IDs von VBoxHeadless, VBoxXPCOMIPCD und VBoxSVC. Beides sollte man allerdings nicht unbedingt machen, sowas könnte eine VM (genau wie ein richtiger Server auch) irgendwann übel nehmen....

    Läuft die VM nicht mehr, so kann das ISO Abbild als Installationsquelle entfernt werden, wir brauchen es nicht mehr. Entfernt wird es über den Weg der Angabe von "none" als Medium:
    #Shell> VBoxManage storageattach GastLinux --storagectl "IDE Controller"
    --port 1 --device 0 --type dvddrive --medium none

  13. Schritt: Änderung der Bootreihenfolge
    Sollte das Image weiter bestehen bleiben kann auch die Bootreihenfolge abgeändert, das Diskimage als erstes Bootdevice eingerichtet werden:
    #Shell> VBoxManage modifyvm GastLinux --boot1 disk
  14. Schritt: Änderung der LAN Anbindung
    Für die Installation reichte uns ein geNATtetes LAN Interface. NAT ist zwar schön, aber wir wollen "eigenständige" Server mit eigenen IP Adressen ohne NAT. Also ändern wir das Interface von NAT auf ein Bridged Interface ab:
    #Shell> VBoxManage modifyvm GastLinux --nic1 bridged --bridgeadapter1 eth0

    Damit wird dem Gast-OS ein bridged Interface zur Verfügung gestellt. Auf dem Hostsystem ist es eth0.
  15. Schritt: Wir starten den Linux-Gast
    Wie schon bei dem ersten Starten des Gastes auch hier wieder
    #Shell> VBoxHeadless --startvm GastLinux &
    Der Gast wird gestartet, wir sehen über den RDP Client die Bootmeldungen und können uns auf der Konsole einloggen.
  16. Schritt: Anpassungen auf dem Gast
    Auf dem Gast sind nun u.U. noch ein paar Anpassungen vorzunehmen. Zum Beispiel wäre es hilfreich, wenn man sich per SSH und nicht über RDP auf den Gast verbinden kann. Also noch schnell openssh-server unter Ubuntu nachinstalliert. SSHd starten und von seinem Rechner per SSH verbinden.
    Fertig
  17. Schritt: normales (headless) Starten der VM
    Ist alles eingerichtet (SSH Zugriff von remote möglich) und man braucht die RDP Verbindung somit nicht mehr, so wird die VM headless gestartet:
    #Shell> VBoxManage startvm GastLinux --type headless

Zusätzlich gibt es noch eine lange Liste an weiteren Funktionen, die man bei Virtualbox wissen oder sich zumindest einmal ansehen sollte:

  • #Shell> VBoxManage controlvm
  • #Shell> VBoxManage list vms
  • #Shell> VBoxManage import/ export
  • Oder, wenn man einfach eine Übersicht über die möglichen Befehle erhalten will:

  • #Shell> VBoxManage

Damit ist eine VM grundlegend installiert und kann genutzt werden. Man kann jedoch eine Menge mehr an schönen Dingen mit VMs machen: Von einem Host auf einen anderen kopieren, bestimmte Stati durch Snapshots speichern, VMs für bestimmte Zwecke nutzen (eine VM als Proxyserver, eine als HTTP Server), Grundinstallationen für mehrere verschiedene Server nutzen, Versrkiptete Neuinstallation eines neuen Servers und vieles mehr....


Weitere Doku hier:
Manual bei VirtualBox http://www.virtualbox.org/manual/
http://de.wikipedia.org/wiki/Virtualbox
VBox Tool zur Verwaltung von VirtualBox http://vboxtool.sourceforge.net/
PHPVirtualbox zur Steuerung per HTTP und AJAX http://code.google.com/p/phpvirtualbox/

Dieser Beitrag wurde unter Dokus und Tipps, Linux/ UNIX, Technikspielkram abgelegt und mit , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert