home-harmening:tools:pxe:pxe_server_installieren

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
home-harmening:tools:pxe:pxe_server_installieren [2025/09/17 08:36] – [DHCP Server konfigurieren] charmeninghome-harmening:tools:pxe:pxe_server_installieren [2025/09/17 11:35] (aktuell) – [Boot Menü anlegen] charmening
Zeile 2: Zeile 2:
 Hier installiere ich eine PXE Umgebung auf einem Debian 12 System. Die PXE Umgebung ist ausschließlich für \\ Hier installiere ich eine PXE Umgebung auf einem Debian 12 System. Die PXE Umgebung ist ausschließlich für \\
 UEFI Umgebungen gedacht. Der Testclient ist ein HP Prodesk 600.\\ UEFI Umgebungen gedacht. Der Testclient ist ein HP Prodesk 600.\\
 +\\
 +Ein für mich geeignetes efi File ist ein selbkompiliertes File auf Basis von [[https://ipxe.org/|ipxe.org]].
 \\ \\
 ===== Installation ===== ===== Installation =====
Zeile 12: Zeile 14:
 \\ \\
 <code bash> <code bash>
-apt install isc-dhcp-server apache2 tftpd-hpa syslinux-efi+apt install isc-dhcp-server apache2 tftpd-hpa 
 +</code> 
 +\\ 
 +==== ipxe.efi vorbereiten ==== 
 +Zunächst klone ich das Git Repository von ipxe.org 
 +<code bash> 
 +git clone https://github.com/ipxe/ipxe.git 
 +</code> 
 +Installiere alle Abhängigkeiten zum kompilieren 
 +<code bash> 
 +apt install gcc binutils make perl lzma lzma-dev mtools mkisofs syslinux syslinux-efi 
 +</code> 
 +Jetzt wird in das ipxe Verzeichnis gewechselt und mit zwei make Befehlen wird die Umgebung installiert 
 +<code bash> 
 +make 
 +make bin-x86_64-efi/ipxe.efi 
 +</code> 
 +\\ 
 +Nun müssen wir eine Prekonfigurationsskript für das efi File erstellen.\\ 
 +In diesem Prekonfigurationskript legen wir Fest wo später unser Bootmenü gefunden wird.\\ 
 +**embedded.ipxe** 
 +<code ipxe> 
 +#!ipxe 
 +dhcp 
 +chain http://SERVER-IP/${net0/mac}.ipxe || \ 
 +chain http://SERVER-IP/default.ipxe || \ 
 +exit 1 
 +</code> 
 +Bei diese Prekonfigurationsskript wird zunächst eine IP Adresse per dhcp geholt.\\ 
 +Danach wird versucht ein Bootmenü speziell für die eigene MAC Adresse zu erhalten. Schlägt dies fehl\\ 
 +wird ein Standard Bootmemü geladen. Schlägt auch die fehlt wird ipxe beendet.\\ 
 +\\ 
 +Jetzt wird das neue ipxe.efi file mit dem Prekonfigurationsskript erstellt 
 +<code bash> 
 +make bin-x86_64-efi/ipxe.efi EMBED=embedded.ipxe 
 +</code> 
 +Nach Abschluss kann die Datei bin-x86_64-efi/ipxe.efi nach /pxe-boot/ kopiert werden 
 +<code bash> 
 +cp bin-x86_64-efi/ipxe.efi /pxe-boot/ 
 +</code> 
 +\\ 
 +=== Embedded Skript mit statischer IP Adresse === 
 +Falls man (leider wie ich) in manchen Situationen kein DHCP Server am laufen hat. Kann man die ipxe.efi Datei auch mit statischer\\ 
 +IP Konfiguration erstellen. Diese Datei kann man auf einem **FAT32** formatieren USB Stick speichern und von diesesm aus booten. Alternativ ist\\ 
 +es auch möglich über einen GRUB Eintrag die Datei zu starten.\\ 
 +\\ 
 +<code ipxe> 
 +#!ipxe 
 +set net0/ip 10.0.0.50 
 +set net0/netmask 255.255.255.0 
 +set net0/gateway 10.0.0.1 
 + 
 +ifclose net0 
 +ifopen net0 
 + 
 +chain http://10.0.0.100/${net0/mac}.ipxe || \ 
 +chain http://10.0.0.100/default.ipxe || \ 
 +exit 1
 </code> </code>
 \\ \\
Zeile 30: Zeile 89:
 cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /pxe-boot/ cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /pxe-boot/
 </code> </code>
 +Bei mancher Hardware gibt es hier Probleme. Man kann auch Alternativen verwenden z.B. ipxe.efi von [[https://ipxe.org/|ipxe.org]]\\
 \\ \\
 Ordner erstellen und Rechte setzen Ordner erstellen und Rechte setzen
Zeile 65: Zeile 125:
     max-lease-time 7200;                        # <- Maximal Leasing Zeit. Hier 2h.     max-lease-time 7200;                        # <- Maximal Leasing Zeit. Hier 2h.
     next-server 10.0.0.100;                     # <- IP des Servers der die efi Datei bereitstellt     next-server 10.0.0.100;                     # <- IP des Servers der die efi Datei bereitstellt
-    filename "syslinux.efi";                    # <- Bei mancher Hardware gibt es hier Probleme. Man kann auch Alternativen verwenden z.B. ipxe.efi von https://ipxe.org+    filename "ipxe.efi";                    # <- Bei mancher Hardware gibt es hier Probleme. Man kann auch Alternativen verwenden z.B. ipxe.efi von https://ipxe.org
 } }
 </code> </code>
Zeile 79: Zeile 139:
 den Ordner aktiviert.\\ den Ordner aktiviert.\\
 \\ \\
 +==== Betriebssystem vorbereiten (Beispiel Clonezilla) ====
 +An dem Beispiel clonezilla möchte ich demonstrieren welche Dateien für ein Betriebssystem\\
 +benötigt und wohin diese gespeichert werden.\\
 +\\
 +Anlegen des Zielordners
 +<code bash>
 +mkdir -p /var/www/html/clonezilla/live
 +</code>
 +\\
 +Download der zip Datei von [[https://clonezilla.org/downloads.php|clonezilla.org]]
 +<code bash>
 +wget https://downloads.sourceforge.net/project/clonezilla/clonezilla_live_alternative/20250620-plucky/clonezilla-live-20250620-plucky-amd64.zip?ts=gAAAAABoynhSmdxihZan28Q8wXjUWD657zEcORlu3bIIrKGXd03DSxWvZLm-TXk6AA7AmClI53b-9HHuempgOhQnIQQhWDJaRQ%3D%3D&r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fclonezilla%2Ffiles%2Fclonezilla_live_alternative%2F20250620-plucky%2Fclonezilla-live-20250620-plucky-amd64.zip%2Fdownload%3Fuse_mirror%3Ddeac-riga
 +</code>
 +\\
 +Datei entpacken
 +<code bash>
 +unzip clonzilla*.zip
 +</code>
 +Kopieren der benötigten Dateien in das Zielverzeichnis
 +<code bash>
 +cp -v clonezilla/live/filesystem.squashfs clonezilla/live/initrd.img clonezilla/live/vmlinuz /var/www/html/clonezilla/live
 +</code>
 +\\
 +==== Boot Menü anlegen ====
 +Das Bootmenü ist die Datei welche von der ipxe.efi geholt und angezeigt wird. Innerhalb des Bootmenüs\\
 +konfigurieren wir unsere Betriebssysteme (hier Clonezilla).\\
 +\\
 +Das Bootmenü kann speziell für einen bestimmten Client anhand der MAC Adresse erstellt werden z.B. 00:12:ac:43:55:fg.ipxe oder\\
 +falls dieses nicht vorhanden ist erstelle ich hier eine default.ipxe Datei.\\
 +\\
 +**/var/www/html/default.ipxe**
 +<code ipxe>
 +#!ipxe
  
 +:custom_menu
 +menu Mein Standard Menue                        # <- Menü Titel
 +item --gap -- Custom Options:
 +
 +item clonezilla_live Boot Clonezilla Live       # <- Menü Punkte. Das erste Wort ist das Label wonach gesucht wird. Der String danach ist der angezeigte Text.
 +#item ubuntu Boot Ubuntu Install                # <- Zweiter Menüpunkt. Hier auskommentiert.
 +item return Return to Main Menu                 # <- Dritter Menüpunkt
 +
 +choose --default return --timeout 10000 target && goto ${target}
 +
 +:clonezilla_live                                # Hier beginnt die Konfiguration für Clonezilla. Es werden Tastaturlayout und Sprache vordefiniert. Es muss noch die Server IP angepasst werden
 +echo Booting Clonezilla...
 +kernel http://SERVER-IP/clonezilla/live/vmlinuz boot=live fetch=http://SERVER-IP/clonezilla/live/filesystem.squashfs boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=de_DE.UTF-8 keyboard-layouts=de ocs_live_extra_param="" ocs_live_batch=no net.ifnames=0 nosplash noprompt
 +initrd http://SERVER-IP/clonezilla/live/initrd.img
 +boot
 +
 +#:ubuntu                                         # Hier beginnt der zweite Eintrag für Ubuntu. Auskommentiert
 +#echo Booting Ubuntu Installer...
 +#kernel http://SERVER-IP/ubuntu/vmlinuz
 +#initrd http://SERVER-IP/ubuntu/initrd.gz
 +#boot
 +
 +:return
 +exit
 +</code>
 +
 +=== Clonezilla mit statischer IP starten ===
 +Hier wird Clonezilla mit statischer IP gestartet. Ebenfalls sind hier alle Optionen gesetzt um Clonezilla automatisch ein per nfs geladenes Images auf die Zielfestplatte nvme0n1 zu installieren.\\
 +**Ein kleiner BUG** Clonezilla versucht trotzdem einen DHCP Aufruf. Wenn dieser nicht nach vier Versuchen gelingt, wird die statische IP verwendet.\\
 +\\
 +<code ipxe>
 +kernel http://10.0.0.100/clonezilla/live/vmlinuz boot=live ip=eth0:10.0.0.50:255.255.255.0:10.0.0.1:8.8.8.8 nodhcp fetch=http://10.0.0.100/clonezilla/live/filesystem.squashfs username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=de_DE.UTF-8 keyboard-layouts=de ocs_prerun="" ocs_repository="nfs://10.0.0.100/home/partimag/" ocs_live_run="/usr/sbin/ocs-sr -g auto -e1 auto -e2 -r -j2 -c -k0 -scr -p reboot restoredisk hp-elite-deb12-250904 nvme0n1" ocs_live_extra_param="" ocs_live_batch=yes net.ifnames=0 nosplash noprompt
 +nodmraid locales=de_DE.UTF-8 keyboard-layouts=de ocs_live_extra_param="" ocs_live_batch=no net.ifnames=0 nosplash noprompt
 +initrd http://SERVER-IP/clonezilla/live/initrd.img
 +boot
 +</code>
 +\\
 +=== Eintrag für Debian XFCE ===
 +Hier wird für die Server IP eine Variable server-url definiert.\\
 +<code ipxe>
 +:debian_13_xfce
 +set server-url SERVERIP
 +echo Booting Debian 13 XFCE Live ...
 +echo ${server-url}
 +kernel http://${server-url}/debian-13-xfce/vmlinuz initrd=initrd.img boot=live components username=user fetch=http://${server-url}/debian-13-xfce/filesystem.squashfs
 +initrd http://${server-url}/debian-13-xfce/initrd.img
 +boot
 +</code>