Wenn man sich schon einmal im BIOS / UEFI umgesehen hat, findet man dort unter den Boot-Optionen neben dem Start von Festplatte, USB oder optischem Medium auch oft den Eintrag PXE-Boot. PXE ist die Abkürzung für „Preboot eXecution Environment“ – schnell und einfach gesagt, bedeutet dies, man startet den Rechner über das Netzwerk – man holt die Daten, die man zum Starten des Rechners benötigt von einem anderen Rechner. Man holt sich das Betriebssystem von einem anderen Rechner.

Genutzt wird PXE-Boot meist, um auf einem Rechner ein neues Betriebssystem aufzusetzen – vor allem dann, wenn man viele solcher Rechner / Laptops aufsetzt – etwa in einer Firma.

Standardmäßig, mit bereits installierten Betriebssystem würde dies also so aussehen – der Rechner startet vom auf der Festplatte installiertem Betriebssystem:

Um ein Betriebssystem zu installieren, startet man hingegen über ein externes Medium – etwa von einer CD/DVD, von einem USB-Stick oder von einer externen Festplatte:

Jetzt gehen wir über zum Start über PXE – der Rechner startet so gesehen über die Netzwerkkarte und holt sich das zu startende Betriebssystem von einem anderen Rechner:

Man kann jedoch nicht ganz einfach auf einem Rechner ein Image hinterlegen und dann per PXE-Boot auf dieses Image zugreifen – man muss den Rechner, auf dem das Image liegt, natürlich vorbereiten, damit ein anderer Rechner auf das Image zugreifen kann.

PXE-Server vorbereiten

In diesem Beispiel nehmen wir Debian als Betriebssystem für einen PXE-Server, dies kann natürlich auch ein Raspberry Pi mit Raspbian OS sein. Auf dem PXE-Server, also Debian – installieren wir über die Paket-Verwaltung das Paketdnsmasq„. Als Nächstes muss Dnsmasq konfiguriert werden – dazu öffnen wir als root auf dem Terminal die nötige Konfigurationsdatei:

vim /etc/dnsmasq.conf

Oder eben:

nano /etc/dnsmasq.conf

Diese Datei gilt es jetzt an die eigenen Bedürfnisse anzupassen – in der Regel sieht die Konfigurationsdatei anschließend so aus:

enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-boot=/pxelinux.0,0.0.0.0
domain-needed
bogus-priv
listen-address=192.168.56.1
expand-hosts
dhcp-range=192.168.56.10,192.168.56.15,12h

Je nach Debian-Version sind die Zeilen schon vorhanden – ist dies so, entfernen Sie nur die Raute „#“ vor der Zeile und passen die Zeilen an, alternativ fügen Sie diese einfach am Ende der Datei als neue Zeilen hinzu.

Der PXE-Server sollte natürlich eine statische IP-Adresse haben – diese ermitteln Sie am Server mit dem Befehl:

ip a

Die IP-Adresse geben Sie jetzt in der Zeile [c]listen-address=[/c] an. In der Zeile [c]dhcp-range=[/c] können Sie jetzt noch den IP-Bereich anpassen, welche IP-Adressen auf den Server zugreifen dürfen – in der Regel sollte die komplette Zeile, wie beschrieben schon passen (privater Adressbereich). Die Eingabe „12h“ können Sie so belassen, wie es ist.

Jetzt gehen Sie schon an das Eingemachte. Sie erstellen das nötige Verzeichnis:

mkdir /var/lib/tftpboot

Anschließend wechseln Sie in das Verzeichnis:

cd /var/lib/tftpboot/

Jetzt wird das eigentliche Image heruntergeladen – konkreter, wir laden nicht das Image herunter, sondern nur den Installer für die Netinstall. Für Debian Bookworm:

wget https://ftp.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/netboot.tar.gz

Handelt es sich um eine aktuellere Version – müssen Sie nur „bookworm“ durch das passende Release austauschen, für 32 Bit passen Sie „installer-amd64“ an – öffnen Sie einfach die Adresse im Webbrowser und folgen den Links. Jetzt wird das komprimierte Archiv entpackt:

tar xzvf netboot.tar.gz

Und anschließend werden die Rechte an allen Dateien angepasst:

chown nobody:nogroup -R .

Wichtig – nicht den Punkt am Ende vergessen. Jetzt muss die Netzwerkkarte wissen, wohin Sie Anfragen weiterleiten muss – hierzu nehme ich die Iptables, Minimalkonfiguration am Terminal:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -o eth0 -i eth1 -s 192.168.56.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

Für die Iptables wird es demnächst einen passenden Artikel auf der Linux Bibel geben, natürlich auch für die Nftables. Jetzt wird Dnsmasq neu gestartet:

service dnsmasq restart

Wir bleiben natürlich im Verzeichnis mit dem heruntergeladenen Installer und installieren uns über die Paket-Verwaltung folgende Pakete „pxelinux syslinux„. Anschließend passen wir unseren Installer an, wir modifizieren diesen:

mkdir /tmp/initrd
cd /tmp/initrd/
cat /var/lib/tftpboot/debian-installer/amd64/initrd.gz | gzip -d | cpio -i
cp /root/preseed.cfg .
find | cpio -o --format=newc | gzip -9c > ../initrd.gz
cp ../initrd.gz /var/lib/tftpboot/debian-installer/amd64/

Wie oben schon beschrieben – die Befehle gelten für 64 Bit – passen Sie bei 32 Bit „amd64“ wie in der Verzeichnis-Hierarchie vorgegeben an. Jetzt passen wir die Syslinux-Konfiguration an:

vim /var/lib/tftpboot/debian-installer/amd64/boot-screens/syslinux.cfg

Oder eben:

nano /var/lib/tftpboot/debian-installer/amd64/boot-screens/syslinux.cfg

Diese könnte für Debian Bookworm so aussehen:

# D-I config version 2.0
include debian-installer/amd64/boot-screens/menu.cfg
default debian-installer/amd64/boot-screens/vesamenu.c32
prompt 0
timeout 0
DEFAULT bookworm

LABEL bookworm
        kernel debian-installer/amd64/linux
        append vga=normal initrd=debian-installer/amd64/initrd.gz auto=true interface=auto netcfg/dhcp_timeout=60 netcfg/choose_interface=auto priority=critical preseed/file=/preseed.cfg IPAPPEND 2

In der Regel müssen Sie nur „bookworm“ durch das gewünschte Release austauschen. Und jetzt das Wichtigste – die Konfiguration des zu installierenden Debian. Wir erstellen diese Konfiguration im aktuellen Verzeichnis:

vim preseed.cfg

Oder eben:

nano preseed.cfg

Eine Beispiel-Konfiguration:

# Locale / Keymap
d-i debian-installer/locale 		      string de_DE.UTF-8
d-i debian-installer/keymap 		      select de-latin1
d-i console-keymaps-at/keymap 		      select de
d-i languagechooser/language-name-fb 	      select German
d-i countrychooser/country-name 	      select Germany
d-i console-setup/layoutcode 		      string de_DE
# Netzwerk-Konfiguration
d-i netcfg/dhcp_timeout                       string 30
d-i netcfg/choose_interface                   select eth0
d-i netcfg/hostname 			      string gewünschter_hostname
# Installationsquelle
d-i mirror/country                            string manual
d-i mirror/http/hostname                      string ftp.de.debian.org
d-i mirror/http/directory                     string /debian
d-i mirror/codename                           string bookworm
d-i mirror/suite			      string bookworm
d-i mirror/udeb/suite 			      string bookworm
d-i mirror/http/proxy                         string
d-i mirror/noarch 			      error
# Installer / Apt-Setup
d-i debian-installer/allow_unauthenticated    string true
d-i finish-install/reboot_in_progress         note
d-i prebaseconfig/reboot_in_progress          note
d-i apt-setup/non-free                        boolean true
d-i apt-setup/contrib                         boolean true
# Uhr und Zeitzone
d-i clock-setup/utc                           boolean true
d-i clock-setup/ntp                           boolean true
d-i clock-setup/ntp-server                    string  0.pool.ntp.org
d-i time/zone                                 string Europe/Berlin
# Partitionierung / Grub
d-i partman-auto/disk                         string /dev/sda
d-i partman-auto/method                       string regular
d-i partman-lvm/device_remove_lvm             boolean true
d-i partman-auto/purge_lvm_from_device        boolean true
d-i partman-lvm/confirm                       boolean true
d-i partman/alignment                         select cylinder
d-i partman/confirm                           boolean true
d-i partman-basicfilesystems/no_swap 	      boolean false
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition                  select finish
d-i partman/confirm_nooverwrite               boolean true
d-i grub-installer/only_debian                boolean true
# Boot/Root-Partition, Zahlen in MB
d-i partman-auto/expert_recipe string             \
 condpart ::                                      \
 500 500 500 ext4                                 \
     $primary{ } $bootable{ }                     \
     method{ format } format{ }                   \
     use_filesystem{ } filesystem{ ext4 }         \
     mountpoint{ /boot }                          \
 .                                                \
 10240 10240 10240 ext4                              \
     $primary{ }                                  \
     method{ format } format{ }                   \
     use_filesystem{ } filesystem{ ext4 }         \
     mountpoint{ / }                              \
 .                                                \
# Root User anlegen
d-i passwd/root-login			      boolean true
d-i passwd/root-password-crypted 	      password passwort
# User anlegen
d-i passwd/user-fullname 		      string Benutzer Name
d-i passwd/username 			      string benutzer
# User-Passwort (hier im Klartext)
d-i passwd/user-password 		      password sicheres_passwort
d-i passwd/user-password-again 		      password sicheres_passwort
# Software Selections
tasksel tasksel/first                         multiselect  ssh-server standard
d-i     pkgsel/include                        string       ssh vim ethtool sysstat ntp ntpdate
# Mail-Konfiguration
exim4-config     exim4/no_config              boolean true
exim4-config     exim4/exim3_upgrade          boolean true
# SSH-Server
ssh ssh/new_config  		 	      boolean true
ssh ssh/use_old_init_script 	      	      boolean true
ssh ssh/protocol2_only      	      	      boolean true
ssh ssh/run_sshd    		      	      boolean true
ssh ssh/SUID_client 		      	      boolean true
ssh ssh/disable_cr_auth     	      	      boolean false
# Pop-Contest
popularity-contest popularity-contest/participate boolean false

In diesem Fall wird ein Standard-Debian ohne grafische Oberfläche installiert. Die Boot-Partition hat 500 Megabyte, die Systempartition 10 Gigabyte. Den Benutzer erstellen Sie mit der Zeile [c]d-i passwd/user-fullname string Benutzer Name[/c], den Login-Namen mit [c]d-i passwd/username string benutzer[/c]. Das root-Passwort mit [c]d-i passwd/root-password-crypted password passwort[/c], das Passwort des normalen Benutzers mit [c]d-i passwd/user-password password sicheres_passwort[/c] und [c]d-i passwd/user-password-again password sicheres_passwort[/c]. Software installieren Sie mit [c]tasksel tasksel/first multiselect ssh-server standard[/c] – so installieren Sie etwa KDE Plasma als grafische Oberfläche mit:

tasksel tasksel/first                         multiselect  ssh-server standard plasma-desktop

Im Grunde ist die Konfiguration recht verständlich – mehr zur Konfiguration finden Sie unter preseed.cfg. Für ein absolut sicher gehashtes root-Passwort starten Sie noch den Befehl:

printf "sicheres_passwort" | mkpasswd -s -m sha-512

Dies war es schon – jetzt brauchen Sie nur noch auf den zu installierenden Rechnern im BIOS/UEFI auf PXE-Boot umstellen und die IP-Adresse Ihres PXE-Servers angeben.

Gefällt mir 0
Gefällt mir nicht 0

Categories:

Tags:

Schreibe einen Kommentar

Noch keine Reaktion

Neue Themen im Forum
Autostart verhindern Tastenkombin …Passend zum Thema Autostart: https://gnulinux.ch/autostart-vere … Weiterlesen
Ton unter Debian XfceHab ich gemacht, Rechner neu gestartet, dann in Standby versetzt, … Weiterlesen
Archivierungsprogramm für Datentr …Zitat von zebolon am 15. Mai 2025, 18:33 Uhr Zu Recoll gibt es im … Weiterlesen
Kategorien im Wiki
WIKI-Beiträge des Monates

Die Beiträge des Monates finden Sie im Kalender unter den blau markierten Tageszahlen.

September 2023
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  
Archive