Nur wenige Anbieter von sogenannten Rootservern, welche wegen Verwechslungsgefahr mit den "richtigen" Rootserver für das DNS eigentlich eher anders bezeichnet werden sollten, bieten ausführliche Details über verbaute Hardware. Eine der wenigen Ausnahmen ist Serverloft. Dies lud uns zu einem waghalsigen Experiment ein: ist es möglich, einen ESXi Server, der momentan von VmWare kostenlos zum Download angeboten wird, über das Netz und ohne Eingreifen des Supports zu installieren?
Beim ESXi Server handelt es sich um eine Virtualisierungslösung aus dem Hause VmWare. VmWare ist seit einigen Jahren Marktführer bezüglich Virtualisierung und ermöglicht Virtualisierung für den professionellen Einsatz.
Der ESXi setzt hierbei nicht wie andere Virtualisierungslösungen auf ein vorhandenes Betriebsystem auf, sondern bringt seinen eigenen Kernel mit. Dieser Kernel ist auf das Nötigste reduziert und bringt neben einem eigenen Dateisystem (vmfs) auch einiges an Tools mit, um virtuelle Maschinen später zu vernetzen. Dieser "Bare-Metal-Hypervisors", wie ihn VmWare nennt, hat jedoch nicht nur Vorteile:
Zum einen hält sich die Unterstützung für verschiedene Hardware in Grenzen, zum anderen gestaltet sich die Installation des ESXi ohne direkten Zugang mit Monitor und Tastatur zum Server äußerst schwierig.
Hier ist es sehr hilfreich, wenn Provider wie Serverloft Daten über die verwendete Hardware preisgeben.
In unserem Beispiel wird der ESXi Hypervisor auf dem "PerfectServer L", einem Fujitsu Siemens PRIMERGY Econel 230R S1 mit folgender Hardware installiert (siehe FSC Hardwarebeschreibung bzw. Serverloft Hardwarebeschreibung):
Raid-Controller: LSI 1068
Netzwerkkarten: Broadcom BMC 5715
CPU: AMD Opteron 2344 HE, Quad-Core der Barcelona-Serie
RAM: 4 GB DDR2-RAM ECC
Nach einiger Recherche kamen wir zu dem Ergebnis: diese wichtigen Kernkomponenten werden vom ESX allesamt unterstützt.
Die Installation des ESXi
Die Installation gestaltet sich jetzt etwas komplizierter. An einigen Stellen sollte sehr aufgepasst werden, da Befehle verwendet werden, die potenziell Daten zerstören können, daher bitte immer darauf achten, dass der Befehl beim ersten mal passt (und in der richtigen Konsole ausgeführt wird).
Die Installation geschieht in 3 Schritten:
1. Vorbereitungen
Der ESXi verfügt über einige Sicherheitsvorkehrungen, die verhindern sollen, dass der ESXi ungewollt falsch verwendet wird. Dazu gehört zum Beispiel auch eine Überprüfung der MAC-Adressen beim Starten. Wenn sich diese ändert, wird die Netzwerkkarte deaktiviert.
Aus diesem Grund wird als erstes die MAC-Adresse des Zielsystems benötigt. Diese kann durch den Befehl "ifconfig" im laufenden Linux des Rootservers herausgefunden werden.
Der Server kann zudem schonmal im Rescuemodus hochgefahren werden.
Außerdem sollte die VmWare Workstation installiert sein. Hier reicht die kostenlos bei VmWare erhältliche 30-Tage-Testversion. Es bietet sich jedoch an, eine Lizenz der Workstation zu kaufen, da sich diese prima eignet, um die VMs aufzusetzen, die später im ESXi laufen sollen. Zudem muss darauf geachtet werden, dass es sich um eine neuere Version handelt (bei uns Version 6.5 Build 126130), da der ESXi auf älteren Versionen nicht läuft.
Außerdem muss bei 64-Bit-Systemen im BIOS die Hardwarevirtualisierung eingeschaltet sein.
Der Server, der schon im Rescue-Modus läuft, muss nun temporär etwas angepasst werden. Dazu startet man
cfdisk /dev/sda
und löscht alle vorhandenen Partitionen. Dann werden zwei neue erstellt. Die erste sicherheitshalber 20 GB, die zweite mit dem Rest der Festplatte (eigentlich RAID).
Die zweite wird nun mit
mfks.ext2 /dev/sda2
formatiert. Die erste Partition dient nur als Platzhalter und wird nicht weiter verwendet.
Dann wird die formatierte Partition mit
mount /dev/sda2 /mnt
gemountet.
2. Vorbereitung einer VM für den ESXi
Um einen ESXi als VM ans laufen zu bringen sind einige Modifikationen an den Konfigurationsdateien einer virtuellen Maschine nötig. Am einfachsten geht es wohl, die folgenden Zeilen in eine .vmx-Datei zu kopieren und dann in Workstation entsprechend anzupassen:
.encoding = "windows-1252" config.version = "8" virtualHW.version = "7" scsi0.present = "TRUE" scsi0.virtualDev = "lsilogic" memsize = "1024" scsi0:0.present = "TRUE" scsi0:0.fileName = "anthill.vmdk" ide1:0.present = "TRUE" ide1:0.autodetect = "TRUE" ide1:0.deviceType = "cdrom-image" floppy0.present = "FALSE" ethernet0.present = "TRUE" ethernet0.connectionType = "bridged" ethernet0.wakeOnPcktRcv = "FALSE" svga.autodetect = "TRUE" mks.enable3d = "FALSE" pciBridge0.present = "TRUE" pciBridge4.present = "TRUE" pciBridge4.virtualDev = "pcieRootPort" pciBridge4.functions = "8" pciBridge5.present = "TRUE" pciBridge5.virtualDev = "pcieRootPort" pciBridge5.functions = "8" pciBridge6.present = "TRUE" pciBridge6.virtualDev = "pcieRootPort" pciBridge6.functions = "8" pciBridge7.present = "TRUE" pciBridge7.virtualDev = "pcieRootPort" pciBridge7.functions = "8" vmci0.present = "TRUE" roamingVM.exitBehavior = "go" displayName = "Anthill" guestOS = "other" nvram = "anthill.nvram" deploymentPlatform = "windows" virtualHW.productCompatibility = "hosted" easyInstall.removeFloppy = "FALSE" unity.customColor = "|23000000" tools.upgrade.policy = "useGlobal" extendedConfigFile = "anthill.vmxf" ide1:0.fileName = "D:\Software\Images\kubuntu-8.04-desktop-amd64.iso" ethernet0.addressType = "generated" uuid.location = "56 4d 50 b3 6d cc d9 ea-43 27 69 e1 61 3d 96 c4" uuid.bios = "56 4d 50 b3 6d cc d9 ea-43 27 69 e1 61 3d 96 c4" scsi0:0.redo = "" vmotion.checkpointFBSize = "16777216" pciBridge0.pciSlotNumber = "17" pciBridge4.pciSlotNumber = "21" pciBridge5.pciSlotNumber = "22" pciBridge6.pciSlotNumber = "23" pciBridge7.pciSlotNumber = "24" scsi0.pciSlotNumber = "16" ethernet0.pciSlotNumber = "32" vmci0.pciSlotNumber = "33" ethernet0.generatedAddress = "00:0c:29:3d:96:c4" ethernet0.generatedAddressOffset = "0" vmci0.id = "-646518333" ethernet0.virtualDev = "e1000" monitor.virtual_exec = "hardware" monitor_control.restrict_backdoor = "true" tools.syncTime = "FALSE" scsi0:1.present = "TRUE" scsi0:1.fileName = "anthill-0.vmdk" scsi0:1.redo = "" vmi.present = "FALSE" vmi.pciSlotNumber = "-1" debugStub.linuxOffsets = "0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0" ethernet1.present = "TRUE" ethernet1.connectionType = "hostonly" ethernet1.wakeOnPcktRcv = "FALSE" ethernet1.addressType = "generated" ethernet1.pciSlotNumber = "34" ethernet1.generatedAddress = "XXXXXXXXXXXXXXXXXXXXXXXXX" ethernet1.generatedAddressOffset = "10"
In der zweitletzten Zeile müssen die vielen X durch die MAC (aus Punkt 1) ersetzt werden.
Dann kann Workstation gestartet und diese Datei geladen werden. Als nächstes klickt man auf "Edit Virtual Machine Settings" -> "Hardware". Sobald man auf die Platten klickt, wird Workstation feststellen, dass die zugehörigen Dateien fehlen. Also die alten löschen und neu anlegen:
Die erste als virtuelle Platte, SCSI (LSI Logic), 8 GB vorallokiert.
Die zweite dient lediglich zum Extrahieren des Systems aus der ersten. 1 GB reicht völlig aus.
3. Installation des ESXi in der lokalen VM
Die soeben erstelle VM kann nun gestartet werden. Als CD wird das Image der ESXi-Installationscd "eingelegt". Beim ESXi kann getrost immer auf weiter geklickt werden. Es sollte natürlich die 8GB Platte ausgewählt werden (falls die andere überhaupt angezeigt wird).
Nachdem die Installation abgeschlossen ist: NICHT REBOOTEN!
Der ESXi darf nicht von der VM-Platte gestartet werden. Stattdessen wird nun eine beliebige Linux-Live-CD eingelegt und diese gestartet.
4. Kopieren des Systems
In einer Root-Console des Livesystems in der VM muss jetzt das Image erstellt werden, welches nachher auf den Server geladen wird.
fdisk -l
wird nun die zwei VM-Festplatten anzeigen. /dev/sda enthält zahlreiche ESXi-Partitionen, während /dev/sdb unpartitioniert bleibt.
Auf /dev/sdb wird nun eine Partition mit der vollen Größe angelegt. Diese wird anschließend formatiert und z.B. nach /mnt gemountet.
In /mnt wird nun folgender Befehl ausgeführt:
dd if=/dev/sda | gzip > esximage.gz
Dieser Befehl liest die Festplatte /dev/sda komplett aus (sind ja nur 8GB) und komprimiert diese in gerademal 200MB und speichert sie in der neu erstellten Partition.
Die Datei esximage.gz enthält jetzt alles was nötig ist, um den ESXi zu installieren. Sie muss jetzt auf den Server nach /mnt kopiert werden. Dies geht direkt mit SSH aus der VM heraus.
Damit ist die Arbeit der lokalen VM erledigt. Workstation kann beendet werden.
Nun wird eine Konsole auf dem Server geöffnet. Im Verzeichnis /mnt wird der folgende Befehl ausgeführt:
gunzip -c esximage.gz | dd of=/dev/sda
Dieser sorgt dafür, dass das Image entpackt und auf der Platte gespeichert wird. Dabei wird selbst die aktuell verwendete Partitionstabelle überschrieben. Um sicher zu gehen, dass alle Daten geschrieben werden, wird der Befehl sync ohne Parameter aufgerufen.
Nachdem das Rescuesystem ausgeschaltet wird, kann der Server von my.serverloft.de aus hardresettet werden. Dadurch wird sichergestellt, dass keine Daten mehr am Anfang des RAID-Verbundes geschrieben werden.
Nun sollte der ESXi-Server vom RAID aus Booten. Der Infrastructure Client sollte sich mit dem Server verbinden können. nmap zeigt etwa folgendes Bild:
Starting Nmap 4.62 ( http://nmap.org ) at 2008-12-02 00:11 CET Interesting ports on loft3333.serverloft.de (12.23.23.34): Not shown: 1710 closed ports PORT STATE SERVICE 80/tcp open http 427/tcp open svrloc 443/tcp open https 902/tcp open iss-realsecure 6667/tcp filtered irc Nmap done: 1 IP address (1 host up) scanned in 1.510 seconds
Achtung: der ESXi läuft jetzt ohne Passwort! Dieses sollte sofort mit Hilfe des VmWare Infrastructure Clients gesetzt werden!
Der Standardlogin mit dem Infrastructure Client funktioniert als Benutzer "root" ohne Passwort.
Der installierte ESXi besitzt bis jetzt noch keine Partition, auf der die VMs abgelegt werden können. Diese kann jedoch leicht angelegt werden. Die weitere Vorgehensweise findet sich in den sehr detailreichen Handbüchern des ESXi.
Außerdem sollte natürlich nicht vergessen werden, den Lizenzkey einzutragen!
In diesem Sinne auch an einen Dank an Serverloft.
Die Bestellung bei Serverloft ging erstaunlich schnell von Statten. Von der Order bis zur Betriebsbereitschaft vergingen nur 55 Minuten, obwohl Serverloft zuerst mit meiner spanischen Handynummer nicht einverstanden war. Eine Mail an den Support klärte den Sachverhalt und der Server wurde ohne Rückruf freigeschaltet.
Sorry I do not know german but I managed to follow your instructions and install esxi. I am stuck on how to assign ip to the guest os. I have tried many combinations of the extra ip addresses that are given by serverloft but none of them work. Any ideas?
Hi Haris,
that’s in fact a big issue. Serverloft only permits you to send to their LAN using the mac address of your machine’s nic. I wrote them a mail to ask, if they could not permit me to use an extra mac address for one of my virtual machines (one would at least allow to set up a router) but they won’t. The only chance I see is to configure a virtual machine, to use your nic’s mac address and let this vm act as a router. But in this case, your hole system would rely on this vm and even if you had only a small problem on this vm (like mount asking you to perform fsck manually on reboot) you had no chance to manage your system(s)! This does not seem to be adequate for a system requesting more or less high availability and therefore I chose not to use the ESX but to use the Vmware Server instead (what a paine…).
Please drop us a line whenever you find a better solution!
Cheers,
Basti
Hallo Sebastian,
habe deinen Artikel mit Neugierde gelesen und war auch schon kurz davor mir bei Serverloft den PerfektServer XXL zu ordern.
Zum Glück habe ich dann aber noch deinen Kommentar gelesen…
Wenn ich nur mit einer einzigen MAC-Adresse raus komme, ist das natürlich blöd.
Aber ich denke hier gibt es sicherlich auch Wege das irgendwie trotzdem hinzubekommen.
Einen Router in einer VM würde auch ich nur sehr ungern laufen lassen – da hast du absolut recht. Und einen ESX-Server lohnt es sich auch nicht zu kaufen. Aber wie sieht es denn mit der Möglichkeit aus, bei dem ESXi auf die Console zu kommen?
Man kann ja auch beim ESXi (ich boote diesen übrigens auf meinem Server von einem internen USB-Sick) eine Console über SSH aktivieren.
http://www.security-blog.eu/2008/09/29/esxi-ssh-einschalten/
Kann das leider bei meinem einen Server nicht machen, da ich sonst den Support von VMWare verliere. Aber richte mir gerne die Tage eine Testinstallation ein. Im Prinzip müsste man es ja nur irgendwie hinbekommen proxyarp zu aktivieren.
Denn ich vermute iptables wird es in dem Minimalsystem nicht geben.
Hast du deinen Server dort noch? oder ist er inzwischen gekündigt?
Gruß,
Andreas
Hallo Andreas,
der Server läuft noch, jedoch ohne ESXi. Proxyarp und co. waren mir dann doch zuviel der Spielerei für ein Produktivsystem. Inzwischen gibt es einen interessanten Beitrag dazu im Vmware Forum. (Dem Namen nach könnte der von dir stammen?)
Grüße
Basti
Hallo,
mich würde interessieren…welche sinnvollen Alternativen gibt es, die dem ESXi mit dem Infrastructure Client (vorstellen könnte ich mir auch ein Webinterface zur Administration) möglich nahe kommen und die Nutzung der virtuellen Haupt-IP und der anderen IPs bei Serverloft möglich machen? Es reicht ein Wink in die richtige Richtung, ich kann mich ja in das Thema einlesen
hi, was muss ich denn beim esxi4 alles anders machen? und wie bekomme ich das iso-image bzw. die esxi-installations-cd zur installation an den server bei serverloft “angeschlossen”?
Hallo Wurstteppich, hallo b0b0,
ich kann euch beiden leider nur von der Verwendung abraten, außer ihr versucht das ganze zu Testzwecken. Bei einem Produktivsystem solltet ihr es allerdings nicht drauf ankommen lassen euer System unbrauchbar (und damit meine ich komplett unbrauchbar inkl. anschließender Neuinstallation und Datenverlust) vorzufinden.
@ Wurstteppich: Soviel ich weiß gibt es keine alternativen Administrationsmöglichkeiten, und selbst wenn, müssten diese ja auch irgendwie den Server erreichen.
@ b0b0: sollte genauso funktionieren wie oben beschrieben, allerdings wirst du nicht mehr als den Infrastructure-Client ans laufen bringen und VMs, die von außen – sprich übers Internet – nicht erreichbar sind.
Grüße
Basti