Installationen über PXE: Unterschied zwischen den Versionen

Aus revampedia
 
(39 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 8: Zeile 8:
 
syslinux
 
syslinux
 
memtest86+
 
memtest86+
 +
linux-image-586
 
</pre>
 
</pre>
  
Zeile 14: Zeile 15:
 
{{Warnung|<big>&#9888;</big> Die IPs und Verzeichnisstruktur sind direkt aus unserer bestehenden Konfiguration übernommen, in anderen Netzwerken wird alles anders aussehen. Copy/paste auf eigene Gefahr!}}
 
{{Warnung|<big>&#9888;</big> Die IPs und Verzeichnisstruktur sind direkt aus unserer bestehenden Konfiguration übernommen, in anderen Netzwerken wird alles anders aussehen. Copy/paste auf eigene Gefahr!}}
  
IP des Installations-Servers (debian-jessie VM auf [[http://wiki.revamp-it.ch/index.php?title=Intern:--Baustelle--_Experimentier_Server_babyrobbe|Babyrobbe]]: 192.168.10.51
+
IP des Installations-Servers (debian-jessie VM auf '''pingu'''): 192.168.10.15
  
 
=== Einrichten von NFS und TFTP ===
 
=== Einrichten von NFS und TFTP ===
 
Sicherheit spielt beim Einbnden von NFS hier keine Rolle, da keine kritischen oder interessanten Daten auf dem Server gespeichert werden (sollten). Daher wird NFS mit den einfachstmöglichen, unsichersten Einstellungen konfiguriert.  
 
Sicherheit spielt beim Einbnden von NFS hier keine Rolle, da keine kritischen oder interessanten Daten auf dem Server gespeichert werden (sollten). Daher wird NFS mit den einfachstmöglichen, unsichersten Einstellungen konfiguriert.  
 +
 
'''/etc/exports'''
 
'''/etc/exports'''
 
<pre>
 
<pre>
Zeile 24: Zeile 26:
  
 
Beim TFTP-Server muss der Pfad angepasst werden. Damit wir mehr Informationen vom TFTP-Server im Syslog erhalten, starten wir ihn standardmässig mit der Option "--verbose". Wenn der Server fertig konfiguriert ist, können wir diese Option wieder entfernen.
 
Beim TFTP-Server muss der Pfad angepasst werden. Damit wir mehr Informationen vom TFTP-Server im Syslog erhalten, starten wir ihn standardmässig mit der Option "--verbose". Wenn der Server fertig konfiguriert ist, können wir diese Option wieder entfernen.
 +
 
'''/etc/default/tftpd-hpa'''
 
'''/etc/default/tftpd-hpa'''
 
<pre>
 
<pre>
 +
TFTP_USERNAME="tftp"
 
TFTP_DIRECTORY="/pxeboot/tftpboot"
 
TFTP_DIRECTORY="/pxeboot/tftpboot"
 
TFTP_ADDRESS="0.0.0.0:69"
 
TFTP_ADDRESS="0.0.0.0:69"
 
TFTP_OPTIONS="--verbose --secure"
 
TFTP_OPTIONS="--verbose --secure"
 +
</pre>
 +
 +
TFTPD und NFS müssen nun neu gestartet werden.
 +
<pre>
 +
# exportfs -rav
 +
# systemctl restart nfs-kernel-server
 +
# systemctl restart tftpd-hpa
 
</pre>
 
</pre>
  
Zeile 34: Zeile 45:
 
Damit Rechner, die über das Netzwerk gestartet werden, auch wissen, woher sie den Bootloader (pxelinux) laden sollen, muss der DHCP-Server auf den TFTP-Server verweisen. In unserem Fall ist der DHCP-Server im pfSense-Router. In der DHCP-Konfiguration ist lediglich die IP-Addresse des TFTP-Servers (192.168.10.51) einzugeben, damit die Clients sich dort anmelden um den Bootvorgang fortzusetzen. Die Konfiguration von PXE und dem Bootmenü ist später im Artikel beschrieben.
 
Damit Rechner, die über das Netzwerk gestartet werden, auch wissen, woher sie den Bootloader (pxelinux) laden sollen, muss der DHCP-Server auf den TFTP-Server verweisen. In unserem Fall ist der DHCP-Server im pfSense-Router. In der DHCP-Konfiguration ist lediglich die IP-Addresse des TFTP-Servers (192.168.10.51) einzugeben, damit die Clients sich dort anmelden um den Bootvorgang fortzusetzen. Die Konfiguration von PXE und dem Bootmenü ist später im Artikel beschrieben.
  
=== Verzeichnisstruktur : ===
+
==== Verzeichnisstruktur : ====
 
* '''/pxeboot'''
 
* '''/pxeboot'''
 
: Wurzelverzeichnis für die gesamte Struktur
 
: Wurzelverzeichnis für die gesamte Struktur
Zeile 41: Zeile 52:
 
: Unterverzeichnis für die ganzen Dateien, die per TFTP an den Client geschickt werden
 
: Unterverzeichnis für die ganzen Dateien, die per TFTP an den Client geschickt werden
 
:: '''memtest86+.bin'''
 
:: '''memtest86+.bin'''
 
+
: Kopiert aus '''/usr/lib/syslinux/modules/bios''':
* '''/pxeboot/tftpboot/common'''
 
: Dateien, die von mehreren Installations- und Livesystemen benutzt werden.
 
:: Kopiert aus '''/usr/lib/syslinux/modules/bios''':
 
 
:: '''cmenu.c32''', '''ldlinux32.c32''', '''libcom32.c32''', '''libmenu.c32''', '''libutil.c32''', '''menu.c32''', '''vesamenu.c32'''
 
:: '''cmenu.c32''', '''ldlinux32.c32''', '''libcom32.c32''', '''libmenu.c32''', '''libutil.c32''', '''menu.c32''', '''vesamenu.c32'''
 
: Hintergrundbild
 
: Hintergrundbild
:: [http://blacklite-teh-haxxor.deviantart.com/art/Tux-Button-302102059 tux_button.png]
+
:: [http://blacklite-teh-haxxor.deviantart.com/art/Tux-Button-302102059 tux_button.png] .. Sollte auf 640x400 oder 640x480 Pixel oder so hingeschnippelt werden
 +
 
 +
* '''/pxeboot/images'''
 +
: ISOs, fertige Festplattenimages zur Installation bereitgestellt
 +
:: mini.iso (Lubuntu netinstall CD-Image) und weitere nach Belieben
 +
 
 +
=== Einrichtung der bootfähigen Images, NFS-Zeugs ===
 +
 
 +
==== Debian Stretch Livesystem ====
 +
''Cem, 2017-06-21''
 +
 
 +
Analog zu Jessie (below).
 +
 
 +
* <code>/pxeboot/nfsroot/debian-stretch</code>
 +
 
 +
Unter <code>/pxeboot/nfsroot/</code>:
 +
 
 +
$ sudo debootstrap --arch=i386 stretch /pxeboot/nfsroot/debian-stretch
 +
$ sudo chroot debian-stretch/
 +
  # apt-get install linux-image-4.9.0-3-686
 +
  # exit
 +
 
 +
(root pw im chroot geändert)
 +
 
 +
* <code>/pxeboot/tftpboot/debian-stretch</code>
 +
 
 +
Kernel und initrd kopieren von nfsroot:
 +
 
 +
/pxeboot/nfsroot/debian-stretch/boot$ sudo cp vmlinuz-4.9.0-3-686 initrd.img-4.9.0-3-686 /pxeboot/tftpboot/debian-stretch/
 +
 
 +
<del>Grub</del>Syslinux Anpassung analog zu Jessie.
 +
 
 +
xfce4 desktop:
 +
 
 +
# apt-get install xfce4
 +
 
 +
tastatur-/spracheinst.:
 +
 
 +
# dpkg-reconfigure keyboard-configuration
 +
# service keyboard-setup restart
 +
 
 +
# dpkg-reconfigure locales
 +
 
 +
firefox und chromium nachinstalliert.
 +
 
 +
Benutzer revamp und sudo eingerichtet.
 +
 
 +
==== Debian Stretch netinstall ====
 +
''Cem, 2017-06-21''
 +
 
 +
Jessie ersetzt, da es sonst nicht geht wegen pfaden in syslinux...
 +
 
 +
* <code>/pxeboot/tftpboot/debian-installer/
 +
 
 +
http://debian.ethz.ch/debian/dists/stretch/main/installer-i386/current/images/netboot/
 +
 
 +
In syslinux eingetragen.
  
=== Debian Jessie (vorinstalliert, über Netzwerk startfähig ===
+
==== Debian Jessie (vorinstalliert, über Netzwerk startfähig) ====
 
* '''/pxeboot/tftpboot/debian8'''
 
* '''/pxeboot/tftpboot/debian8'''
: initrd.gz  (initial ramdisk), vmlinuz-3.16.0-4-586 (Kernel)
+
: '''initrd.img-3.16.0-4-586''' (initial ramdisk), '''vmlinuz-3.16.0-4-586''' (Kernel), kopiert aus /boot/ (Paket '''linux-image-586''')
 
: Kernel (32-bit, ohne PAE für bestmögliche Kompatibilität mit den meisten Geräten, wichtig v.A. für Computer mit Pentium M Prozessoren) und initrd  von mit '''deboostrap''' installiertem Changeroot.
 
: Kernel (32-bit, ohne PAE für bestmögliche Kompatibilität mit den meisten Geräten, wichtig v.A. für Computer mit Pentium M Prozessoren) und initrd  von mit '''deboostrap''' installiertem Changeroot.
 +
* '''/pxeboot/nfsroot/debian8'''
 +
: Debian Changeroot, erstellt mit folgendem Kommando:
 +
<pre>
 +
# debootstrap --arch=i386 jessie /pxeboot/nfsroot/debian8
 +
</pre>
 +
Später werden verschiedene Pakete im Changeroot nachinstalliert, die wir benötigen und, falls benötigt, neue Benutzerkonten angelegt.
  
=== Lubuntu 15.04 netinstall ===
+
==== Lubuntu 15.04 netinstall ====
 
* '''/pxeboot/tftpboot/lubuntu-15.04'''
 
* '''/pxeboot/tftpboot/lubuntu-15.04'''
 
: initrd.gz (initial ramdisk), linux (Kernel)
 
: initrd.gz (initial ramdisk), linux (Kernel)
 +
* '''/pxeboot/images/mini.iso'''
 +
: ISO, die in '''/pxeboot/nfsroot/lubuntu-15.04''' gemountet wird
 +
<pre>
 +
# mount -o loop /pxeboot/images/mini.iso /pxeboot/nfsroot/lubuntu-15.04
 +
</pre>
 +
* '''/pxeboot/nfsroot/lubuntu-15.04'''
 +
: Mountpoint des CD-Images
  
=== Debian Jessie netinstall ===
+
==== Debian Jessie netinstall ====
 
* '''/pxeboot/tftpboot/debian-installer'''
 
* '''/pxeboot/tftpboot/debian-installer'''
 
: Entpacktes [http://debian.ethz.ch/debian/dists/jessie/main/installer-amd64/current/images/netboot/ Netboot Image] aus dem Debian Repository
 
: Entpacktes [http://debian.ethz.ch/debian/dists/jessie/main/installer-amd64/current/images/netboot/ Netboot Image] aus dem Debian Repository
  
 
+
==== Tiny Core ====
 +
* Offizielle Anleitung: http://wiki.tinycorelinux.net/wiki:netbooting, insbesondere Abschnitt ''Absolute minimum method.''
 +
* '''/pxeboot/tftpboot/tinycore'''
 +
: '''[http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/distribution_files/vmlinuz vmlinuz]''' (Kernel) und '''[http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/distribution_files/core.gz core.gz]''' (Initial Ramdisk) von der aktuellen CD (Verzeichnis ''boot'') oder den angegebenen Adressen
 +
: Optional: f2 f3 f4 von der CD
 +
* '''/pxeboot/nfsroot/tinycore'''
 +
: Backup für '''tinycore_mod'''.
 +
* '''/pxeboot/nfsroot/tinycore_mod'''
 +
: Dieses NFS-Verzeichnis wird in TinyCore auf '''/mount/nfs''' schreibbar eingehängt.
 +
: Enthält im Unterverzeichnis '''tce/''' das Paket-Repository (Unterverzeichnisse: '''optional'''; '''ondemand''' [leer]).
 +
: Die Datei '''tce/onboot.lst''' gibt an, welche Pakete beim Booten geladen werden sollen.
 +
: Werden neue Pakete mit <code>tce-load -wi pkgname</code> oder über das Menüsystem <code>tce</code> installiert, landen sie in diesem Verzeichnis und werden beim nächsten Starten automatisch wieder geladen (Eintrag in '''tce/onboot.lst''').
 +
:: Im Unterschied zum Betrieb von CD (Bootparameter ''cde'') ist es nicht möglich, die "live" dazuinstallierten Pakete in einem anderen Verzeichnis (Ramdisk) abzuspeichern. Wenn kein Schreibzugriff auf das ''tce''-Repository vorhanden ist, können überhaupt keine neuen Pakete installiert werden!
 +
:: Die Datei '''tce/provides.db''' wird von der Paketverwaltung als Cache erzeugt. Sie ist für den Betrieb nicht nötig.
 +
* <span style="background:yellow">Zu tun:</span> Verzeichnis '''source''' mit Bauanleitung (wie auf der CD)
  
 
=== Syslinux Bootmenü ===
 
=== Syslinux Bootmenü ===
Zeile 74: Zeile 165:
 
DEFAULT vesamenu.c32
 
DEFAULT vesamenu.c32
 
TIMEOUT 100
 
TIMEOUT 100
MENU BACKGROUND tuxbutton.png
+
MENU BACKGROUND tux_button.png
  
 
LABEL BootLocal
 
LABEL BootLocal
Zeile 88: Zeile 179:
 
         ENDTEXT
 
         ENDTEXT
 
         KERNEL debian8/vmlinuz-3.16.0-4-586
 
         KERNEL debian8/vmlinuz-3.16.0-4-586
         APPEND root=/dev/nfs initrd=debian8/initrd.img-3.16.0-4-586 init=/sbin/init ip=dhcp rw nfsroot=192.168.10.51:/pxeboot/nfsroot/debian8
+
         APPEND root=/dev/nfs initrd=debian8/initrd.img-3.16.0-4-586 init=/sbin/init ip=dhcp rw nfsroot=192.168.10.15:/pxeboot/nfsroot/debian8
 +
 
 +
LABEL Puppy Linux
 +
        MENU LABEL Puppy Linux
 +
        TEXT HELP
 +
        Puppy Tahr (Ubuntu 14.04)
 +
        ENDTEXT
 +
        KERNEL puppytahr/vmlinuz
 +
        APPEND initrd=puppytahr/initrd.gz
  
 
LABEL memtest86
 
LABEL memtest86
Zeile 103: Zeile 202:
 
         ENDTEXT
 
         ENDTEXT
 
         KERNEL lubuntu-15.04/linux
 
         KERNEL lubuntu-15.04/linux
         APPEND root=/dev/nfs netboot=nfs nfsroot=192.168.10.51:/pxeboot/nfsroot/lubuntu-15.04 initrd=lubuntu-15.04/initrd.gz forcepae -- forcepae
+
         APPEND root=/dev/nfs netboot=nfs nfsroot=192.168.10.15:/pxeboot/nfsroot/lubuntu-15.04 initrd=lubuntu-15.04/initrd.gz forcepae -- forcepae
  
 
MENU BEGIN Debian Jessie amd64 Installer
 
MENU BEGIN Debian Jessie amd64 Installer
Zeile 115: Zeile 214:
 
         MENU SEPARATOR
 
         MENU SEPARATOR
 
         MENU INCLUDE common/debian-installer.menu
 
         MENU INCLUDE common/debian-installer.menu
 +
MENU END
 +
 +
MENU BEGIN TinyCore
 +
MENU TITLE TinyCore * Revamped by Tibor
 +
        F2 tinycore/f2
 +
        F3 tinycore/f3
 +
        F4 tinycore/f4
 +
 +
        LABEL tc1024
 +
        MENU LABEL Starte TinyCore 1024x768 (Textkonsole)
 +
        TEXT HELP
 +
        Starte TinyCore mit Schweizer Tastaturbelegung, ssh, ddrescue etc.
 +
        Verwende TAB, um Optionen anzupassen.
 +
        F2-F4 zeigen die Hilfe zu den Boot-Optionen.
 +
        ENDTEXT
 +
        KERNEL tinycore/vmlinuz
 +
        APPEND initrd=tinycore/core.gz nfsmount=192.168.10.15:/pxeboot/nfsroot/tinycore_mod quiet showapps tce=nfs/tce multivt noswap kmap=qwertz/sg-latin1 vga=773
 +
 +
        LABEL tc1280
 +
        # dasselbe mit vga=775 in APPEND und verändertem MENU LABEL
 +
 +
        LABEL tc
 +
        # dasselbe ohne vga in APPEND, mit verändertem MENU LABEL
 
MENU END
 
MENU END
 
</pre>
 
</pre>
 +
 +
Puppy Linux initrd: Siehe https://docs.google.com/document/d/1bkMJ-2wjAAC8HVZZTZBFxBELbojoGctLMg27KazqvRw/edit?hl=en&pli=1#
  
 
:: '''/pxeboot/tftpboot/common/debian-installer.menu'''
 
:: '''/pxeboot/tftpboot/common/debian-installer.menu'''
 
<pre>
 
<pre>
PATH debian-installer/amd64
+
PATH debian-installer/amd64/boot-screens/
INCLUDE debian-installer/amd64/boot-screens/menu.cfg
+
INCLUDE debian-installer/amd64/boot-screens/menu.cfg
DEFAULT debian-installer/amd64/boot-screens/vesamenu.c32
+
DEFAULT debian-installer/amd64/boot-screens/vesamenu.c32
 +
 
 +
PATH debian-installer/i386/boot-screens/
 +
INCLUDE debian-installer/i386/boot-screens/menu.cfg
 +
DEFAULT debian-installer/i386/boot-screens/vesamenu.c32
 
</pre>
 
</pre>
  
Zeile 129: Zeile 257:
  
 
== Zu beachten ==
 
== Zu beachten ==
Der über PXE zu bootende Client und der TFTP-Server sollten im gleichen Subnet sein. Falls dies nicht der Fall ist, wird ein TFTP-Proxy benötigt. Die Meinung des Autors ist, dass es einfacher ist, einen zusätzlichen TFTP-Server in das gleiche Subnet zu stellen, anstatt einen Proxy einzurichten. Jeduco h wurde diese Meinung um ca. 4 Uhr an einem Sonntagmorgen gebildet.
+
Der über PXE zu bootende Client und der TFTP-Server sollten im gleichen Subnet sein. Falls dies nicht der Fall ist, wird ein TFTP-Proxy benötigt. Die Meinung des Autors ist, dass es einfacher ist, einen zusätzlichen TFTP-Server in das gleiche Subnet zu stellen, anstatt einen Proxy einzurichten. Jedoch wurde diese Meinung um ca. 4 Uhr an einem Sonntagmorgen gebildet.
 +
 
 +
NFS funktioniert glücklicherweise ohne Probleme über verschiedene Subnets hinaus.
 +
 
 +
=== Warum kann ich kein ext4? / Kernelsalat ===
 +
 
 +
Bei netinstall-Images ist es möglich, dass zusätzliche Kernelmodule, die während der Installation aus dem Internet gesogen werden, neuer als das PXE-boot Image und daher nicht mit dem bestehendem Kernel kompatibel sind. In diesem Fall sollte das Image neu heruntergeladen und die Menüs neu eingerichtet werden.
 +
 
 +
Nach einem Update des ''chroot'' müssen die neuen Kernel/initramfs-Dateien auch an den richtigen Ort in der TFTP-Server Verzeichnisstruktur kopiert werden.
 +
 
 +
=== Keine Netzwerkverbindung nach Installation ===
 +
 
 +
Linux Mint Installationen (wenigstens ab Linux Mint 18 "Sarah", auch Ubuntu 16.04 ist betroffen) ab dem Netzwerk schreiben eine komische Konfiguration in '''/etc/network/interfaces''', mit welcher das installierte System keine IP-Adresse erhält. Nach der Installation sollte das Netzwerkinterface aus der Datei gelöscht werden, damit NetworkManager die Netzwerkeinstellungen verwaltet.
 +
 
 +
$ sudo nano /etc/network/interfaces
 +
 +
auto eno4 (der Name des Netzwerkinterfaces könnte anders lauten, z.B. enp0s25, etc.)
 +
iface eno4 inet manual
  
NFS funktioniert glücklicherweise ohne Probleme über Subnets hinaus.
+
Diese zwei Zeilen sollten mit einem Rautezeichen am Anfang der Zeilen auskommentiert oder ganz gelöscht werden. Nach einem Neustart des Computers (oder des Network-Manager Dienstes) wird das Netzwerk wieder von Network-Manager verwaltet und der Computer erhält seine Verbindungsinformationen über DHCP.
 +
 
 +
=== Gemischte Legacy/UEFI-Umgebungen ===
 +
[http://www.syslinux.org/wiki/index.php?title=PXELINUX-Multi-Arch Anleitung] im offiziellen Syslinux Wiki.
 +
 
 +
Kurz gefasst:
 +
* Je nach Boot-Einstellung des Computers schickt er beim PXE DHCP-Request andere Optionen in das Netzwerk http://www.itfaq.dk/2016/07/27/use-dhcp-to-detect-uefi-or-legacy-bios-system-and-pxe-boot-to-sccm/ https://wiki.fogproject.org/wiki/index.php?title=BIOS_and_UEFI_Co-Existence#Using_Linux_DHCP
 +
** BIOS: PXEClient:Arch:00000
 +
** EFI32: PXEClient:Arch:00006
 +
** EFI64: PXEClient:Arch:00007
 +
* Der DHCP-Server muss für diese verschiedenen Architekturen verschiedene Bootloader schicken, Standarddateinamen sind:
 +
** BIOS: pxelinux.0, ldlinux.c32
 +
** EFI32: syslinux.efi, ldlinux.e32
 +
** EFI64: syslinux.efi, ldlinux.e32
 +
* Die *.c32 Module haben für die verschiedenen Architekturen jeweils die gleichen Dateinamen, daher müssen die in verschiedenen Working Directories hinterlegt werden. Das jeweilige Working Directory ist das Verzeichnis, aus welchem die pxelinux/syslinux Datei vom Client geholt wird. Wenn ein 64-bit UEFI Client die Datei (TFTPROOT)/efi64/syslinux.efi erhält, ist sein Working Directory (TFTPROOT)/efi64/. D.h. der Client erwartet seine Standardkonfigurationsdatei mit Menü/Bootdirektiven in (TFTPROOT)/efi64/pxelinux.cfg/default ([http://www.syslinux.org/wiki/index.php?title=PXELINUX#Configuration_filename oder andere Client-spezifische Suchpfade])
 +
** Ob man Menüs für jede Architektur anders gestalten will ist jedem selbst überlassen. Bei einheitlicher Darstellung arbeitet man am besten mit Links auf bestehende Konfigurationsstrukturen anstatt mit separaten Dateien.
 +
** Zur Darstellung von Dateien die in Menüs als absoluter Pfad zum TFTPROOT (an Stelle von Pfaden relativ zum Working Directory) referenziert werden, sollten diese mit '''::''' beginnen.
 +
* Beispiel DHCP-Option UEFI 64 bit file name = '''efi64/syslinux.efi''', Working Directory ist '''(TFTPBOOT)/efi64/''':
 +
MENU BACKGROUND /background.png
 +
* Sucht '''background.png''' in '''(TFTPBOOT)/efi64/background.png'''
 +
MENU BACKGROUND ::/background.png
 +
* Sucht '''background.png''' in '''(TFTPBOOT)/background.png'''
  
 
== To Do ==
 
== To Do ==
  
 
*Fertige Installations-Images
 
*Fertige Installations-Images
 +
*Zusätzliche Distributionen (v.a. LTS-Versionen Xubuntu, Lubuntu, Kubuntu)
 +
 +
== Referenzen ==
 +
 +
https://help.ubuntu.com/community/PXEInstallMultiDistro
 +
https://docs.google.com/document/d/1bkMJ-2wjAAC8HVZZTZBFxBELbojoGctLMg27KazqvRw/edit?hl=en&pli=1#
 +
[[Category:Systemadministration]]

Aktuelle Version vom 11. Juli 2017, 10:04 Uhr

Diese Seite dient als Anleitung zur Einrichtung eines Servers sowohl für automatisierte Linux-Installationen als auch dem booten von Live-, Test- und Installations-Medien über das Netzwerk.

Benötigte Pakete

Zur Ergänzung einer standard Debian-Installation werden folgende Pakete (und deren Abhängigkeiten) nachinstalliert:

tftpd-hpa
nfs-kernel-server
syslinux
memtest86+
linux-image-586

Konfiguration

Warnung: Die IPs und Verzeichnisstruktur sind direkt aus unserer bestehenden Konfiguration übernommen, in anderen Netzwerken wird alles anders aussehen. Copy/paste auf eigene Gefahr!

IP des Installations-Servers (debian-jessie VM auf pingu): 192.168.10.15

Einrichten von NFS und TFTP

Sicherheit spielt beim Einbnden von NFS hier keine Rolle, da keine kritischen oder interessanten Daten auf dem Server gespeichert werden (sollten). Daher wird NFS mit den einfachstmöglichen, unsichersten Einstellungen konfiguriert.

/etc/exports

/pxeboot/nfsroot *(rw,no_root_squash,async,insecure,fsid=0,no_subtree_check)

Beim TFTP-Server muss der Pfad angepasst werden. Damit wir mehr Informationen vom TFTP-Server im Syslog erhalten, starten wir ihn standardmässig mit der Option "--verbose". Wenn der Server fertig konfiguriert ist, können wir diese Option wieder entfernen.

/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/pxeboot/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--verbose --secure"

TFTPD und NFS müssen nun neu gestartet werden.

# exportfs -rav
# systemctl restart nfs-kernel-server
# systemctl restart tftpd-hpa

Einrichten von DHCP und PXE

Damit Rechner, die über das Netzwerk gestartet werden, auch wissen, woher sie den Bootloader (pxelinux) laden sollen, muss der DHCP-Server auf den TFTP-Server verweisen. In unserem Fall ist der DHCP-Server im pfSense-Router. In der DHCP-Konfiguration ist lediglich die IP-Addresse des TFTP-Servers (192.168.10.51) einzugeben, damit die Clients sich dort anmelden um den Bootvorgang fortzusetzen. Die Konfiguration von PXE und dem Bootmenü ist später im Artikel beschrieben.

Verzeichnisstruktur :

  • /pxeboot
Wurzelverzeichnis für die gesamte Struktur
  • /pxeboot/tftpboot
Unterverzeichnis für die ganzen Dateien, die per TFTP an den Client geschickt werden
memtest86+.bin
Kopiert aus /usr/lib/syslinux/modules/bios:
cmenu.c32, ldlinux32.c32, libcom32.c32, libmenu.c32, libutil.c32, menu.c32, vesamenu.c32
Hintergrundbild
tux_button.png .. Sollte auf 640x400 oder 640x480 Pixel oder so hingeschnippelt werden
  • /pxeboot/images
ISOs, fertige Festplattenimages zur Installation bereitgestellt
mini.iso (Lubuntu netinstall CD-Image) und weitere nach Belieben

Einrichtung der bootfähigen Images, NFS-Zeugs

Debian Stretch Livesystem

Cem, 2017-06-21

Analog zu Jessie (below).

  • /pxeboot/nfsroot/debian-stretch

Unter /pxeboot/nfsroot/:

$ sudo debootstrap --arch=i386 stretch /pxeboot/nfsroot/debian-stretch
$ sudo chroot debian-stretch/
  # apt-get install linux-image-4.9.0-3-686
  # exit

(root pw im chroot geändert)

  • /pxeboot/tftpboot/debian-stretch

Kernel und initrd kopieren von nfsroot:

/pxeboot/nfsroot/debian-stretch/boot$ sudo cp vmlinuz-4.9.0-3-686 initrd.img-4.9.0-3-686 /pxeboot/tftpboot/debian-stretch/

GrubSyslinux Anpassung analog zu Jessie.

xfce4 desktop:

# apt-get install xfce4

tastatur-/spracheinst.:

# dpkg-reconfigure keyboard-configuration
# service keyboard-setup restart
# dpkg-reconfigure locales

firefox und chromium nachinstalliert.

Benutzer revamp und sudo eingerichtet.

Debian Stretch netinstall

Cem, 2017-06-21

Jessie ersetzt, da es sonst nicht geht wegen pfaden in syslinux...

  • /pxeboot/tftpboot/debian-installer/

http://debian.ethz.ch/debian/dists/stretch/main/installer-i386/current/images/netboot/

In syslinux eingetragen.

Debian Jessie (vorinstalliert, über Netzwerk startfähig)

  • /pxeboot/tftpboot/debian8
initrd.img-3.16.0-4-586 (initial ramdisk), vmlinuz-3.16.0-4-586 (Kernel), kopiert aus /boot/ (Paket linux-image-586)
Kernel (32-bit, ohne PAE für bestmögliche Kompatibilität mit den meisten Geräten, wichtig v.A. für Computer mit Pentium M Prozessoren) und initrd von mit deboostrap installiertem Changeroot.
  • /pxeboot/nfsroot/debian8
Debian Changeroot, erstellt mit folgendem Kommando:
# debootstrap --arch=i386 jessie /pxeboot/nfsroot/debian8

Später werden verschiedene Pakete im Changeroot nachinstalliert, die wir benötigen und, falls benötigt, neue Benutzerkonten angelegt.

Lubuntu 15.04 netinstall

  • /pxeboot/tftpboot/lubuntu-15.04
initrd.gz (initial ramdisk), linux (Kernel)
  • /pxeboot/images/mini.iso
ISO, die in /pxeboot/nfsroot/lubuntu-15.04 gemountet wird
# mount -o loop /pxeboot/images/mini.iso /pxeboot/nfsroot/lubuntu-15.04
  • /pxeboot/nfsroot/lubuntu-15.04
Mountpoint des CD-Images

Debian Jessie netinstall

  • /pxeboot/tftpboot/debian-installer
Entpacktes Netboot Image aus dem Debian Repository

Tiny Core

vmlinuz (Kernel) und core.gz (Initial Ramdisk) von der aktuellen CD (Verzeichnis boot) oder den angegebenen Adressen
Optional: f2 f3 f4 von der CD
  • /pxeboot/nfsroot/tinycore
Backup für tinycore_mod.
  • /pxeboot/nfsroot/tinycore_mod
Dieses NFS-Verzeichnis wird in TinyCore auf /mount/nfs schreibbar eingehängt.
Enthält im Unterverzeichnis tce/ das Paket-Repository (Unterverzeichnisse: optional; ondemand [leer]).
Die Datei tce/onboot.lst gibt an, welche Pakete beim Booten geladen werden sollen.
Werden neue Pakete mit tce-load -wi pkgname oder über das Menüsystem tce installiert, landen sie in diesem Verzeichnis und werden beim nächsten Starten automatisch wieder geladen (Eintrag in tce/onboot.lst).
Im Unterschied zum Betrieb von CD (Bootparameter cde) ist es nicht möglich, die "live" dazuinstallierten Pakete in einem anderen Verzeichnis (Ramdisk) abzuspeichern. Wenn kein Schreibzugriff auf das tce-Repository vorhanden ist, können überhaupt keine neuen Pakete installiert werden!
Die Datei tce/provides.db wird von der Paketverwaltung als Cache erzeugt. Sie ist für den Betrieb nicht nötig.
  • Zu tun: Verzeichnis source mit Bauanleitung (wie auf der CD)

Syslinux Bootmenü

  • /pxeboot/tftpboot/pxelinux.cfg
Dateien zur Konfiguration des Boot-Menüs
/pxeboot/tftpboot/pxelinux.cfg/default
MENU TITLE Boot Menu
PROMPT 0
DEFAULT vesamenu.c32
TIMEOUT 100
MENU BACKGROUND tux_button.png

LABEL BootLocal
        localboot 0
        TEXT HELP
        Lokal installiertes System booten
        ENDTEXT

LABEL Debian Jessie no PAE
        MENU LABEL Debian Jessie 32-bit non-PAE (login/pw: root/root)
        TEXT HELP
        
        ENDTEXT
        KERNEL debian8/vmlinuz-3.16.0-4-586
        APPEND root=/dev/nfs initrd=debian8/initrd.img-3.16.0-4-586 init=/sbin/init ip=dhcp rw nfsroot=192.168.10.15:/pxeboot/nfsroot/debian8

LABEL Puppy Linux
        MENU LABEL Puppy Linux
        TEXT HELP
        Puppy Tahr (Ubuntu 14.04)
        ENDTEXT
        KERNEL puppytahr/vmlinuz
        APPEND initrd=puppytahr/initrd.gz

LABEL memtest86
        MENU LABEL Memtest86+
        TEXT HELP
        Memtest86 ausführen
        ENDTEXT
        LINUX memtest86+.bin

LABEL Lubuntu 15.04 netinstall
        MENU LABEL Lubuntu 15.04 netinstall
        TEXT HELP
        Lubuntu 15.04 Installieren
        ENDTEXT
        KERNEL lubuntu-15.04/linux
        APPEND root=/dev/nfs netboot=nfs nfsroot=192.168.10.15:/pxeboot/nfsroot/lubuntu-15.04 initrd=lubuntu-15.04/initrd.gz forcepae -- forcepae

MENU BEGIN Debian Jessie amd64 Installer
MENU TITLE Debian Jessie amd64 Installer
        LABEL Zurück
        MENU LABEL Zurück zum vorherigen Menü
        TEXT HELP
        Zurück zum vorherigen Menü
        ENDTEXT
        MENU EXIT
        MENU SEPARATOR
        MENU INCLUDE common/debian-installer.menu
MENU END

MENU BEGIN TinyCore
MENU TITLE TinyCore * Revamped by Tibor
        F2 tinycore/f2
        F3 tinycore/f3
        F4 tinycore/f4

        LABEL tc1024
        MENU LABEL Starte TinyCore 1024x768 (Textkonsole)
        TEXT HELP
        Starte TinyCore mit Schweizer Tastaturbelegung, ssh, ddrescue etc.
        Verwende TAB, um Optionen anzupassen.
        F2-F4 zeigen die Hilfe zu den Boot-Optionen.
        ENDTEXT
        KERNEL tinycore/vmlinuz
        APPEND initrd=tinycore/core.gz nfsmount=192.168.10.15:/pxeboot/nfsroot/tinycore_mod quiet showapps tce=nfs/tce multivt noswap kmap=qwertz/sg-latin1 vga=773

        LABEL tc1280
        # dasselbe mit vga=775 in APPEND und verändertem MENU LABEL

        LABEL tc
        # dasselbe ohne vga in APPEND, mit verändertem MENU LABEL
MENU END

Puppy Linux initrd: Siehe https://docs.google.com/document/d/1bkMJ-2wjAAC8HVZZTZBFxBELbojoGctLMg27KazqvRw/edit?hl=en&pli=1#

/pxeboot/tftpboot/common/debian-installer.menu
PATH debian-installer/amd64/boot-screens/
INCLUDE debian-installer/amd64/boot-screens/menu.cfg
DEFAULT debian-installer/amd64/boot-screens/vesamenu.c32

PATH debian-installer/i386/boot-screens/
INCLUDE debian-installer/i386/boot-screens/menu.cfg
DEFAULT debian-installer/i386/boot-screens/vesamenu.c32

Ablauf

Zu beachten

Der über PXE zu bootende Client und der TFTP-Server sollten im gleichen Subnet sein. Falls dies nicht der Fall ist, wird ein TFTP-Proxy benötigt. Die Meinung des Autors ist, dass es einfacher ist, einen zusätzlichen TFTP-Server in das gleiche Subnet zu stellen, anstatt einen Proxy einzurichten. Jedoch wurde diese Meinung um ca. 4 Uhr an einem Sonntagmorgen gebildet.

NFS funktioniert glücklicherweise ohne Probleme über verschiedene Subnets hinaus.

Warum kann ich kein ext4? / Kernelsalat

Bei netinstall-Images ist es möglich, dass zusätzliche Kernelmodule, die während der Installation aus dem Internet gesogen werden, neuer als das PXE-boot Image und daher nicht mit dem bestehendem Kernel kompatibel sind. In diesem Fall sollte das Image neu heruntergeladen und die Menüs neu eingerichtet werden.

Nach einem Update des chroot müssen die neuen Kernel/initramfs-Dateien auch an den richtigen Ort in der TFTP-Server Verzeichnisstruktur kopiert werden.

Keine Netzwerkverbindung nach Installation

Linux Mint Installationen (wenigstens ab Linux Mint 18 "Sarah", auch Ubuntu 16.04 ist betroffen) ab dem Netzwerk schreiben eine komische Konfiguration in /etc/network/interfaces, mit welcher das installierte System keine IP-Adresse erhält. Nach der Installation sollte das Netzwerkinterface aus der Datei gelöscht werden, damit NetworkManager die Netzwerkeinstellungen verwaltet.

$ sudo nano /etc/network/interfaces

auto eno4 (der Name des Netzwerkinterfaces könnte anders lauten, z.B. enp0s25, etc.)
iface eno4 inet manual

Diese zwei Zeilen sollten mit einem Rautezeichen am Anfang der Zeilen auskommentiert oder ganz gelöscht werden. Nach einem Neustart des Computers (oder des Network-Manager Dienstes) wird das Netzwerk wieder von Network-Manager verwaltet und der Computer erhält seine Verbindungsinformationen über DHCP.

Gemischte Legacy/UEFI-Umgebungen

Anleitung im offiziellen Syslinux Wiki.

Kurz gefasst:

  • Je nach Boot-Einstellung des Computers schickt er beim PXE DHCP-Request andere Optionen in das Netzwerk http://www.itfaq.dk/2016/07/27/use-dhcp-to-detect-uefi-or-legacy-bios-system-and-pxe-boot-to-sccm/ https://wiki.fogproject.org/wiki/index.php?title=BIOS_and_UEFI_Co-Existence#Using_Linux_DHCP
    • BIOS: PXEClient:Arch:00000
    • EFI32: PXEClient:Arch:00006
    • EFI64: PXEClient:Arch:00007
  • Der DHCP-Server muss für diese verschiedenen Architekturen verschiedene Bootloader schicken, Standarddateinamen sind:
    • BIOS: pxelinux.0, ldlinux.c32
    • EFI32: syslinux.efi, ldlinux.e32
    • EFI64: syslinux.efi, ldlinux.e32
  • Die *.c32 Module haben für die verschiedenen Architekturen jeweils die gleichen Dateinamen, daher müssen die in verschiedenen Working Directories hinterlegt werden. Das jeweilige Working Directory ist das Verzeichnis, aus welchem die pxelinux/syslinux Datei vom Client geholt wird. Wenn ein 64-bit UEFI Client die Datei (TFTPROOT)/efi64/syslinux.efi erhält, ist sein Working Directory (TFTPROOT)/efi64/. D.h. der Client erwartet seine Standardkonfigurationsdatei mit Menü/Bootdirektiven in (TFTPROOT)/efi64/pxelinux.cfg/default (oder andere Client-spezifische Suchpfade)
    • Ob man Menüs für jede Architektur anders gestalten will ist jedem selbst überlassen. Bei einheitlicher Darstellung arbeitet man am besten mit Links auf bestehende Konfigurationsstrukturen anstatt mit separaten Dateien.
    • Zur Darstellung von Dateien die in Menüs als absoluter Pfad zum TFTPROOT (an Stelle von Pfaden relativ zum Working Directory) referenziert werden, sollten diese mit :: beginnen.
  • Beispiel DHCP-Option UEFI 64 bit file name = efi64/syslinux.efi, Working Directory ist (TFTPBOOT)/efi64/:
MENU BACKGROUND /background.png 
  • Sucht background.png in (TFTPBOOT)/efi64/background.png
MENU BACKGROUND ::/background.png
  • Sucht background.png in (TFTPBOOT)/background.png

To Do

  • Fertige Installations-Images
  • Zusätzliche Distributionen (v.a. LTS-Versionen Xubuntu, Lubuntu, Kubuntu)

Referenzen

https://help.ubuntu.com/community/PXEInstallMultiDistro https://docs.google.com/document/d/1bkMJ-2wjAAC8HVZZTZBFxBELbojoGctLMg27KazqvRw/edit?hl=en&pli=1#