Debian per NFS installieren

Bei dem Versuch, Debian Über NFS auf einer ia32 Architektur zu installieren, kam es zu ein paar Problemen. Deshalb hier die Vorgehensweise, es es funktionieren sollte und auf was man achten sollte. Anregungen und Anmerkungen sind herzlich willkommen.

Überblick

Nach dem Booten sucht zunächst das BIOS nach BIOS-Erweiterungen. Über diesen Mechanismus kann zum Beispiel die Netzwerkkarte nachträglich den Rechner um die PXE erweitern, über die dann über das Netz gebootet werden kann.

PXE startet über DHCP eine Anfrage über das Netz nach den zu verwendenden Netzwerkdaten. Diese beinhalten unter anderem den Dateinamen der Datei, die als nächstes übertragen und gestartet werden soll. Diese Datei wird per TFTP übertragen und in der PXE-Umgebung ausgeführt.

Aufgrund von Größenbeschränkungen wird an dieser Stelle der Linux-Kernel noch nicht übertragen. Stattdessen wird der Linux-Bootloader übertragen, dessen weitere Aufgabe es ist, den eigentlichen Kernel zu laden und zur Ausführung zu bringen. Dazu lädt er eine Konfigurationsdatei via TFTP nach, über die ein Auswahlmenü für verschiedene Kernelversionen und Kommandozeilenparameter realisiert werden kann. Nach der Auswahl wird der entsprechende Kernel ebenfalls via TFTP übertragen und mit den angegebenen Optionen gestartet.

Anstatt das Root-Dateisystem von Festplatte zu mounten mountet der Kernel über NFS das Dateisystem und beginnt dann mit dem normalen Bootprozeß über /sbin/init.

Im einzelnen

In der Folge ihres Auftretens sind folgende Dienste und Programme zu konfigurieren:

BIOS

Entweder bietet das BIOS bereits Unterstützung für PXE, oder eine PXE-fähige Netzwerkkarte erweitert das BIOS um die benötigte Funktionalität. Es kann nötig sein, das Booten über das Netz extra zu aktivieren, da der Rechner ansonsten ein bereits installiertes Betriebssystem von Diskette, CD-ROM, DVD oder Festplatte startet.

Während dem Startvorgang fragt die Netzwerkkarte über DHCP nach der von ihr zu verwendenden IP-Adresse, Netzmaske, Gateway-Adresse und Boot-Server. Diese werden von einem entsprechenden DHCP-Server übermittelt, der als nächstes zu konfigurieren ist.

DHCP

Bei dem hier verwendeten DHCP-Server handelt es sich um den ISC DHCP-Server dhcp3-server. Dieser läßt sich über die Datei /etc/dhcp3/dhcpd.conf konfigurieren. Die notwendigen Einstellungen sind im einzelnen im folgenden Abschnitt aufgeführt und beschrieben.

option space pxelinux;
option pxelinux.magic      code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;

allow bootp;
allow booting;
ddns-update-style none;
option domain-name "my.org";
option domain-name-servers ns1.my.org, ns2.my.org; # 192.168.0.(2,3)
option time-servers time.my.org; # 192.168.0.7
option ntp-servers time.my.org; # 192.168.0.7
option smtp-server mail.my.org; # 192.168.0.8
option pop-server mail.my.org; # 192.168.0.8
option www-server www.my.org; # 192.168.0.9
option nntp-server news.my.org; # 192.168.0.10
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
	range 192.168.0.11 192.168.0.254;
	option broadcast-address 192.168.0.255;
	option routers gateway.my.org; # 192.168.0.1
	default-lease-time 600; # 10m
	max-lease-time 7200; # 2h
	server-name dhcp.my.org; # 192.168.0.4;
}
group {
	next-server tftp.my.org; # 192.168.0.5;
	filename "pxelinux.0";
	option root-path "/tftpboot/nfs";
	host foo {
		harware ethernet 00:11:22:33:44:55;
		fixed-address host07.my.org; # 192.168.0.11
	}
}

Linux Kernel

pxelinux.cfg/tftpboot.new

CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y

PXE

syslinux pxelinux.cfg/default bzw. pxelinux.cfg/C0A8000B

DEFAULT pxelinux.cfg/tftpboot.new vga=ext nologo=1 root=/dev/nfs nfsroot=192.168.0.11:/tftpboot/nfs ip=192.168.0.5:192.168.0.1:255.255.2555.0::eth0

TFTP

tftpd-hpa

Linux Kernel

NFS

nfs-kernel-server

Fehlerquellen

Paketfilter, TCP-Wrapper, Kernel