Wer kennt das nicht als IT-Mensch bei Kunden vor Ort, man hat verschiedenste Software und Tools dabei. Hier mal eine Debian CD, hier mal einen Memory-Test oder einen Festplattentest.

Viele Kollegen und Bekannte von mir tragen eine ganze Sammlung an CDs und DVDs mit sich rum – die wenigsten brauchen 10% der Tools die sie dabei haben. Und wenn man Sie mal braucht dann hat der Server kein DVD-Laufwerk oder es ist kaputt – alles schon passiert. Dabei gibt es USB Ports mittlerweile überall, und das Booten von USB Geräten gehört zum Standard.

Die meisten Linux-Distributionen liefern sogar fertige Stick-Images mit, aber ich will ja nicht 10 Sticks mitnehmen – und was mache ich dann mit den Tools die ich auch brauche.

Also baue ich mir meinen USB Stick selbst!

Das schöne an dieser Art von Stick ist, dass man auch normale Daten drauflegen kann und diese sich mit den Bootfunktionen überhaupt nicht in die Haare kriegen.

Was braucht man dafür

  • USB Stick – je größer desto besser
  • einen Computer zum Stick vorbereiten
  • und am besten einen Zweiten zum Testen (VMs sind meistens schwierig..)
  • Syslinux (apt-get, yum oder yast kennt das sicher – ansonsten hier schauen)
  • einen Texteditor
  • die Software die ihr booten möchtet

Den Stick vorbereiten

Der Stick sollte wie ein normaler Stick formatiert sein, also eine MS-DOS Partitionstabelle, eine große Primary-Partition und am besten ein FAT32 Dateisystem.

Verzeichnisse auf dem Stick:

  • boot/  (hier wird später alles abgelegt was wir booten möchten)
  • boot/syslinux/  (Bootkonfiguration)

Und dann installieren wir Syslinux auf dem MBR des Sticks (sollte als root bzw. Administrator ausgeführt werden)

syslinux -i -d /boot /dev/sdX1

bzw.

syslinux.exe -i -d /boot X:

Wenn alles geklappt hat sollte im Verzeichnis “boot” nun eine versteckte Systemdatei namens “ldlinux.sys” zu finden sein.

Ich empfehle außerdem das Syslinux Addon “menu.c32” zu installieren, damit kriegt man eine nette Menüfunktion und muss nicht manuell eintippen was gebootet werden soll. Auf Debian/Ubuntu findet man die Datei unter “/usr/lib/syslinux/menu.c32”. Die Datei sollte unter /boot/syslinux/ auf dem Stick abgelegt.

Grundkonfiguration syslinux

Dies ist eine Beispiel Konfiguration für Syslinux mit menu.c32.

/boot/syslinux/syslinux.cfg

default menu.c32
prompt 0
menu title Mein USB Stick
LABEL local
 MENU DEFAULT
 menu label -> von Festplatte booten
 LOCALBOOT 0
LABEL seperator1
 menu label ====== Ueberschrift =======
LABEL bootoption1
 menu label Beschreibung
 kernel /boot/irgendwas
 append Parameter

Die erste Zeile “default menu.c32” sorgt dafür dass menu.c32 “gebootet” wird und dieses die Konfiguration nochmal einliest.

Untermenüs

Verschachtelte Menüs sind auch kein Problem, und schaffen gerade bei vielen Bootoptionen eine gute Übersicht.

syslinux.cfg

LABEL menu-debian
 menu label Debian -->
 kernel menu.c32
 append debian.cfg

debian.cfg 

menu title Debian Menu

LABEL back
 menu label <-- Zurueck
 kernel menu.c32
 append syslinux.cfg 

[...]

Debian Installation über den Stick

Die meisten Linux Distributionen liefern kleine Stick Images mit um ein Installationsmedium zu erstellen – dies hängt dann auch meiste von der Architektur ab auf der man installieren möchte. Im Prinzip bestehen diese Image auch nur aus einem Syslinux – und eben dem zu bootenden Linux, der Kernel und eine Initrd die dann eine Memdisk anlegt und den Installer ausführt.

Downloads für Debian gibt es auf: http://www.debian.org/distrib/netinst#verysmall

Schönerweise liefert Debian direkt vmlinuz und initrd.gz als fertigen Download, diese legen wir einfach auf dem USB Stick ab, z.B. in /boot/debian-amd64/.

Anschließend müssen wir nur noch die syslinux.cfg mit ein paar Einträgen versehen, hier mein Beispiel:

LABEL tren1
 menu label ====== Debian 6.0 =======
LABEL debi386
 menu label i386 Install
 kernel /boot/debian-i386/linux
 append priority=low initrd=/boot/debian-i386/initrd.gz --
LABEL debamd64
 menu label amd64 Install
 kernel /boot/debian-amd64/linux
 append priority=low initrd=/boot/debian-amd64/initrd.gz --
LABEL debi386res
 menu label i386 Rescue
 kernel /boot/debian-i386/linux
 append priority=low initrd=/boot/debian-i386/initrd.gz rescue/enable=true --
LABEL debamd64res
 menu label amd64 Rescue
 kernel /boot/debian-amd64/linux
 append priority=low initrd=/boot/debian-amd64/initrd.gz rescue/enable=true --

Und schon haben wir Boot Optionen für Debian, man kann sogar direkt nach dem Booten den Stick abziehen – da alles im RAM liegt.

Alles was Debian sonst noch zum installieren braucht wird einfach bei Bedarf heruntergeladen.

Das Firmwareproblem

Aber Achtung: Wenn man moderne Server mit z.B. Broadcom Netzwerkkarten installiert braucht man ggf. extra Firmware. Nachdem Debian diese ohne Netzwerkkarte nicht herunterladen kann, müssen wir sie auf dem Stick bereitstellen…

Der Debian Installer sucht dafür auf allen Medien nach einem “firmware” Verzeichnis mit Debian Paketen darin.

Herunterladen kann man die Pakete z.B. von: http://ftp.de.debian.org/debian/pool/non-free/f/firmware-nonfree/

Images booten

Syslinux kann auch Tools über Fremd-Images booten, ein Beispiel dafür ist der Drive Fitness Test von IBM bzw. Hitachi.

Dafür braucht man ein weiteres Addon von Syslinux, die “memdisk”. Auf Debian zu finden unter /usr/lib/syslinux/memdisk – einfach nach /boot/syslinux/ kopieren und verwenden.

Besorgen kann man sich das Image von: http://www.hitachigst.com/support/downloads/ (Direktlink)

Mit memdisk kann man DFT nun einfach booten:

LABEL dft
 menu label Drive Fitness Test
 kernel memdisk
 append initrd=/boot/dft.img

Memtest86+

Der Memtest86+ lässt sich direkt booten – ohne Memdisk. Die meisten Linux Distris liefern ihn mit – einfach mal einen Blick in /boot werfen oder nach dem Paket suchen.

LABEL memtest86p
 menu label Memtest86+
 kernel /boot/memtest86p

Anmerkungen

Alles in Allem ist Syslinux ein sehr schlanker, aber durchaus mächtiger Bootloader. Mit seinen Addons kann man viele Szenarien abdecken und zu einen sehr flexiblen Bootstick bauen.

Wer mehr wissen möchte sollte einen Blick in die Dokumentation von syslinux werfen, siehe Links unten.

Ansonsten kann ich nur als Tipp mitgeben: schaut euch mal die USB-Stick oder ISO Images von der Software an die ihr einbauen wollt, daraus lernt man viel und kann die Config meist 1:1 kopieren.

Übrigens: ISOLINUX ist die Schwester von SYSLINUX, aber eben für CDs und DVDs – die Konfiguration ist dabei fast die gleiche…

Weitere Links

http://www.syslinux.org/wiki/index.php/SYSLINUX
http://www.syslinux.org/wiki/index.php/Menu
http://www.syslinux.org/wiki/index.php/MEMDISK
http://www.ultimatebootcd.com/ 

Artikelbild von Nadja Herder (Kontemporat) von flickr.com (CC BY-ND)

Markus Frosch

Autor: Markus Frosch

Markus arbeitet bei NETWAYS als Principal Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.