# Preboot Execution Environment

Das Preboot Execution Environment (PXE, oft silbisch ausgesprochen Pixie) ist ein ursprünglich vom Unternehmen Intel entwickeltes Client-Server-Modell, um netzwerkfähige Rechner (Clients) von einem Server ausgehend über ein lokales Rechnernetz booten zu können. Der Server stellt dafür die nötigen Daten oder mehrere Boot-Images zur Verfügung, die Clients müssen über eine PXE-fähige Netzwerkkarte bzw. PXE-Unterstützung im BIOS (z. B. PC-BIOS, Open Firmware oder UEFI) verfügen. In der Umsetzung basiert PXE auf den bestehenden Netzwerkprotokollen DHCP für die Übermittlung der Konfiguration, die PXE-spezifischen Erweiterungen von DHCP sind dazu in RFC 4578 festgelegt, und dem Trivial File Transfer Protocol (TFTP) für die Verteilung der Dateien im Rahmen des Bootvorganges. PXE kommt primär in Local Area Networks (LAN) basierend auf Ethernet zur Anwendung und ist im Bereich von Rechenzentren eine der bevorzugten Methoden, um eine Vielzahl von Rechnern zentral gesteuert zu booten.

## Geschichte

Anfang 1999 schlug Intel der Internet Engineering Task Force eine Arbeitsgruppe zum PXE vor, welche nicht zustande kam. PXE wurde in Folge als Teil der Initiative Wired for Management von Intel eingeführt und in der Spezifikation (Version 2.1) von Intel und Systemsoft am 20. September 1999 veröffentlicht.

## Ablauf

PXE benötigt auf Serverseite einen DHCP-Server und einen TFTP-Server, diese beiden Dienste müssen nicht gemeinsam auf einem physischen Server laufen, und im Client eine PXE-fähige Netzwerkkarte bzw. Unterstützung im BIOS. Der eigentliche PXE-Code befindet sich dabei nur auf Client-Seite, auf Serverseite werden von der Systemadministration nur bestimmte DHCP-Konfigurationen vorgenommen und am TFTP-Server zum Download vorbereitete Dateien bereitgestellt.
Im Rahmen des PXE-Bootvorgangs führt der PXE-Code am Client zunächst über DHCP eine Konfiguration der Netzwerkschnittstelle durch, dabei werden vom Server Konfigurationen wie die IP-Netzwerkadresse und die Netzmaske am Client eingestellt. Des Weiteren werden zusätzliche Daten im Rahmen der Erweiterung von DHCP zur Unterstützung von PXE übertragen. Dabei werden unter anderem auch Daten vom Client wie die Systemarchitektur oder die Globally Unique Identifier übertragen. Die erweiterte Information vom DHCP-Server an den Client stellt dabei die Angabe einer initialen Bootloaderdatei dar, dem sogenannten englisch Network Bootstrap Program (NBP), und Angabe einer Netzwerkadresse von einem TFTP-Server, von wo diese Bootloaderdatei bezogen werden kann. Diese Parameter müssen zuvor am DHCP-Server entsprechend konfiguriert werden.
Mit diesen über DHCP bezogenen Konfigurationsdaten bezieht der PXE-Client in Folge das initiale Network Bootstrap Program vom TFTP-Server und führt diese Datei im Arbeitsspeicher aus. Dabei muss sichergestellt sein, dass die Bootloaderdatei zu der jeweiligen Systemarchitektur passt und der Binärcode vom Prozessor ausgeführt werden kann. Dieser Vorgang ist im Prinzip vergleichbar mit dem Bootvorgang über den Master Boot Record (MBR) bei einer lokalen Festplatte, nur dass dabei die Bootloaderdaten über das Netzwerk übertragen werden.
Der weitere Verlauf richtet sich nach der Gestaltung des initialen Bootloaderprogrammes und ist nicht mehr Teil der PXE-Spezifikation. Im Regelfall werden von dem Network Bootstrap Program verschiedene weitere Zusatzprogramme vom TFTP-Server geladen, welche beispielsweise die grafische Ausgabe eines Boot-Menüs mit verschiedenen Auswahlmöglichkeiten erlauben, ähnlich zu dem Boot-Menü von Bootloader wie dem Grand Unified Bootloader (GRUB). Dabei können auch je nach Client und deren unterschiedliche MAC-Adresse unterschiedliche Boot-Optionen angeboten werden bzw. unter Umgehung eines Startmenüs eine bestimmte fix voreingestellte Bootkonfiguration unmittelbar ausgeführt werden.

## Anwendungen und Besonderheiten
### Proxy DHCP

Die PXE-Firmware sendet zur Ermittlung der zusätzlichen Bootparameter wie den TFTP-Server ein mit PXE-Optionen versehenes DHCPDISCOVER-Paket (extended DHCPDISCOVER) per Broadcast an UDP-Port 67. DHCP-Server, welche diese PXE-spezifischen DHCP-Optionen nicht unterstützen, ignorieren diese Anfrage, womit kein Booten mittels PXE möglich ist. Um eine Integration in bestehende Infrastruktur ohne Austausch bestehender nicht PXE-fähiger DHCP-Server zu erlauben, besteht die Möglichkeit eines Proxy-DHCP. Der PXE-fähige Proxy-DHCP wird dabei parallel zu dem schon bestehenden DHCP-Server im Netzwerk integriert und übernimmt nur die PXE-spezifischen Anfragen vom PXE-Client.

### Thin Client

PXE erlaubt den Betrieb von sogenannten Thin Clients, das sind in diesem Zusammenhang primär vollwertige PC-Systeme, aber ohne lokale Festplatte oder Solid-State-Drive. Dabei wird der Bootvorgang über PXE abgewickelt und in Folge das Speichermedium durch netzwerkbasierte Filesysteme wie das Network File System (NFS) realisiert. Der Vorteil ist, dass am Thin Client, außer des Teils im BIOS, keine Software vorgehalten wird und somit auch jede Softwarewartung am Client entfällt. Ein Speicherabbild für die Thin Clients kann dabei unter Umständen für eine Vielzahl gleichartiger Clients parallel verwendet werden, was den Aufwand für Aktualisierung reduziert. Nachteilig ist der damit höhere Datenverkehr am Netzwerk, da prinzipiell alle gespeicherten Daten über das Netzwerk zu einem zentralen Speichersystem wie einem Network Attached Storage (NAS) übertragen werden müssen.
Die Einrichtung von Thin Clients ohne eigenen Massenspeicher wird durch eigene Software wie das Linux Terminal Server Project (LTSP) erleichtert.

### Systemwartung

PXE besitzt auch bei mit lokalen Festplatten ausgestatteten Clients Anwendungsmöglichkeiten um beispielsweise zu Wartungszwecken Live-Systeme wie Knoppix, Parted Magic oder Clonezilla bei Bedarf zu starten. Es wird dafür kein physisches Bootmedium wie ein speziell vorbereiteter USB-Stick oder eine DVD benötigt, auch wird kein lokaler Speicherplatz auf den Festplatten für das Vorhalten der nur gelegentlich benötigten Bootsysteme verbraucht.

### Software

Ein mögliches Bootloaderprogramm im BIOS-Modus (CSM) ist PXELINUX aus dem Projekt SYSLINUX. PXELINUX stellt dabei vom initialen Network Bootstrap Program ausgehend eine Vielzahl von verschiedenen Modulen für den Bootvorgang bereit. Unter anderem besteht die Möglichkeit neben grafisch gestalteten Boot-Menüs den Linux-Kernel ohne weiteren Lader mit entsprechenden Parametern starten zu können und auch bootfähige ISO-Abbilder von DVDs ohne Konvertierung mittels PXE booten zu können.
Ein weiterer möglicher Bootloader stellt die Verwendung einer netzwerkfähigen Version von GRUB2 dar, welcher in Kombination mit Zusatzprogrammen wie dem englisch UEFI shim loader ein Booten über PXE im Modus des Unified Extensible Firmware Interface (UEFI) erlaubt. Mit entsprechenden signierten shim-Bootloader und GRUB2 ist damit im Rahmen von UEFI auch ein Secure Boot, beispielsweise von Linux über das Netzwerk, möglich.
Kompatible Alternativen zu dem von Intel entwickelten PXE-Client stellten die Open-Source-Projekte Etherboot (seit 2010 eingestellt) und iPXE dar. Dabei wird die Firmware auf der Netzwerkkarte durch eine projektspezifische Variante ersetzt. Dies erfordert allerdings einen Hardwareeingriff auf der Netzwerkkarte, welcher bei vielen in der Hauptplatine integrierten Netzwerkadaptern nicht einfach möglich ist.
Eine auf PXE basierende proprietäre Weiterentwicklung stellt das Windows Deployment Services (WDS) von Microsoft dar. Dabei wird ein im Funktionsumfang reduziertes Windows PE über PXE als „Bootloaderprogramm“ geladen. Windows PE dient primär dazu um über das Netzwerk eine Vielzahl von Zielrechnern mit einer regulären MS-Windowsversion zu versehen.