Mit Grub vom Netz booten (Grub)
Nicht in allen Netzwerk-Umgebungen findet man die für PXE notwendige DHCP-Infrastruktur. Um dennoch Rechner vom Netz installieren zu können kann grub mit statischen Netzwerkeinstellungen hilfreich sein.
Grub übersetzen
Nach dem Entpacken wird Grub wie die meisten Linux-Pakete übersetzt.
Dabei ist darauf zu achten, dass der Diskless-Support (--enable-diskless)
und die Unterstützung für die benötigte Netzwerkkarte (im Beispiel
eine Karte von 3COM:
--enable-3c90x) aktiviert wurde. Eine Liste unterstützter Netzwerkkarten
erhält man mit ./configure --help.
./configure --enable-diskless --enable-3c90x make
Die dadurch erzeigten Dateien stage1/stage1 und stage2/stage2
beinhalten den eigentlichen Boot-Code (1. und 2. Stufe) und werden im nächsten Schritt
auf die Floppy kopiert.
Boot Floppy erstellen
Mit dem folgenden Skript sollte es (Schreibrechte auf /dev/fd0
vorausgesetzt) auch einem normalen Benutzer möglich sein diese Boot-Floppy zu
erstellen. Dazu wird weitestgehend auf die Mtools zurückgegriffen.
#!/bin/sh
echo -n "Formatting disk ..."
mformat a: || echo " failed" && echo " ok"
echo -n "Copying files ..."
mmd a:boot
(
mcopy menu.lst a:boot/menu.lst &&
mcopy stage1/stage1 a:boot &&
mcopy stage2/stage2 a:boot
) || echo " failed" && echo " ok"
echo -n "Running grub ..."
echo "install (fd0)/boot/stage1 (fd0) (fd0)/boot/stage2 (fd0)/boot/menu" | \
/sbin/grub --batch >& /dev/null || echo " failed" && echo " ok"
Boot Menü
Im folgenden findet sich ein Beispiel für ein Grub-Menu. Darin enthalten sind 4 Einträge:
- Local bootet von der Festplatte
- Network bootet per TFTP vom angegebenen Server
- Autoinstall bootet per TFTP und installiert per NFS vom angegebenen Server
- Network (DHCP) holt seine Netzwerkdaten per DHCP und bootet anschließend mit den so erhaltenen Einstellungen
Die folgenden zusätzlichen Kernel-Parameter sind SuSE-spezifisch und sorgen für eine Vorkonfiguration des Netzwerks.
Bezeichner in %-Zeichen müssen durch passende Werte ausgetauscht werden, bevor man sie unter /boot/menu.lst auf die Floppy kopiert.
%ip%: IP-Adresse des Clients (z.B. 192.168.0.20)%netmask%: Netzmask des Clients (z.B. 255.255.255.0)%gateway%: Gateway des Clients (z.B. 192.168.0.1)%server%: IP-Adresse des TFTP/NFS Servers (z.B. 192.168.0.2)%dns%: Nameserver des Clients (optional, z.B. 192.168.0.5)
timeout 30 default 0 fallback 1 title Local rootnoverify (0x80) chainloader +1 boot title Network ifconfig --server=%server% --gateway=%gateway% --mask=%netmask% --address=%ip% root (nd) kernel /linux initrd /initrd boot title Autoinstall ifconfig --server=%server% --gateway=%gateway% --mask=%netmask% --address=%ip% root (nd) kernel /linux netdevice=eth0 server=%server% ip=%ip% netmask=%netmask% \ gateway=%gateway% nameserver=%dns% ramdisk_size=65536 \ autoyast=floppy://autoyast.xml install=nfs://%server%/proj.stand/pfad_zur_distribution/ initrd /initrd boot title Network (DHCP) dhcp root (nd) kernel /linux ramdisk_size=65536 autoyast=tftp://%server%/yast2/ \ install=nfs://%server%/proj.stand/suse/pfad_zur_distribution initrd /initrd boot
Die Einträge root (nd) bedeuten, dass vom Netz, sprich per TFTP,
(nd = net device) gebootet werden soll. Danach folgen die Namen des Kernels und der Initial
Ramdisk (Im Beispiel: /linux und /initrd, diese Pfade sind
relativ zum Root-Verzeichnis des TFTP-Servers).
Server
Auf Serverseite müssen jetzt nur noch ein TFTP installiert werden. Dafür stehen bei den meisten Distributionen zwei Möglichkeiten zur Auswahl:
Eine Standalone-Variante (meist atftp) oder alternativ eine Variante, die man über den Internet Super Server (x)inetd startet.
Der inetd TFTP-Server benötigt einen Eintrag in der /etc/inetd.conf:
tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -v -s /tftpboot
Und der NFS-Server muss das benötigte Verzeichnis natürlich in der /etc/exports freigeben:
/proj.stand/suse *.mydomain.de(ro)
Das wars auch schon ...



