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:
- Das GRML-ISO
- Das für das Release passende GRML-Netboot-Package
- Das AMD64-Netboot-tar
- Das i386-Netboot-tar
- Die syslinux-quellen
# 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.cfgJetzt, 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.3Hierdurch 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/tftpDie 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/defaultMeine 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 ;)

Trackbacks
Software-Deployment von Hand ist grausam - da sind wir uns wohl alle einig. Früher™ 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 ...
Aufgenommen: Mär 19, 11:53