4.6. Dateien vorbereiten für TFTP-Netzwerk-Boot

Wenn Ihr Rechner mit einem Netzwerk (Local Area Network, LAN) verbunden ist, sind Sie vielleicht in der Lage, über das Netzwerk per TFTP von einem anderen Rechner aus zu booten. Wenn Sie dies vorhaben, müssen die Boot-Dateien in speziellen Verzeichnissen auf diesem entfernten Rechner abgelegt werden und der Rechner muss für das Booten speziell Ihrer Maschine konfiguriert werden.

Sie müssen einen TFTP-Server einrichten und in vielen Fällen auch einen BOOTP-Server oder einen DHCP-Server.

BOOTP ist ein IP-Protokoll, das einem Computer seine IP-Adresse mitteilt und wo er im Netzwerk ein Boot-Image findet. Das Dynamic-Host-Configuration-Protocol (DHCP) ist eine flexiblere, rückwärts-kompatible Erweiterung von BOOTP. Einige Systeme können nur per DHCP konfiguriert werden.

Das Trivial-File-Transfer-Protocol (TFTP) wird benutzt, um dem Client das Boot-Image zur Verfügung zu stellen. Theoretisch könnte jeder Server auf jeder Plattform benutzt werden, der diese Protokolle implementiert hat. In den Beispielen in diesem Abschnitt geben wir Kommandos für SunOS 4.x, SunOS 5.x (a.k.a. Solaris) und GNU/Linux an.

Anmerkung

Um die Pre-Boot-Execution-Environment- (PXE) Methode von TFTP zu nutzen, benötigen Sie einen TFTP-Server mit Unterstützung für tsize. Auf einem Debian GNU/Linux-Server sind dies atftpd und tftpd-hpa; wir empfehlen, tftpd-hpa zu verwenden.

4.6.1. BOOTP-Server einrichten

Es gibt für GNU/Linux zwei BOOTP-Server: den bootpd (CMU) und der andere ist vielmehr ein DHCP-Server, der dhcpd (ISC). Sie sind in den Debian GNU/Linux-Paketen bootp und dhcp enthalten.

Um den bootpd (CMU) zu nutzen, müssen Sie als erstes für die entsprechende Zeile in /etc/inetd.conf das Kommentarzeichen entfernen (bzw. die Zeile hinzufügen, falls noch nicht vorhanden). Unter Debian GNU/Linux erledigen Sie das mit update-inetd --enable bootps und anschließendem /etc/init.d/inetd reload. Ansonsten sollte die fragliche Zeile so aussehen:

bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

Jetzt müssen Sie die Datei /etc/bootptab erstellen. Sie hat das gewohnte kryptische Format wie die guten alten BSD-Dateien printcap, termcap und disktab. Mehr Informationen bekommen Sie auf der Handbuchseite von bootptab. Beim CMU-bootpd müssen Sie die Hardware-(MAC)Adresse des Clients kennen. Hier ein Beispiel für /etc/bootptab:

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

Sie müssen zumindest den Eintrag „ha“ anpassen, der die Hardwareadresse des Clients angibt. Der Eintrag „bf“ legt fest, welche Datei der Client per TFTP bezieht; Abschnitt 4.6.4, „Die TFTP-Images an ihren Platz befördern“ enthält mehr Details.

Im Unterschied dazu ist es wirklich einfach, den ISC-dhcpd einzurichten, da dieser BOOTP-Clients gewissermaßen als Spezialfall von DHCP-Clients behandelt. Einige Architekturen erfordern eine komplexe Konfiguration, um Clients per BOOTP zu starten. Wenn Sie solch einen Fall haben, lesen Sie Abschnitt 4.6.2, „DHCP-Server einrichten“. Andernfalls könnte es vielleicht reichen, in /etc/dhcpd.conf den Eintrag allow bootp zu dem Block der Datei hinzuzufügen, der das Subnetz konfiguriert, zu dem Ihr Client gehört. Danach muss der dhcpd mit /etc/init.d/dhcpd restart neu gestartet werden.

4.6.2. DHCP-Server einrichten

Ein Free-Software-DHCP-Server ist der ISC-dhcpd. In Debian GNU/Linux ist er im dhcp-Paket enthalten. Hier eine beispielhafte Konfigurationsdatei (gewöhnlich /etc/dhcpd.conf):

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

Beachten Sie: der neue (und bevorzugte) dhcp3 benutzt die Konfigurationsdatei /etc/dhcp3/dhcpd.conf.

In diesem Beispiel gibt es einen Server servername, der alle Aufgaben von DHCP-Server, TFTP-Server und Netzwerk-Gateway übernimmt. Sie müssen natürlich die Domain-Namen-Einträge ändern wie auch den Servernamen und die Hardwareadresse der Clients. Der Eintrag filename sollte der Name der Datei sein, die per TFTP abgerufen wird.

Nachdem Sie die Konfigurationsdatei des dhcpd verändert haben, starten Sie ihn mit /etc/init.d/dhcpd restart neu.

4.6.2.1. PXE-Boot aktivieren in der DHCP-Konfiguration

Hier ist ein weiteres Beispiel der dhcpd.conf, das die Pre-Boot-Execution-Environment-(PXE)Methode von TFTP nutzt.

option domain-name "example.com";

default-lease-time 600;
max-lease-time 7200;

allow booting;
allow bootp;

# Der nächste Abschnitt muss unter Umständen an Ihre
# Situation angepasst werden.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option broadcast-address 192.168.1.255;
# die Gateway-Adresse, die bei Ihnen unterschiedlich sein kann
# (z.B. für den Zugriff auf das Internet)
  option routers 192.168.1.1;
# Geben Sie die DNS an, die Sie nutzen möchten
  option domain-name-servers 192.168.1.3;
}

group {
 next-server 192.168.1.3;
 host tftpclient {
# Hardware-Adresse des tftp-Clients
  hardware ethernet  00:10:DC:27:6C:15;
  filename "/tftpboot/pxelinux.0";
 }
}

Beachten Sie, dass im Fall von PXE die Client-Datei pxelinux.0 ein Bootloader ist, kein Kernel-Image (siehe Abschnitt 4.6.4, „Die TFTP-Images an ihren Platz befördern“ weiter unten).

4.6.3. Den TFTP-Server aktivieren

Um den TFTP-Server einzurichten, sollten Sie als Erstes sicherstellen, dass tftpd aktiv ist. Dies können Sie mit einer Zeile wie der folgenden in /etc/inetd.conf erreichen:

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

Die Debian-Pakete richten dies generell standardmäßig korrekt ein, wenn sie installiert werden.

Schauen Sie sich die Datei an und merken Sie sich das Verzeichnis, das als Argument hinter in.tftpd eingetragen ist; Sie werden es später brauchen. Das Argument -l aktiviert bei einigen Versionen von in.tftpd das Logging, so dass alle Anfragen im Systemlog protokolliert werden; dies ist nützlich für die Fehlersuche bei Bootproblemen. Wenn Sie /etc/inetd.conf ändern mussten, ist es nötig, dem laufenden inetd-Prozess mitzuteilen, dass sich die Konfigurationsdatei geändert hat. Auf einem Debian-Rechner erledigen Sie das mit /etc/init.d/inetd reload; auf anderen Maschinen müssen Sie die Prozess-ID von inetd herausfinden und kill -HUP Prozess-ID ausführen.

4.6.4. Die TFTP-Images an ihren Platz befördern

Als nächstes legen Sie die TFTP-Bootimages, die Sie brauchen und die Sie wie in Abschnitt 4.2.1, „Wo Sie die Installations-Images finden“ beschrieben finden können, im tftpd-Bootimage-Verzeichnis ab. Meistens wird dies /tftpboot sein. Sie müssen einen Link von diesem Image auf die Datei anlegen, die tftpd benutzt, um einen speziellen Client zu booten. Bedauerlicherweise hängt der Name dieser Datei von dem TFTP-Client ab und es gibt dabei keine festen Standards.

Um per PXE zu booten, müssen Sie nur den netboot/netboot.tar.gz-Tarball einrichten. Entpacken Sie den Tarball einfach in das tftpd-Bootimage-Verzeichnis. Stellen Sie sicher, dass der DHCP-Server konfiguriert ist, /pxelinux.0 als zu bootende Datei zum tftpd weiterzuleiten.