Syslinux 6.04 PXE&TFTP&DHCP Server einrichten

Möchten Sie von Ihrem Synology NAS, über das Netzwerk, Linux Live Systeme oder sogar Windows Installationen starten können? Dann ist diese Anleitung genau das, was Sie suchen.

Das ganze Thema ist sehr vielfältig. Die Möglichkeiten sind es auch. Man kann so ziemlich alles in einer solchen Umgebung durchführen. Häufige Fälle wären zum Beispiel das zurücksetzen des Passworts mit der DaRT Software von Microsoft oder ein Virenscan des Rechners, ohne diesen überhaupt ins Hauptsystem gebootet zu haben. Auch könnten man in solchen Umgebungen Backupsoftware starten, um den geliebten PC und dessen persönliche Dateien zu sichern oder diese wiederherzustellen.

Bevor wir anfangen, möchte ich Ihnen die untere Grafik näher bringen. Dadurch bekommen Sie einen Eindruck, wie genau unser Vorhaben funktioniert. Jeder einzelne Schritt wurde dort erklärt. Auch gibt es in diesen Szenarien die ein oder anderen Fallstricke, die es zu beachten gilt.

PXE Bootvorgang
PXE Bootvorgang

Diese Anleitung bezieht sich nur auf die Konfiguration des TFTP&DHCP&PXE Servers und das aufspielen und Konfigurieren der Syslinux 6.04 Version auf diesem.

Schritt: Neuen gemeinsamen Ordner erstellen

Zuallererst melden Sie sich auf Ihrer Synology NAS an. Dort erstellen Sie einen neuen Gemeinsamen Ordner mit beispielsweise dem Namen: “PXEServer”. Wie Sie diesen nennen ist natürlich Ihnen überlassen.

Schritt: NFS Berechtigung erstellen für den gemeinsamen Ordner

Wenn Sie später einmal vorhaben sollten Linux Live Images laden zu können, so klicken sie bei dem eben erstellten gemeinsamen Ordner bitte auf Bearbeiten und klicken dann auf das Register NFS-Berechtigungen und erstellen eine Neue Regel.

Bei Hostname und IP kommt die Netzwerk ID Ihres Netzwerkes hinein. Wie genau nun Ihre Netzwerk ID lautet, kann ich nicht sagen. Schauen Sie einfach selbst nach. Die Subnetz Präfix darf natürlich nicht fehlen! Hiermit ist das /24 gemeint und besagt, das der Netzanteil 24Bit lang ist. Bringen Sie bitte in Erfahrung, welches Netz Sie verwenden. Sollten Sie diesem Punkt falsch eintragen, so wird es Ihnen später nicht möglich sein, Linux Live Systeme zu starten! Wenn Sie dann alles wie auf dem Bild eingetragen haben, außer die IP natürlich, dann sollte das Ganze so aussehen:

Schritt: NFS Mount-Pfad merken!

Auf diesem Bild sehen Sie unten noch den Mount-Pfad. In meinem Beispiel: /volume1/NAS412Plus Diese Angabe ist äußerst wichtig, da Sie diese später noch einmal brauchen werden. Also nicht vergessen. Bei Ihnen kann es durchaus der Fall sein, das dort eventuell nicht volume1 steht, sondern vielleicht volume2 oder ähnlich. Das ist nicht schlimm und sagt lediglich nur aus, auf welchem Volume sich der Ordner befindet. Lassen Sie sich nicht durch den Ordnernamen in meinem Beispiel irritieren, denn das ist mein TFTP-ROOT Ordner. Oben hatte ich erwähnt, das Sie diesen auch PXEServer oder ähnlich nennen könnten.

Schritt: TFTP Server konfigurieren

Klicken Sie im DSM auf Systemsteuerung und dann Dateidienste. Sie werden dort das Register TFTP finden. Aktivieren Sie dort den TFTP Dienst und wählen den gemeinsamen Ordner aus, den Sie gerade eben erstellt haben. Anschließend klicken Sie auf Erweiterte Einstellungen. Dort können Sie noch, wenn Sie das wünschen, die Protokollierung aktivieren. Die TFTP Rechte sollten auf auf das Lesen beschränkt werden. Wir wollen ja auch nicht mehr. Lesen reicht vollkommen aus.

Schritt: DHCP Server einrichten

Vorwort
Es ist nicht ratsam mehrere DHCP Server in einem Subnetz zu betreiben. Da die Mehrheit meiner Erfahrung nach allerdings den DHCP Server des Routers verwendet, muss ich dazu sagen, dass dieser bei dem Router deaktiviert werden muss. Ja, dass muss und sollte auch. Es kann zwar sein, dass es auch mit 2 DHCP Servern funktioniert, aber es ist dennoch davon abzuraten. Es gibt auch keine Gründe sich zu sträuben, den DHCP des Routers zu deaktivieren, denn diese sind meistens total vereinfacht und so gut wie nicht konfigurierbar. Sie tun Ihrer Netzwerkumgebung einen gefallen damit den DHCP Server der Synology zu verwenden. Und ja, nach der Umstellung bekommen Ihre Handy’s auch noch DHCP Leases, eben nur nicht mehr über den Router, sondern der Synology. Manche kamen auch mit der Ausrede, das ginge nicht, weil man Portweiterleitungen habe. Das ist Blödsinn, denn niemand hindert einen daran, eine Feste IP dem Server, an den weitergeleitet werden soll einzurichten. Wer benutzt auch eine dynamische IP für einen Server? Das müssen echte Schelme sein. Es ist also eine reine Konfigurationsangelegenheit wie Ihr seht. Geht nicht, gibt’s nicht.

In der Systemsteuerung klicken Sie nun auf DHCP Server und wählen als erstes mal den LAN PORT aus, den Sie dafür verwenden wollen. Manche Synology Geräte haben mehr als einen LAN Port und daher muss das angesprochen werden. Markieren Sie diesen und klicken auf bearbeiten. Fertig eingerichtet sieht das in meiner Umgebung dann so aus:

Meine Netzwerk ID ist 192.168.1.0/24
Mein Router (Speedport) ist 192.168.1.4
Das DHCP Range geht von 192.168.1.100-192.168.1.200

So, ganz wichtig, Ihr solltet nach Möglichkeit, der DS eine feste IP zuweisen! In meinem Fall ist die feste IP 192.168.1.5.

Sollte das bei Euch nicht der Fall sein, so navigiert in der Systemsteuerung zu Netzwerk und dann Netzwerkschnittstelle und wählt die aktive Verbindung der DS aus und klickt auf bearbeiten].

DNS und Gateway ist für gewöhnlich Eure Router IP. Solltet Ihr keinen eigenen DNS Server erstellt haben, so könnt Ihr die Eures Routers eintragen. So, bevor wir später dann auch noch den PXE Dienst einschalten werden, werden wir erst einmal das Grundgerüst des PXE Servers schaffen.

Schritt: Syslinux 6.04 herunterladen und Ordner und Konfigurationsdateien erstellen

Laden Sie sich die aktuellste Syslinux Version herunter.

https://www.kernel.org/pub/linux/utils/boot/syslinux/Testing/6.04/syslinux-6.04-pre1.zip

Entpacken Sie diese danach an einem beliebigen Ort auf Ihrem Rechner.

Bevor wir nun hingehen und die Dateien dem Gemeinsamen Ordner zujubeln erstellt folgende Verzeichnisse in Eurem gemeinsamen Ordner, den Ihr ganz am Anfang erstellt hattet. Der gemeinsame Ordner ist zugleich auch Euer TFTP-Root… nicht vergessen.

TFTP-ROOT

Jetzt wird es etwas kniffelig! Jetzt muss Euer entpacktes Syslinux herhalten. 🙂

 

Kopiert nun folgende Dateien ALLE in den BIOS Ordner:

Syslinux6.04/bios/com32/chain/chain.c32
Syslinux6.04/bios/com32/cmenu/libmenu/libmenu.c32
Syslinux6.04/bios/com32/gpllib/libgpl.c32
Syslinux6.04/bios/com32/hdt/hdt.c32
Syslinux6.04/bios/com32/lib/libcom32.c32
Syslinux6.04/bios/com32/libutil/libutil.c32
Syslinux6.04/bios/com32/menu/menu.c32
Syslinux6.04/bios/com32/menu/vesamenu.c32
Syslinux6.04/bios/com32/modules/ifcpu64.c32
Syslinux6.04/bios/com32/modules/kbdmap.c32
Syslinux6.04/bios/com32/modules/linux.c32
Syslinux6.04/bios/com32/modules/poweroff.c32
Syslinux6.04/bios/com32/modules/reboot.c32

 

Kopiert nun folgende Dateien ALLE in den EFI32 Ordner:

Syslinux6.04/efi32/com32/chain/chain.c32
Syslinux6.04/efi32/com32/cmenu/libmenu/libmenu.c32
Syslinux6.04/efi32/com32/gpllib/libgpl.c32
Syslinux6.04/efi32/com32/hdt/hdt.c32
Syslinux6.04/efi32/com32/lib/libcom32.c32
Syslinux6.04/efi32/com32/libutil/libutil.c32
Syslinux6.04/efi32/com32/menu/menu.c32
Syslinux6.04/efi32/com32/menu/vesamenu.c32
Syslinux6.04/efi32/com32/modules/linux.c32
Syslinux6.04/efi32/com32/modules/reboot.c32

 

Kopiert nun folgende Dateien ALLE in den EFI64 Ordner:

Syslinux6.04/efi64/com32/chain/chain.c32
Syslinux6.04/efi64/com32/cmenu/libmenu/libmenu.c32
Syslinux6.04/efi64/com32/gpllib/libgpl.c32
Syslinux6.04/efi64/com32/hdt/hdt.c32
Syslinux6.04/efi64/com32/lib/libcom32.c32
Syslinux6.04/efi64/com32/libutil/libutil.c32
Syslinux6.04/efi64/com32/menu/menu.c32
Syslinux6.04/efi64/com32/menu/vesamenu.c32
Syslinux6.04/efi64/com32/modules/ifcpu64.c32
Syslinux6.04/efi64/com32/modules/linux.c32
Syslinux6.04/efi64/com32/modules/reboot.c32

 

Des weiteren werden wir nun noch folgende Dateien direkt in das TFTP Root Verzeichnis kopieren:

Syslinux6.04/bios/memdisk/memdisk

 

BIOS Bootloader!

Syslinux6.04/bios/core/pxelinux.0
Syslinux6.04/bios/com32/elflink/ldlinux/ldlinux.c32

EFI32 Bootloader!

Syslinux6.04/efi32/efi/syslinux.efi (Diese Datei bitte nach dem Kopieren in das TFTP Root Verzeichnis wie folgt umbenennen: pxelinuxEFI32.efi)
Syslinux6.04/efi32/com32/elflink/ldlinux/ldlinux.e32

EFI64 Bootloader!

Syslinux6.04/efi64/efi/syslinux.efi (Diese Datei bitte nach dem Kopieren in das TFTP Root Verzeichnis wie folgt umbenennen: pxelinuxEFI64.efi)
Syslinux6.04/efi64/com32/elflink/ldlinux/ldlinux.e64

 

So, wenn dann der Kopier- und Suchmarathon vorbei ist, sollte das Ganze so aussehen:

Warum haben wir jetzt den ganzen Zirkus veranstaltet? Unser Ziel ist es, das BIOS, als auch UEFI Rechner unser Syslinux starten können und dies auch automatisch erkannt wird. Deshalb brauchen wir 3 verschiedene Bootloader!

Wir sind aber noch lange nicht fertig liebe Leute, denn noch würde nichts funktionieren. Es fehlen noch die default Einträge, eine Grafikkonfigurationsdatei und das allerwichtigste die DHCP Server Anpassung! Dazu später!

Laden Sie sich nun meine kleinen Konfigdateien herunter. Diese dienen nur als Beispiel und sollten von Ihnen dann später verändert oder erweitert werden.

Ich gebe Euch ein ansehnliches Menü für jeden Eintrag! Natürlich sind dort keine Einträge vorhanden um Windows oder Linux Systeme zu starten. Die Datei würde einfach zu groß um das hier im Artikel halbwegs ansehnlich zu demonstrieren. Es geht schlichtweg erst einmal darum, das Sie das ganze starten könnten! Wenn dann alles funktioniert, können Sie diese Dateien nach Ihrem belieben editieren!

Entpacken Sie mein Archiv und kopieren Sie davon folgende Dateien in das pxelinux.cfg Verzeichnis:

default_BIOS
default_EFI32
default_EFI64
f1.txt
f2.txt
GFX_BIOS.conf
GFX_EFI32.conf
GFX_EFI64.conf

 

Außerdem kopieren sie folgende Dateien direkt in das TFTP-Root Verzeichnis:

german.kbd (Deutsches Tastaturlayout in der Syslinux Oberfläche!)
Installer640.jpg (Hintergrungbild Bios Modus)
Installer1024.png (Hintergrungbild EFI32 & EFI64 Modus)

 

Wichtige Anmerkung zum ändern der Hintergrundbilder:

Die Hintergrundbilder könnt Ihr natürlich gegen Eure austauschen. Aber, es ist darauf zu achten, dass im Bios Modus nur Bilder verwendet werden, die in einer 640×480 Pixel Auflösung vorhanden sind und als JPG Datei vorliegen.
Für den EFI32 & EFI64 Modus ist es ratsam, PNG Bilder in einer maximalen Auflösung von 1024×768 Pixel zu verwenden. Halten Sie sich unbedingt an das 4:3 Format!

Verwenden Sie keine Bilder, die ein folgende Auflösung hätten:
1024×760 oder ähnlich, denn das führt unter Umständen zu sehr extremen Grafik und Menüfehlern.

Sollten Sie JPG Bilder nehmen, werden Sie feststellen, das Syslinux in Bezug auf dieses Format im EFI Modus einen unansehnlichen BUG hat. Er kachelt das Bild dann mehrmals.

Wichtige Anmerkung zum Syslinux EFI32 & EFI64 Modus:

Das Syslinux EFI Menü funktioniert prinzipiell. Leider gibt es noch so einige Einschränkungen im Vergleich zu dem alten Bios Legacy Modus. Es ist in der aktuellsten Syslinux Version nicht möglich andere EFI Bootloader quer zu laden. Das heißt im Klartext, das sie aus einer EFI Syslinux Umgebung nicht den Windows Boot Manager starten könnten. Dieser Umstand ist mir bewusst gewesen, als ich diese Anleitung verfasst habe. Es sei aber dazu gesagt, das der Entwickler an diesem Umstand arbeitet. Es ist nur eine Frage der Zeit, bis dies dann auch im EFI Modus funktioniert. Das bedeutet, das Sie im Syslinux EFI Modus Windows nicht installieren können! Es gibt den Umweg, statt dem Syslinux Bootloader einfach den bootx64.efi Loader von Microsoft zu nehmen. Das funktioniert wunderbar, allerdings haben Sie dann kein schönes Menü mehr. Momentan ist das bei mir im EFI Modus auch mit dem EFI Bootloader von MS eingerichtet, eben damit ich Windows auch im EFI Modus installieren kann, aber dennoch ist das nur eine temporäre Lösung des Problems. Ich hoffe, das der Entwickler bald in die Puschen kommt.

Zu dem Syslinux EFI kommen noch weitere Probleme auf Sie zu. Memdisk zum Beispiel ist ein reines BIOS Tool. Dieses funktioniert im EFI Modus nicht und noch viele weitere Funktionen gehen auch nicht mehr. Das soll Sie jetzt nicht traurig stimmen, denn denken Sie einfach daran, das Sie das Gerüst dafür schon geschaffen haben und später dann weniger Arbeit haben.

So sollte das dann nachher im Bios Legacy Modus aussehen(Nur ein Beispiel, damit es motivierend bleibt):

Schritt: PXE Dienst aktivieren!

Melden Sie sich erneut bei Ihrer Synology an und gehen Sie wieder in die Systemsteuerung, dann auf DHCP Server und nun im Reiter PXE aktivieren Sie den PXE Dienst. Wählen Sie außerdem bei Bootloader die Datei: pxelinux.0

Schritt: DHCP via SSH editieren um die Multi-Arch Erkennung zu aktivieren

Kommen wir nun zu einem der wichtigsten Schritte überhaupt. Damit Sie die nötigen Änderungen vornehmen können, muss der SSH Dienst eingeschaltet sein unter Systemsteuerung => Terminal => SSH Dienst aktivieren und Sie müssen ein fähiges SSH Programm besitzen. Laden Sie sich einfach Putty aus dem Internet herunter.

Melden Sie sich mit Putty über SSH auf Ihrer Synology an. Der Benutzername ist admin und nicht root liebe Leute. Ich wollte es nur gesagt haben. Wenn Ihr eingeloggt seid, dann tippt folgendes ein:

cd /etc/dhcpd/
sudo vi dhcpd-pxe.conf

Sie werden nun erneut nach dem Passwort gefragt! Nach dem eingeben erscheint der Inhalt der Datei!

Es sollten dort 2 Zeilen existieren. Diese löschen wir erst einmal.

Tippen Sie dafür folgendes ein:
:0,2d und mit ENTER bestätigen. Danach ist die Datei leer!

Der unten stehende Code muss in diese Datei eingefügt werden. Allerdings müssen Sie die IP Adresse noch ändern. In meinem Beispiel steht überall 192.168.1.5. Dort gehört die NAS IP rein. Die IP muss insgesamt 4 mal geändert werden. Vergessen Sie keinen Eintrag 🙂

dhcp-boot=tag:pxe,pxelinux.0
dhcp-vendorclass=set:pxe,PXEClient
dhcp-match=set:bios,60,PXEClient:Arch:00000
dhcp-boot=tag:bios,pxelinux.0,,192.168.1.5
dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS
dhcp-match=set:efi32,60,PXEClient:Arch:00006
dhcp-boot=tag:efi32,pxelinuxEFI32.efi,,192.168.1.5
dhcp-option-force=tag:efi32,209,pxelinux.cfg/default_EFI32
dhcp-match=set:efi64bc,60,PXEClient:Arch:00007
dhcp-boot=tag:efi64bc,pxelinuxEFI64.efi,,192.168.1.5
dhcp-option-force=tag:efi64bc,209,pxelinux.cfg/default_EFI64
dhcp-match=set:efi64,60,PXEClient:Arch:00009
dhcp-boot=tag:efi64,pxelinuxEFI64.efi,,192.168.1.5
dhcp-option-force=tag:efi64,209,pxelinux.cfg/default_EFI64

Wenn Sie das getan haben, dann kopieren Sie den ganzen Code in den Zwischenspeicher und widmen sich wieder Putty. Immer noch im Editor drücken Sie nun EINMAL die Einfügen Taste auf Ihrer Tastatur. Vergewissern Sie sich, das der Cursor ganz oben Links ist. Drücken Sie nun einmal die Rechte Maustaste. Der Ganze Code sollte nun in der Datei stehen. Als nächstes müssen wir die Änderung noch speichern.

Drücken Sie dafür einmal die ESC Taste. Danach schreiben Sie folgendes:

:w und mit ENTER bestätigen. Die Meldung erscheint, das der Inhalt gespeichert wurde!
:q und mit ENTER bestätigen. Sie verlassen den Editor!

Anmerkung bei Verwendung eines anderen DHCP Servers!

Wenn sie den DHCP Server der Synology verwenden, können sie diesen Abschnitt komplett überspringen bis zum nächsten Schritt.

Dieser Schritt bezieht sich nur auf den DHCP Server der Synology. Es wird also vorausgesetzt, dass der DHCP Server der Synology die IP-Adressen vergibt und alle notwendigen Konfigurationsdateien.

Der entscheidende Punkt dabei ist:

Dadurch das der DHCP Server der Synology das macht, ist dieser auch der Entscheidungsträger welche Dateien und Konfigurationen übermittelt werden. Dadurch können sie sowohl Legacy, als auch UEFI Systeme problemlos starten ohne vorher die Server umstellen zu müssen (Bootloader o.ä.).

DHCP Konfiguration Optimal
DHCP Konfiguration Optimal

Wenn Sie natürlich einen anderen DHCP Server verwenden (Einen des Routers beispielsweise), dann müssen Sie natürlich auch dafür sorge tragen, dass dem Client auch die notwendigen Konfigurationsdateien übermittelt werden! Bei den normalen Routern haben sie aber das Problem, dass sie so tief in das System gar nicht eintauchen können, um solche Modifikationen zu tätigen. Bei einer Fritzbox 7490 zum Beispiel, können sie ja nicht einmal DHCP Optionen angeben…. Ähnlich düster sieht es da auch bei den Speedports der Telekom aus.

Selbst wenn Sie einen Router besitzen der die Angabe eines TFTP / PXE Servers zulässt haben sie immer noch das Problem, dass sie diesen nicht so einstellen können, dass er anhand der PXEClient Codes automatisch die verschiedenen Bootloader sendet. Ich persönlich habe bis jetzt noch bei KEINEM Router gesehen, wo ich je nach Client Architektur 3 verschiedene Angaben machen konnte.

Genau das wäre aber äußerst sinnvoll. Denn dadurch würde man sich das Editieren in der Shell nämlich sparen können.

Das Resultat wäre also immer das:

DHCP Konfiguration Suboptimal
DHCP Konfiguration Suboptimal

Sie müssen sich also hier entscheiden, welchen Bootloader will ich denn angeben? Dieser ist statisch! Denn automatisch kann hier nicht ermittelt werden, in welchem Modus der Client gebootet ist. Das hat dann zur Folge, dass Sie entweder im falschen Modus sind, wenn beispielsweise der Legacy Bootloader im Netz übermittelt wird, aber der Client im UEFI Modus gestartet ist oder beide Teile übereinstimmen (Bootloader und Clientsystem), aber die default Datei nicht gefunden werden kann, da eben der Konfigurationspart nicht beim DHCP Server eingestellt wurde.

Dann erhalten Sie die Meldung: “Cant locate configuration file“.

Das ist natürlich logisch, da wir keine normale default Datei verwenden, sondern 3 verschiedene nutzen je nach erkanntem Client-System! Sie müssen dem Client eine Abweichung vom Standard aber auch mitteilen denn sonst kann das nicht funktionieren. Im Standardfall wird natürlich eine Datei namens default erwartet und nicht wie bei uns die default_BIOS oder default_EFI32 oder default_EFI64. Deshalb ist es auch so wichtig, dass sie einen DHCP Server verwenden, bei dem sie solche Modifikationen vornehmen können.

Außerdem müssten Sie hier auch immer manuell umschalten, welcher Bootloader denn gestartet werden soll. Dazu müssen sie natürlich jedes mal die Einstellungen beim TFTP Server ändern.

Von mir erfolgreich getestete andere DHCP/TFTP/PXE Server:

  • Tftpd64
  • Windows DHCP Server

Diese können alle so eingestellt werden, dass sie das selbe erreichen können wie hier in der Anleitung beschrieben ist.

Der letzte Schritt: DHCP Server neu starten:

Damit unsere Änderungen auch angenommen werden, muss der DHCP Server einmal neu gestartet werden. Gehen Sie dafür im DSM auf Systemsteuerung und dann DHCP-Server und klicken dort einmal auf DHCP deaktivieren und im Anschluss nochmals auf aktivieren.

Schritt: Der Test!

EFI32 & EFI64 Boot Test:
Der EFI64 Boot kann fehlschlagen, wenn Sie auf Ihrem System Secure Boot aktiviert haben. Die Syslinux EFI Loader sind nicht signiert und somit verweigert der Secure Boot den Start dieser Dateien. Dieses Problem gibt es auch bei sehr vielen Linux Live Systemen. Um diesem Umstand entgegen zu wirken deaktivieren Sie einfach den Secure Boot. Spätestens dann, wenn Sie sowohl Windows, als auch Linux auf Ihrem System betreiben möchten kämen Sie eh nicht daran vorbei Secure Boot zu deaktivieren.

Booten Sie nun Ihren Rechner über Netzwerk und überzeugen Sie sich davon, ob alles soweit geklappt hat. Es ist dabei egal, ob Sie das mit einem BIOS Rechner oder UEFI Rechner machen. Es funktioniert beides durch unsere Tatkräftige Arbeit. Wenn alles funktioniert gratuliere Ich ihnen, das Sie solange durchgehalten haben! Nun sollte der nächste schritt vor Veränderungen ein kleines Backup sein, damit sie durch Anpassungen nichts zerstören. Erweitern Sie jetzt nach belieben Ihre Konfigurationsdateien.

Problembewältigung / langsame Datenübertragung

https://www.german-syslinux-blog.de/pxe-boot-langsame-datenuebertragung/

Ich werde noch Anleitungen verfassen, wie man Windows PE’s bootet, um Windows zu installieren, oder Linux Live Systeme zu starten aus dieser Umgebung heraus.

So könnte das wenn Sie das erweitert haben aussehen:

Ein voll gepacktes Menü mit etlichen Submenüs:

Den Windows Boot Manager aus Syslinux heraus starten:

Das besondere hierbei ist, das aus dem Syslinux heraus der Windows Boot Manager gestartet werden kann. Somit ist es auch ein leichtes WIM Images zu starten.

Linux Live Systeme aus dem Netzwerk starten:

Backup&Recovery Software starten:

Hardwaretools zum prüfen auf Fehler wie memtest:

Ein einziges WinPE starten, um alle Windows Versionen installieren zu können:

Das Auswahlmenü lebe hoch:

Zum Anfang!

62 Antworten auf „Syslinux 6.04 PXE&TFTP&DHCP Server einrichten“

  1. Hallo Stefan, es hat so funktioniert (auch ohne die Menu-Standardwerte). Zumindest wird das Menu beim Booten aufgerufen.

    Ich hab das neue Syslinux ja aufgesetzt auf deinen Rat hin im dt. Synology-Forum, da ich zuvor ja Probleme hatte das image zu laden (dauerte ewig).

    Leider ist dieses Problem durch den Versionswechsel nicht weg….bin echt am rätseln was der Grund ist….ich habs mit verschiedenen Images ausprobiert….die laden nicht….breche dann immer nach 15 Minuten ab. Es muss aber trotzdem was mit der Größe zu tun haben ..denn das memtest86+-image wird geladen….nach ca 20 sek….das hat ja wirklich nur 1,8 Mb….

    zwischen Client und NAS ist eine 1 GB-LAN-Verbindung mit Switch (der 1GB unterstützt)

    Hast du vielleicht noch eine Idee?

    Grüße Rainer

    1. Hast du dieses Problem auch bei einem anderen Rechner in deinem Netzwerk oder testest du das immer von dem selben PC?

      Hast du Dir die TFTP Log Dateien mal angeguckt? Da stehen mitunter sehr interessante Dinge drin.

      sudo vi /var/log/opentftp.log

      20 Sekunden für 1,8 MB ist absolut fürchterlich. Da stimmt natürlich definitiv was nicht. So aus der Ferne kann ich leider auch nur spekulieren. Ich würde erst einmal schauen, was in der Log Datei steht. Vielleicht bricht ständig die Verbindung ab und er muss die Datei dauernd neu anfordern. Hast du eventuell mal selbst gegoogelt nach deinem Rechner/Modellnamen/Notebook oder ähnlich in Verbindung mit deinem TFTP Problem? Vielleicht ist das ein bekannter Bug bei deinem Modell. Ich kann hier auch nur raten.

      Ansonsten müsstest du halt wirklich mal die opentftp.ini bearbeiten und mal testweise ein blksize=1456 ganz unten hinzufügen. TFTP mit :

      sudo synoservice --restart tftp

      neu starten und testen.

      Ansonsten einfach

      https://www.german-syslinux-blog.de/syslinux-6-04-pxe-lightweight-ip-http-ftp-support-einrichten/

      befolgen. Dann laden die Dateien über den HTTP Server und nicht über TFTP.

  2. Sorry – ich wusste zunächst nicht wie man den Text aus Putty exportiert….jetzt ist es mir gelungen:

    Hier ein Auszug der log-Datei:

    [24-Dec-18 07:18:30] Client 192.168.0.86:2070 /volume1/PXE/pxelinux.0, Error 0 at Client, TFTP Aborted
    [24-Dec-18 07:18:30] Client 192.168.0.86:2071 /volume1/PXE/pxelinux.0, 34 Blocks Served
    [24-Dec-18 07:18:33] Client 192.168.0.86:49152 /volume1/PXE/ldlinux.c32, 89 Blocks Served
    [24-Dec-18 07:18:33] Client 192.168.0.86:49153 /volume1/PXE/pxelinux.cfg/e5b57454-ee02-11e1-b68d-15e2c14f7df0, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49154 /volume1/PXE/pxelinux.cfg/01-00-19-99-e1-05-61, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49155 /volume1/PXE/pxelinux.cfg/C0A80056, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49156 /volume1/PXE/pxelinux.cfg/C0A8005, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49157 /volume1/PXE/pxelinux.cfg/C0A800, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49158 /volume1/PXE/pxelinux.cfg/C0A80, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49159 /volume1/PXE/pxelinux.cfg/C0A8, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49160 /volume1/PXE/pxelinux.cfg/C0A, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49161 /volume1/PXE/pxelinux.cfg/C0, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49162 /volume1/PXE/pxelinux.cfg/C, No Such File/No Access
    [24-Dec-18 07:18:33] Client 192.168.0.86:49163 /volume1/PXE/pxelinux.cfg/default, 2 Blocks Served
    [24-Dec-18 07:18:34] Client 192.168.0.86:49164 /volume1/PXE/menu.c32, 20 Blocks Served
    [24-Dec-18 07:18:34] Client 192.168.0.86:49165 /volume1/PXE/libutil.c32, 18 Blocks Served
    [24-Dec-18 07:18:34] Client 192.168.0.86:49166 /volume1/PXE/pxelinux.cfg/default, 2 Blocks Served
    [24-Dec-18 07:18:43] Client 192.168.0.86:49167 /volume1/PXE/memdisk, 20 Blocks Served
    [24-Dec-18 07:26:05] Client 192.168.0.86:49168 /volume1/PXE/images/aomei/ampe.iso, Timeout

    Der Boot-Versuch ging von 7:18 Uhr bis 7:26 Uhr …nach 8 Minuten habe ich dann den Power-Knopf am PC gedrückt, da sich nichts weiter tat…..wenn ich das richtig interpretiere lief in den ersten 9 Sekunden alles gut (bis zum Zeitpunkt 07:18:43)….dann fing an die ampe.iso zu laden ….aber schlauer sind wir heraus jetzt auch nicht geworden …oder !?

    1. Naja, du hast ja noch die Möglichkeit die anderen Dinge zu machen, die ich bereits erwähnt hatte. In der Log steht jedenfalls nichts merkwürdiges. Ich habe Dir ja schon mal geraten einfach einen Web Server in dein Netz zu integrieren und dann würde sich das TFTP Problem sowieso erübrigen.

      1. Ja klar das bleibt noch möglich!

        Bin mir aber mittlerweile gar nicht mehr sicher ob es ein TFTP-Problem ist. Vielleicht liegt’s doch an der iso….andererseits hab ich ja auch schon eine WinPE-ISO ausprobiert (hergestellt mit dem offiziellen Microsoft-Tool)…da lief es nicht besser!

        Ich werde es jetzt noch mal mit einer anderen iso ausprobieren…wenn alle Stricke reißen dann versuche ich es mal mit http.
        Dankeschön für deine Unterstützung!

  3. Hallo Stefan,

    hab jetzt nach deiner Anleitung http eingerichtet.

    Beim Booten erscheint:

    CLIENT MAC ADDR: …. GUID: ……
    CLIENT IP: 192.168.0.87 MASK: 255.255.255.0 DHCP IP: 192.168.0.106
    GATEWAY IP: 192.168.0.253
    TFTP.
    PXE-MOF: Exiting Intel Boot Agent.
    _

    …und dann startet er ganz normal von Festplatte (nicht über PXE)

    1. Normalerweise musst du nur die lpxelinux.0 Datei in das ROOT Verzeichnis kopieren, dann im DSM statt pxelinux.0 => lpxelinux.0 wählen und den Web Server einrichten. Vor dem ISO Aufruf noch die HTTP Adresse eintragen und fertig ist das Ganze. Das solltest du nun aber auch selbst hinbekommen.

      Sonst beschreibe mal im Detail, was du nun gemacht hast. Schreibe es nieder. Irgendwas machst du falsch.

  4. Ich hatte vergessen, im DSM im Reiter PXE die Ipxelinux.0 (statt pxelinux.0) auszuwählen (obwohl es ja logisch ist – das stand in der zweiten Anleitung nicht drin).

    Jetzt funktioniert es in der Tat: die iso hat 415 MB und nach 2 Minuten ist sie geladen. Anbetracht dessen dass vorher gar nichts ging bin ich sehr zufrieden. Es lag also wirklich an dem langsamen TFTP-Protokoll.

    Herzlichen Dank nochmal!

    1. Schön, das es jetzt für dich erträglich wurde. Meine persönliche Meinung ist jedoch nach wie vor, dass deine Kiste ein Problem hat. Wenn ich über den HTTP Server etwas lade, dann passiert das im Schnitt mit 30MB/s. 2 Minuten für 415MB sind daher auch sehr sehr schlecht. Die brauche ich nicht mal über das TFTP Protokoll bei der Größe.

      Kann es nicht eher sein, das deine Synology ausgelastet ist? Wie hoch ist diese ausgelastet? Welches Modell verwendest du? Ist die DSM Version aktuell? Welche Dienste laufen alle? Läuft die permanent auf >50% Auslastung? Wenn ja, welcher Dienst ist das?

      Sind eventuell die Kabel bei dir beschädigt? Geknickt?

  5. Hi Stefan,

    DEUTSCH:
    Ich spreche kein Deutsch, deshalb werde ich sowohl in Englisch als auch in (Google Translate) Deutsch kommentieren …

    Danke für diesen hervorragenden Guide. Ich habe die folgenden Fehler in dem Artikel bemerkt:

    (1) Wenn der Verzeichnisname “….. com32 / elflink / ldllinux /” enthält, sollte dies “….. com32 / elflink / ldlinux /” sein (Nur zwei “l” in / ldlinux /)
    (2) Ich benutze einen Asus Router (Merlin Firmware) für DHCP und musste die folgenden Zeilen in dnsmasq.conf.add einfügen. Beachten Sie, dass vor jeder IP-Adresse zwei Kommas (,,) und nicht ein Komma (,) stehen. .

    dhcp-boot=tag:pxe,pxelinux.0
    dhcp-vendorclass=set:pxe,PXEClient
    dhcp-match=set:bios,60,PXEClient:Arch:00000
    dhcp-boot=tag:bios,pxelinux.0,,192.168.1.5
    dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS
    dhcp-match=set:efi32,60,PXEClient:Arch:00006
    dhcp-boot=tag:efi32,pxelinuxEFI32.efi,,192.168.1.5
    dhcp-option-force=tag:efi32,209,pxelinux.cfg/default_EFI32
    dhcp-match=set:efi64bc,60,PXEClient:Arch:00007
    dhcp-boot=tag:efi64bc,pxelinuxEFI64.efi,,192.168.1.5
    dhcp-option-force=tag:efi64bc,209,pxelinux.cfg/default_EFI64
    dhcp-match=set:efi64,60,PXEClient:Arch:00009
    dhcp-boot=tag:efi64,pxelinuxEFI64.efi,,192.168.1.5
    dhcp-option-force=tag:efi64,209,pxelinux.cfg/default_EFI64

    Vielen Dank!

    ENGLISH:
    Thanks for this excellent guide. I noticed the following errors in the article:

    (1) Wherever the directory name includes “…..com32/elflink/ldllinux/” this should be “…..com32/elflink/ldlinux/” (Only two “l” in /ldlinux/)
    (2) I use an Asus Router (Merlin Firmware) for DHCP and had to add the following lines to dnsmasq.conf.add – Note that there are two commas (,,) not one comma (,) before every IP Address…

    dhcp-boot=tag:pxe,pxelinux.0
    dhcp-vendorclass=set:pxe,PXEClient
    dhcp-match=set:bios,60,PXEClient:Arch:00000
    dhcp-boot=tag:bios,pxelinux.0,,192.168.1.5
    dhcp-option-force=tag:bios,209,pxelinux.cfg/default_BIOS
    dhcp-match=set:efi32,60,PXEClient:Arch:00006
    dhcp-boot=tag:efi32,pxelinuxEFI32.efi,,192.168.1.5
    dhcp-option-force=tag:efi32,209,pxelinux.cfg/default_EFI32
    dhcp-match=set:efi64bc,60,PXEClient:Arch:00007
    dhcp-boot=tag:efi64bc,pxelinuxEFI64.efi,,192.168.1.5
    dhcp-option-force=tag:efi64bc,209,pxelinux.cfg/default_EFI64
    dhcp-match=set:efi64,60,PXEClient:Arch:00009
    dhcp-boot=tag:efi64,pxelinuxEFI64.efi,,192.168.1.5
    dhcp-option-force=tag:efi64,209,pxelinux.cfg/default_EFI64

    Thanks!

    1. Thanks for the correction.

      I don’t know, why u need two commas. It works for me with one. I searched for examples and all what i found was what i have did. Don’t know. 🙂

      EDIT:
      I found another example, but i don’t understand, why it works for me with just one comma, if this entry were just the Server name at this position and not the Server IP Address. Curios.
      # The boot filename, Server name, Server Ip Address
      dhcp-boot=undionly.kpxe,,192.168.112.24

      I will change it, but i don’t understand it.

      1. Yes, I also noticed this after reading the following article where the DHCP Server is on the Router: – This article mentions specifically that it has to be two commas: https://synology.wordpress.com/2017/10/05/boot-from-any-iso-on-your-network-using-pxe/

        Also – Could you please share the menus/commands for the following:

        (1) Memtest86/86+
        (2) CloneZilla (if you use it)
        (3) Latest Ubuntu Live / Installation ISO
        (4) Windows 10 ISO
        (5) Is it also possible to configure an option to boot from local USB / remote iSCSI LUN?

        Thanks for all of this!

        1. Windows BIOS/UEFI PXE Boot:
          https://www.german-syslinux-blog.de/syslinux-6-04-windows-10-adk-1709-winpes-erstellen/

          Ubuntu:
          https://www.german-syslinux-blog.de/syslinux-6-04-ubtuntu-und-mint-live-systeme-starten/

          Clonezilla don’t work for me. It was a test entry. I use another backup software.

          Memtest:

          	LABEL memtest
          	MENU LABEL 1. Memory Test: Memtest86+ v5.1.0 - Kernel Load (Schnell) 
          	MENU INDENT 2
          	COM32 linux.c32 images/memtest/memtest86+
          TEXT HELP								
          Testet den RAM auf Speicherfehler. Somit finden Sie schnell heraus, ob ein
          Speicherriegel defekt ist und wohlmoeglich fuer Bluescreens verantwortlich 
          ist.
          ENDTEXT
          

          iSCSI LUN:

          Yes, it is possible. I read it many times, but i havn’t done it yet. Sorry 😀

          Maybe the documentation is useful.

          https://www.syslinux.org/wiki/index.php?title=The_Syslinux_Project (Currently, the site is offline. Try again later.)

          1. Thanks for this – And the great guide!

            Have you ever experimented with PXELinux menu option to “Boot from local USB”? I think it would be good if I have a small OS installed to a USB drive (rather than a local HDD/SSD disk) and I could boot from tis USB disk via the PXELinux menu?

            Thanks again!

        2. No, I haven’t!

          With the normal chain load function u can chain load several HDD’s, but I think, that the USB Drive don’t count as one.

          U can try something like this:

          LABEL local1
          	MENU LABEL - Von Lokaler Festplatte booten HDD 0 Partition 1
          	MENU INDENT 1
          	COM32 chain.c32
          	APPEND hd0 0
          TEXT HELP
          Bootet von der lokalen Festplatte.
          ENDTEXT
          

          hd0 is the frist HDD
          hd0 0 is the first HDD and boot from partition 1

          Or u make an image from your USB drive (Or u mean a USB thumb drive?) and share it over the PXE environment. U can make an ISO File and boot it over memdisk. But it should be a small ISO file. Sharing an ISO file with a size of several Gigabytes of data is not the answer! And u should think of, what u want to be able to do with it. What’s the reason why u want to boot from your USB drive? For terminal functions u can use each other linux mini system or a live CD/DVD Environment and share it over the PXE /TFTP. I send u already a link for this. So, u don’t need the USB drive / thumb drive. Maybe I misunderstood you. 😀

          ISCSI LUN:
          Or u try something like this:

          	label sles10
          	kernel boot/sles10iscsi/vmlinuz
          	append initrd=boot/sles10iscsi/initrd ip=172.16.100.11:172.16.100.1:172.16.100.1:255.255.255.0:slesiscsi:eth0:none TargetAddress=172.16.100.1 root=/dev/sda2
          

          The syntax is, ADDRESS:GATEWAY:NAMESERVER:NETMASK:HOSTNAME:DEVICE:AUTOCONF

          It’s just an example! Untried!

  6. Hallo, ich bräuchte mal Hilfe bezüglich des UEFI boots. Ich bekomme beim Bootvorgang folgende Fehlermeldung : failed to load com32 vesamenu.c32

    Ich hab alles genau nach Anleitung durchgeführt und der normale Boot klappt auch ohne Probleme.
    Was könnte das sein?

    1. Existiert die Datei “vesamenu.c32” im efi64 Ordner? Welche Syslinux Version wird verwendet? Die in der Anleitung genannte oder die aktuelle pre2 oder pre3? Die pre2 oder pre3 hat noch diverse Fehler. Ich würde im momentanen Zustand der neuen Versionen davon abraten diese zu verwenden.

  7. Hallo, ja die Datei ist vorhanden. Habe auch schon alle Dateien nochmal durch die aus der Zip ersetzt aber leider auch keine Besserung.
    Die Version ist die aus der Anleitung, hab wirklich genau nach der Anleitung gearbeitet.

    1. Nun ja, es bestünde noch die Möglichkeit, dass es hier gar nicht um den UEFI 64 Modus geht. Es gibt die selbe Geschichte ja auch noch für die 32 Bit Variante. Das hängt aber vom Gerät ab womit sie versucht haben über Netzwerk zu booten. Schauen Sie einfach mal nach, ob die vesamenu.c32 im efi32 Ordner existiert. Ist das irgendein besonderes Gerät? Ein NUC oder etwas vergleichbares oder handelt es sich wirklich um einen normalen PC? Besteht das Problem auch bei anderen Rechnern im UEFI Modus?

      Ist das die einzige Fehlermeldung die sie erhalten? Konnte er die pxelinuxEFI64.efi überhaupt finden? Sehen Sie das Menü trotzdem? Die vesamenu .c32 ist für die Menüdarstellung&Auflösung&Qualität zuständig. Im Fallback Fall wird die normale menu.c32 geladen, wenn die vesamenu.c32 nicht existiert. Sehen sie ein blaues Menü oder gar nichts?

  8. Im efi32 Ordner ist auch alles benötige vorhanden.
    Gebootet wird von einem Fujitsu PC der nur noch UEFI iPv4 oder v6 kann.
    Er wirft mir nur die Meldung raus und das wars dann auch schon. Ich habe an einem anderem PC mal normal gebootet dann komme ich in das grafische menü. Über PXE einstellungen kann man dann ja in das Fallback menü wechseln das geht auch, sobald ich dann aber wieder in das grafische wechslen möchte bekomme ich auch hier die Fehlermeldung.

    1. Jetzt weiß ich auch endlich was genau sie meinen. Sie meinem im grafischen Menü selbst den Unterpunkt: “PXE Einstellungen:”

      mit den weiteren Unterpunkten:

      – PXELinux im Textmodus
      – PXELinux im Grafikmodus (Default)

      Richtig?

      Und wenn sie dort den Textmodus wählen und dann wieder den grafischen bekommen sie den Fehler angezeigt?

      Kurzum, der Fehler existiert bei mir auch. So wie das momentan gelöst ist kann der Fehler auch scheinbar nicht behoben werden. Ich weiß es aber auch nicht. Das ginge eventuell, wenn man diesen Abschnitt mit verschiedenen ConfigDateien handhaben würde.

      Also extra eine Config Datei für den Menu-Modus und eine für den Vesamenu-Modus anlegen würde.

      Da müsste dann jeweils oben der DEFAULT Parameter geändert werden.

      Bei Text halt

      DEFAULT menu.c32
      

      und bei Vesa halt:

      DEFAULT vesamenu.c32
      

      Der Einstellungsabschnitt müsste dann auch noch geändert werden und ebenfalls wieder die DHCP Einstellungen, da wenn sie den Confignamen ändern, diese natürlich auch bei den DHCP Einstellungen geändert werden muss.

      	LABEL TextMode
      	MENU LABEL - PXELinux im Textmodus
      	MENU INDENT 1
      	CONFIG pxelinux.cfg/default_EFI64_text
      TEXT HELP
      Schaltet die PXELinux Oberflaeche in den Textmodus.
      ENDTEXT
      
      LABEL GUIMode
      	MENU LABEL - PXELinux im Grafikmodus (Default)
      	MENU INDENT 1
      	CONFIG pxelinux.cfg/default_EFI64_Vesa
      TEXT HELP
      Schaltet die PXELinux Oberflaeche in den Grafikmodus.
      ENDTEXT
      

      Die Frage ist natürlich: “Lohnt sich der ganze Zirkus?” Ich weiß es nicht. Mich stört es ehrlich gesagt nicht, denn der Fehler erscheint zwar, aber ein einfaches ENTER reicht ja bereits, dass das grafische Menü wieder geladen wird. Natürlich würde die genannte Problemlösung zwar helfen, Problem wäre dabei aber der Fakt, das sie dann auch immer 2 Konfigdateien für jeden Modus hätten und ergo auch immer zwei Dateien bei Änderungen bearbeiten müssten. Mir wäre das zu blöd.

      Sollte ein anderer eine bessere Idee haben nur her damit. Eine andere Lösung ist mir jedenfalls nicht eingefallen. 🙂

      PS: Ich habe diese Einstellungen zwar damals als Beispiele in der Anleitung veröffentlicht, jedoch kann man sich jetzt über den Sinn und Zweck streiten. Ich persönlich bräuchte den Textmodus nicht. Es ist eine nette Spielerei. Es ging mir damals mehr um den Fakt, dass die Leute ein paar Beispiel haben. Wie die diese nun nutzen oder auch nicht oder ob die gleich alles raus löschen war mir persönlich egal. Den meisten Kram braucht man jedenfalls nicht. 🙂

  9. Also so ist es leider nicht ganz richtig, der PC wo ich PXE starten möchte hat nur noch den UEFI modus und der schmeißt mir den fehler beim ersten versuch vom PXE start. Ich bekomme noch eine IP zugewiesen und danach kommt dann schon der Fehler.

    Das was sie jetzt beschrieben haben passiert bei einem anderen PC wo ich getestet habe ob PXE überhaupt noch läuft und dann bin ich mal in den einstellungen hin und her gepsprungen und dabei ist mir das aufgefallen das der Fehler dann auch auftaucht.

    1. Sichern sie sich bitte mal die

      pxelinuxEFI32.efi
      pxelinuxEFI64.efi

      im TFTP Root Verzeichnis.
      Löschen sie danach die pxelinuxEFI32.efi und testen ob der Fehler weiterhin angezeigt wird. Sollte nämlich jetzt der Fehler erscheinen, dass die pxelinuxEFI32.efi nicht gefunden werden konnte wird scheinbar die völlig falsche EFI Version gesendet. Denn der Fujitsu PC müsste nach meinem Verständnis ja die UEFI 64 Version erhalten.

      In diesem Fall bräuchte ich dann noch ein paar Informationen.

      Welche CPU ist in dem Rechner verbaut und welches Mainboard wird verwendet? Da müsste man dann mal genauer recherchieren, ob da eventuell ein Fehler vorliegt.

      Sollte er wirklich die pxelinuxEFI64.efi starten und verwenden bin ich ein wenig überfragt, denn sie selbst sagten ja bereits, das ein anderer Rechner, ebenfalls im UEFI Modus, dieses Problem nicht hat. Also liegt es entweder am Rechner selbst (Eventuell der PXE Stack fehlerhaft, Kennung, was auch immer – Firmwareupdate?) oder aber Syslinux selbst hat aus irgendeinem Grund ein Problem mit genau diesem Client.

      Eventuell wäre da ein Blick in die TFTP Logs noch hilfreich.

Schreibe einen Kommentar

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