ESXi mit PXE-Boot von Windows Deployment Services (WDS) installieren

    PXE-Boot des ESXi-Installationsprogramms.Der Hypervisor von VMware lässt sich auf mehrere Arten auf einem Server ein­richten. Dazu gehören das tradi­tionelle Booten des Setup-Pro­gramms von USB-Stick oder DVD. Eine interes­sante Alter­native bieten die WDS, deren Konfi­guration für diese Aufgabe jedoch einige Hand­arbeit erfordert.

    Muss VMware ESXi auf einer größeren Zahl von Hosts eingerichtet werden, dann ist das Hantieren mit physikalischen Medien umständlich. Außerdem verfügen viele Server über keine entsprechenden Laufwerke, so dass sich das Starten der Setup-Routine über das Netzwerk anbietet.

    Microsofts Bereitstellungs­dienste sind primär für die Verteilung von Windows vorgesehen. Das zeigt sich unter anderem daran, dass die grafische WDS-Konsole für Boot- und Installations­abbilder ausschließlich WIM-Archive bzw. virtuelle Laufwerke im VHD(X)-Format akzeptiert.

    Konfiguration für BIOS-Rechner

    ESXi benötigt für das Setup eine Linux-Umgebung, wenn man es auf einer BIOS-Maschine installieren möchte. Mit WinPE, das sich für der Verteilung von Windows normalerweise auf einem WDS-Server befindet, kann es nichts anfangen.

    Aus diesem Grund importiert man im ersten Schritt eine Minimalvariante von syslinux. Entgegen verschiedenen Anleitungen im Web, die neuere Versionen des OS empfehlen, unterstützt VMware offiziell nur syslinux 3.86. Zwar klappt der PXE-Bootvorgang des ESXi-Installers auch mit der Version 4.x, aber WinPE bleibt beim kaskadierten Starten aus dem Boot-Menü von syslinux hängen.

    Aus dem heruntergeladenen ZIP-Archiv entnimmt man die 3 Dateien

    • core\pxelinux.0
    • com32\menu\menu.c32
    • com32\modules\chain.c32

    und kopiert sie nach Boot\x64 unterhalb des RemoteInstall-Verzeichnisses. Nachdem ESXi nur auf 64-Bit-Prozessoren läuft, kann man es sich sparen, diese Dateien auch zu Boot\x32 hinzuzufügen.

    Drei Dateien aus dem syslinux-Archiv kopiert man in Boot/x64

    Nun kopiert man in Boot\x64 die Datei pxeboot.n12 nach pxeboot.0, damit man sie nachher aus syslinux starten kann. Auf diese Weise ist der WDS-Server in der Lage, neben ESXi auch weiterhin Windows-Images zu verteilen.

    Anschließend stellt man die Installations­dateien für ESXi bereit, indem man unterhalb von x64 ein entsprechendes Verzeichnis anlegt (in unserem Beispiel ESXi60U2) und überträgt den gesamten Inhalt des ISO-Abbilds dorthin.

    Diesen Schritt schließt man ab, indem man im Installations­ordner von ESXi die Datei boot.cfg editiert. Dort müssen bei allen Dateinamen die führenden Schrägstriche entfernt werden.

    Anpassen der Konfigurationsdatei boot.cfg

    Nun ist es an der Zeit, den WDS mitzuteilen, dass man für BIOS-basierte x64-Systeme ein alternatives Boot-Programm verwenden möchte. Die grafische WDS-Konsole erlaubt mit ihrem Wizard jedoch nur die Auswahl von WIM-Archiven, so dass man auf das Kommandozeilen-Tool wdsutil.exe ausweichen muss. Dort gibt man folgende Befehle ein:

    wdsutil /set-server /bootprogram:Boot\x64\pxelinux.0 /architecture:x64

    wdsutil /set-server /n12bootprogram:Boot\x64\pxelinux.0 /architecture:x64

    Der zweite Aufruf setzt das Boot-Programm für solche Clients, auf denen die WDS-Konfiguration kein Drücken der F12-Taste erfordert.

    Im letzten Schritt definiert man ein Boot-Menü, mit dem man sich nachher zwischen der Installation von ESXi und Windows entscheiden kann. Zu diesem Zweck legt man unterhalb von Boot\x64 ein Verzeichnis mit der Bezeichnung pxelinux.cfg an und erzeugt dort eine Textdatei mit dem Namen default.

    In diese fügt man Einträge nach folgendem Muster ein:

    Wählt man am Client aus diesem Boot-Menü den ersten Eintrag aus, dann veranlasst syslinux die normale WDS-Startsequenz. Existiert für eine Architektur mehr als ein Boot-Image, dann zeigen die WDS ihr eigenes Menü an. Die Option 2 sollte jedoch das Setup von ESXi starten.

    Boot-Menü von syslinux, das auch einen Aufruf des WDS-Menüs vorsieht.

    Konfiguration für UEFI-Server

    Der Installer für ESXi kann seit der Version 6.0 auch auf UEFI-PCs über PXE booten. Grundsätzlich ist das Vorgehen dabei einfacher, weil man dafür kein syslinux benötigt.

    Vielmehr reicht es, die Datei BOOTX64.EFI aus dem Verzeichnis efi/boot zwei Ebenen nach oben zu kopieren (also dorthin, wo sich die Installations­dateien befinden) und sie dort in mboot.efi umzubenennen. Auch in diesem Fall muss man in der boot.cfg die führenden "/" vor den Dateinamen entfernen.

    Anschließend legt man mboot.efi als Boot-Programm für 64-Bit-UEFI-Rechner fest, und zwar erneut über wdsutil:

    wdsutil /set-server /bootprogram:Boot\x64\ESXi60U2\mboot.efi /architecture:x64uefi

    wdsutil /set-server /n12bootprogram:Boot\x64\ESXi60U2\mboot.efi /architecture:x64uefi

    Anschließend kann man einen UEFI-Rechner über PXE booten und er führt sofort den Boot-Loader aus. Allerdings ist dieser dann nicht in der Lage, boot.cfg einzulesen und der Vorgang bricht mit dieser Fehlermeldung ab:

    Der PXE-Bootvorgang scheitert auf UEFI-PCs beim Einlesen von boot.cfg.

    Configuration error while parsing /Boot/x64/ESXi60U2/boot.cfg. Fatal error: 24 (TFTP error).

    Dabei handelt es sich ganz offensichtlich um ein WDS-Problem, denn die gleiche Konfiguration führt unter einem einfachen TFTP-Server (wie etwa dem kostenlosen von Ipswitch) zum Erfolg.

    In einer DHCP-Reservierung teilt man dem Client mit, wo er sein Boot-Image laden kann.

    Allerdings muss man dort zusätzlich für jeden Host eine DHCP-Reservierung eintragen, in der man neben den üblichen Daten auch die IP-Adresse des TFTP-Servers und den Namen der Startdatei einträgt (mit dem relativen Pfad vom TFTP-Root aus). Zuständig sind dafür die Optionen 066 und 067. Dieser Vorgang lässt sich bei einer größeren Zahl an Hosts mit PowerShell und CSV-Dateien automatisieren.

    1 Kommentar

    Bild von David Gruber
    David Gruber sagt:
    9. April 2019 - 8:29

    Vielen Dank! Dies hat alle meine Fragen perfekt beantwortet!