20. 08

Da ich hier gerade auf einer Kiste (naja, eher mehr - ein ASUS M2N32WS mit 6x500GB SATA für ein schicken Fileserver) mich mit XEN und pciback rumschlage, und das ganze mit AMD64 nicht so ganz tut, wollte ich nun mal auf i386 zurückfallen. Aber idealerweise ohne irgendwelche Daten zu verlieren, und da /boot nicht im LVM liegt, brauche ich zumindest hier ein Backup. Den Debian-Installer habe ich schon per PXE gebootet, um mir das Brennen einer CD sowie den einbau eines passenden Laufwerks zu ersparen. Aber immer die Config ändern, jenachdem, was man booten möchte, saugt irgendwie. Also muss ein Bootmenü her, welches GRML sowie die Debian-Installer wahlweise startet. Und wenn innerhalb von 20s nichts ausgewählt wird, wird von Platte gebootet. Somit kann PXE in entsprechend gesicherten Umgebungen einfach angelassen werden, ohne dass es zu Probleme führt.

Was wir brauchen:

Nun geht es ans vorbereiten, natürlich als root ;)
# mkdir /srv/tftp/
# cd /srv/tftp/
# wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.51.tar.gz
# tar xvfz syslinux-3.51.tar.gz
# cp syslinux-3.51/com32/modules/menu.c32 .
syslinux brauchen wir nur für die menu.c32, welche den notwendigen Code zum darstellen des Menüs enthält. Nun geht es ans besorgen der Debian-Installer:
# wget http://ftp.debian.org/debian/dists/etch/main/installer-amd64/current/images/netboot/netboot.tar.gz
# tar xvfz netboot.tar.gz
# rm netboot.tar.gz
# wget http://ftp.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/netboot.tar.gz
# tar xvfz netboot.tar.gz
# rm netboot.tar.gz
# rm pxelinux.0
# rm pxelinux.cfg
Jetzt, wo die Installer für die beiden Architekturen da sind (beim entpacken über die Fehlermeldung von wegen bereits existierenden symlinks nicht stören lassen, die legen wir sowieso später selbst an!), fehlt eigentlich nurnoch GRML, bestehend aus dem Inhalt der CD und eimer speziellen Initrd für den Netzwerkboot
# mkdir grml
# wget ftp://ftp.uni-erlangen.de/pub/mirrors/grml/grml_1.0.iso
# mount -o loop grml_1.0.iso /mnt/tmp/
# cd grml
# cp -r /mnt/tmp/* .
# cd ..
# umount /mnt/tmp
# wget http://grml.org/terminalserver/grml_netboot_package_1.0.tar.bz2
# tar xvfj grml_netboot_package_1.0.tar.bz2
# cp tmp/terminalserver_grub.Ln6542/grml_netboot_package_grml/tftpboot/linux26 grml/boot/     
# cp tmp/terminalserver_grub.Ln6542/grml_netboot_package_grml/tftpboot/minirt26.gz grml/boot/
# cp tmp/terminalserver_grub.Ln6542/grml_netboot_package_grml/tftpboot/memtest grml/boot/

Nun sind alle Dateien soweit vorbereitet, und nach etwas aufräumen sieht das ganze so aus:

# ls -l
drwxr-xr-x 4 root root  4096 2007 Jun 15 12:23 debian-installer/
drwxr-xr-x 4 root root  4096 2007 Aug 20 23:24 grml/
-rwxr-xr-x 1 root root 33404 2007 Aug 20 21:59 menu.c32*
Somit kann sich nun an die Konfiguration gemacht werden, benötigt wird ein tftp- Server, ein DHCP-Server sowie ein NFS-Server. In meinem Fall atftpd, dnsmasq auf dem Router sowie der normale nfs-kernel-server.Die relevanten Auszüge der Konfigurationsdateien sind die folgenden:
root@diefront:~# grep pxe /etc/dnsmasq.conf 
dhcp-boot=pxelinux.0,rechengnom,172.16.5.3
Hierdurch bekommt die Netzwerkkarte beim DHCP-Request gesagt, von welchem Rechner sie sich ihr Boot-Image ziehen soll. Die genaze Syntax lautet dhcp-boot=[net:<network-id>,]<filename>,[<servername>[,<server address>]], in diesem Fall also, dass er die Datei pxelinux.0 von meiner Workstation (rechengnom) mit der IP 172.16.5.3 besorgen soll.
# grep tftp /etc/exports /etc/inetd.conf 
/etc/exports:/srv/tftp/grml/ *(ro,no_root_squash,async,no_subtree_check)
/etc/inetd.conf:tftp		dgram	udp	wait	nobody	/usr/sbin/tcpd	/usr/sbin/in.tftpd /srv/tftp
Die erste Zeile gibt den GRML-CD-Inhalt für alle lesbar frei, durch die zweite wird der tftpd bei einer entsprechen Anfrage mit dem passenden Root-Verzeichniss gestartet. Jetzt fehlt nurnoch der pxe Loader sowie die pxe Konfiguration:
# cp tmp/terminalserver_grub.Ln6542/grml_netboot_package_grml/tftpboot/pxelinux.0
# mkdir pxelinux.cfg/
# vim pxelinux.cfg/default
Meine default-Datei kann hier runtergeladen werden, evtl. müssen noch Pfade angepasst werden. Und zu guter letzt werden noch die Debian-Installer-Menüs um eine Überschrift sowie die Option Hauptmenü ergänzt:
# echo "LABEL main-menu
MENU LABEL ^back to main menu
KERNEL menu.c32

MENU TITLE \o/ submenu - debian amd64 installer \o/" >> debian-installer/amd64/pxelinux.cfg/default 
# echo "LABEL main-menu
MENU LABEL ^back to main menu
KERNEL menu.c32

MENU TITLE \o/ submenu - debian i386 installer \o/" >> debian-installer/i386/pxelinux.cfg/default 

Die Dokumentation für das PXE-Menü befindet sich übrigens in der syslinux-3.51/README.menu, bei sonstigen Frage bitte ein Kommentar hinterlassen, ich versuche dann die Anleitung zu ergänzen. So erstmal soll sie nämlich für mich als Notizzettel dienen, wie ich das ganze hingebastelt habe ;)

Tags für diesen Artikel: ,

Trackbacks


Software-Deployment per PXE/Netboot
Software-Deployment von Hand ist grausam - da sind wir uns wohl alle einig. Früher&trade; war es durchaus etwas grausamer - ich erinnere mich grade an das Disketten-Gebirge von Novell Netware oder OS/2 zurück - doch auch heute schubsen wir immernoch ...
Weblog: Sebastian Laubscher
Aufgenommen: Mär 19, 12:53

Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)

http://plus-linux.de/wiki/PXE-Bootserver hat noch 'ne Beschreibung zu dem Thema
#1 Wonka am 21.08.2007 10:45
Sorry, aber Plus-linux.de gehört wohl nun einem DomainGrabber :|
#1.1 irgendwer am 26.07.2009 15:29
Tja, so kanns gehen. Danke für den Hinweis, ich lasse es mal stehen, da es sowieso kein Link ist.
#1.1.1 mømø am 27.07.2009 09:02

Kommentar schreiben


Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Pavatar, Gravatar, MyBlogLog, Monster ID, Pavatar Autoren-Bilder werden unterstützt.
HTML-Tags werden in ihre Entities umgewandelt.
BBCode-Formatierung erlaubt