AA_kabel.jpg

© Andreas B246hm, Fotolia.de

Startschwierigkeiten

Grub 2 justieren

Mit Grub 2 versuchen die Ubuntu-Entwickler viele Probleme des Vorgängers zu beheben. Allerdings ändert sich damit auch die Konfiguration des Bootloaders. Wir zeigen, wo's künftig langgeht und wie Sie Probleme beheben.

Bootloader helfen, ein Betriebssystem mit allen erforderlichen Optionen zu starten. Der Lilo-Nachfolger Grub macht hier keine Ausnahme: Ob Linux, Windows oder Mac OS X – mit den richtigen Kommandos schubsen Sie das gewünschte System in den Arbeitsspeicher, und los geht's.

Wenn alles so gut läuft, warum bringen Ubuntu 9.10 und Co. dann eine Neuauflage mit? Im Laufe der Zeit haben sich in Grub einige Hilfskonstruktionen angesammelt, mit denen die Entwickler neue Features implementierten. Mit Grub 2 [1] erhielt der Bootmanager nun eine klarere Struktur, einen modularen Aufbau und Support für internationale Zeichensätze (etwa für nicht-lateinische Buchstaben im Startmenü). Hinzu kommt ein grafisches Interface für den Startschirm, das sich über ein Theming-System leicht anpassen lässt.

Der Code von Grub 2 basiert auf dem mittlerweile eingestellten Pupa [2]. Derzeit befindet sich das Projekt noch ziemlich stark in Bewegung, eine Wiki-Seite [3] informiert über den aktuellen Stand der Dinge. Einiges funktioniert noch nicht, aber alle grundlegenden Routinen haben die Entwickler mittlerweile implementiert.

Etwas holperig verlief der erste Versuch, Grub 2 im großen Stil in die freie Wildbahn zu entlassen: Canonical lieferte das aktuelle Ubuntu 9.10 (Codename "Karmic Koala") und seine Derivate erstmals mit Version 1.97 Beta 4 von Grub aus [4]. Zahlreiche Anwender berichten daraufhin in verschiedenen Foren von Schwierigkeiten bis hin zu einem nicht mehr bootbaren System. Allerdings bietet das Grub-Wiki von Ubuntu [5] und ein Artikel der Ubuntuusers [6] Abhilfe für viele Probleme. Der Kasten Grub 2 in Karmic Koala fasst die wichtigsten Schritte zusammen.

Zu den Schwierigkeiten kam noch ein Problem mit dem Passwortschutz für den Bootloader: Ein Bug erlaubte es, die Sperre bereits aufzuheben, wenn ein Anwender nur den ersten Buchstaben eines Passworts richtig eingab [7]. Dieser Fehler wurde bereits behoben und eine neue Version freigegeben. Angesichts dieser gravierenden Lücken empfiehlt es sich aber, die üblichen Kanäle für Sicherheitsaktualisierungen immer gut im Blick zu behalten.

Abbildung 1

Abbildung 1: Mit Karmic Koala trat die neue Version erstmals im großen Stil in Erscheinung. Dabei kam es zu einigen Pannen, die bei den Usern einen zwiespältigen ersten Eindruck hinterließen.

Grub 2 in Karmic Koala

Mit "Karmic Koala" vollzog Canonical für Neuinstallationen den Wechsel zu Grub 2. Wenn Sie von Version 9.04 ("Jaunty Jackalope") auf Version 9.10 upgraden, bleibt hingegen aus Gründen der Kompatibilität die alte Grub-Version im Einsatz [8]. Möchten Sie unter Ubuntu 9.04 oder 9.10 zu Grub 2 wechseln, öffnen Sie ein Terminal und geben den folgenden Befehl ein:

sudo apt-get install grub2

Anschließend installieren Sie das Paket grub-pc, das als Abhängigkeit grub-common nach sich zieht. Damit haben Sie die notwendigen Dateien auf dem Rechner. Beim Installieren erscheint ein Dialog, der darauf hinweist, dass Grub Legacy (also die Vorversion) auf dem Rechner installiert sei. Sie bestätigen mit OK und wählen Yes im folgenden Dialog, um dem derzeitigen Menü einen zusätzlichen Eintrag hinzuzufügen, über den Sie aus Grub Legacy heraus Grub 2 anspringen und testen können ("Chainload").

Die Konfigurationsroutine sucht dann in der vorhandenen Grub-Konfiguration nach möglichen Startoptionen und zeigt diese zum Bearbeiten an, dann endet das Setup. Nun befinden sich beide Bootloader parallel auf Ihrem System, Sie sehen nach einem Neustart aber noch das alte Menü mit dem zusätzlichen Eintrag für Grub 2.

Wählen Sie diesen an und starten Sie aus dem Grub-2-Menü nacheinander alle Systeme. Klappt das, öffnen Sie nach dem Start von Ubuntu 9.10 wieder ein Terminal und geben dort den folgenden Befehl ein:

sudo upgrade-from-grub-legacy

Das System fragt nun nach, aus welcher Partition und von welcher Festplatte Sie den Rechner booten möchten. Wählen Sie hier unbedingt mit [Leertaste] die korrekte Bootpartition aus! Vergessen Sie das, startet das System beim nächsten Mal mit der Meldung Error 15 (das Start-Device wurde nicht gefunden) und zeigt kein Bootmenü an.

Sitzen Sie bereits vor einem System, bei dessen Start die besagte Meldung Error 15 aufleuchtet, booten Sie die Live-Version von Ubuntu. Dann mounten Sie die Root-Partition Ihrer Distribution ohne Bootloader nach /mnt, binden mit den folgenden Befehlen das Geräteverzeichnis ein und führen dann ein Change Root aus:

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo chroot /mnt

An die Stelle von /dev/sda1 setzen Sie die Partition, auf der sich das Wurzelverzeichnis Ihrer Ubuntu-Installation befindet. Anschließend rufen Sie mit dpkg-reconfigure grub-pc noch einmal die Konfiguration von Grub 2 auf und denken diesmal an die Auswahl per [Leertaste]. Haben Sie alles richtig ausgewählt, verlassen Sie mit [Strg]+[D] die Chroot-Umgebung, lösen das gemountete Dateisystem (sudo umount /mnt) und starten den Rechner neu (sudo reboot). Nun sollte alles funktionieren.

Neue Struktur

Wer früher das Startmenü auf einem Rechner durch einen zusätzlichen Eintrag erweitern oder einen bestehenden Abwandeln wollte, der lud dazu die Datei /boot/grub/menu.lst in einen Editor und passte sie seinen Wünschen an. Damit macht Grub 2 Schluss.

Zwar finden Sie nach der Installation des Bootloaders eine Datei grub.cfg im Verzeichnis /boot/grub. Sie enthält die Konfiguration, die Sie zu Fuß auch durch den Aufruf von sudo update-grub erstellen. Manuelle Änderungen an der Datei sehen die Entwickler aber nicht vor.

Generell soll in Grub 2 vieles automatisiert passieren. So suchen Hilfsskripte die Partitionen des Rechners nach bekannten Betriebssystemen ab und erstellen für diese ohne Ihr Zutun die notwendigen Einträge. In vielen Fällen reicht das völlig aus – etwa für ein Dual-Boot-System, auf dem sich Linux und Windows befinden.

Mit der neuen Version hat sich auch die Struktur der Dateien und Verzeichnisse geändert (siehe Tabelle 1). Unter /etc/grub/default legen Sie das generelle Verhalten der Software fest. Hier schalten Sie bei Bedarf über die Option GRUB_DISABLE_LINUX_UUID=true die Funktion aus, die beim Start die Angabe der zu bootenden Partition in Form einer UUID erwartet. Stattdessen arbeiten Sie mit den bekannten Gerätenamen (/dev/sdX).

Dateien und Verzeichnisse

/boot/grub/grub.cfg Zentrale, automatisch erstellte Konfigurationsdatei von Grub 2
/etc/default/grub Generelle Optionen (keine Menü-Einträge)
/etc/grub.d Verzeichnis mit den Hilfsskripten zum Erkennen der Partitionen und der darauf befindlichen Betriebssysteme. Hier erstellen Sie zusätzliche Skripte, über die Sie bei Bedarf eigene Menüeinträge ergänzen.

Für den Endanwender spielen die meisten Optionen eine eher nachgelagerte Rolle. Optimalerweise haben die Distributoren die Funktion aktiviert, mit der Sie über das Halten von [Umschalt] beim Booten das Menü auf den Schirm holen, obwohl Sie es normalerweise nicht zu Gesicht bekommen. Im Falle eines Fehlers greifen Sie dann manuell in die Konfiguration ein.

Bleibt das Hinzufügen von Menüeinträgen: Möchten Sie in einem Bootmenü nachträglich installierte Systeme ergänzen, die die Automatik nicht erkennt oder die zum Start spezielle Parameter benötigen, so müssen Sie künftig ein kleines Skript schreiben. Dazu gilt es zu verstehen, wie Grub 2 arbeitet: Beim Start führt es alle Skripte aus, die sich in /etc/grub.d/ befinden und von Ihnen mittels sudo chmod u+x replaceableSkript mit dem entsprechenden Ausführbarkeits-Bit versehen wurden. In der Standardeinstellung haben die System-Skripte bereits die richtigen Rechte.

Ziffern im Dateinamen sorgen für die korrekte Reihenfolge beim Ausführen. Listing 1 zeigt den Inhalt eines individuellen Startskriptes. Damit booten Sie die System Rescue CD von der Festplatte. Es handelt sich um ein Here-Dokument, mit dem Sie (ähnlich wie mit Echo) eine Zeichenkette ausgeben oder per Umleitung in eine Datei schreiben.

Listing 1

echo "Angepasster Eintrag für den Start einer Rettungs-CD als Image" >&2
cat << EOF
menuentry "Starte System Rescue CD von der Festplatte" {
        set root=(hd0,10)
        linux   /sysrcd/rescuecd subdir=sysrcd setkmap=de
        initrd  /sysrcd/initram.igz
}
EOF

Mit dem Befehl set root=(hd0,10) sorgen Sie dafür, dass die zehnte Partition auf der ersten Platte als Root-Dateisystem fungiert. Das Schema zum Nummerieren der Partitionen startet in der neuen Version von Grub hingegen bei 1, anstatt wie bei Vorversion bei 0. Über die Kommandos linux und initrd setzen Sie die Pfade zum Kernel und der Initial RAM Disk, wobei der Kernel noch zwei Parameter mit auf den Weg bekommt. Bei Grub Legacy, der Vorversion, gab es ein reserviertes Wort root. Das haben die Entwickler nun so abgeändert, dass es sich dabei um eine Variable handelt. Die vollständige Liste der Grub-2-Kommandos finden Sie im Netz [9].

Optisch aufgepeppt

Beim Booten präsentiert sich das Startmenü normalerweise etwas dröge im Zwei-Farben-Look. Mit ein paar einfachen Handgriffen bringen Sie etwas Farbe ins Spiel. Grub 2 akzeptiert als Hintergrund für das Startmenü Bilder im PNG-, TGA- und JPG-Format. Diese kopieren Sie am besten in einer Größe von 640x400 Pixeln in den Ordner /usr/share/images/grub/, den Sie über sudo mkdir /usr/share/images/grub anlegen. Vorpaketierte Bilder landen mittels sudo apt-get install grub2-splashimages auf der Festplatte.

Nun teilen Sie dem System noch mit, welches von den Bildern Sie verwenden möchten. Dazu nutzen Sie im Ordner /etc/grub.d/ eine Startdatei mit dem Namen 05_debian_theme und öffnen Sie mit administrativen Rechten in einem Editor. Dann passen Sie die Zeile 16 gemäß Listing 2 an, wenn das Bild flugzeug.jpg heißt und im Ordner /usr/share/images/grub liegt. Vergessen Sie anschließend nicht, den Befehl sudo update-grub auszuführen, um die Änderungen anzuwenden. Das Ergebnis zeigt Abbildung 2.

Abbildung 2

Abbildung 2: Mit wenigen Handgriffen versehen Sie das Bootmenü mit einem Hintergrundbild.

Listing 2

#!/bin/bash -e
source /usr/lib/grub/grub-mkconfig_lib
set_mono_theme()
{
  cat << EOF
set menu_color_normal=white/black
set menu_color_highlight=black/white
EOF
}
# check for usable backgrounds
use_bg=false
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
  for i in {/boot/grub,/usr/share/images/grub}/flugzeug.{png,tga,jpg} ; do
    if is_path_readable_by_grub $i ; then
      bg=$i

Glossar

Lilo

Linux Loader. Standard-Bootloader, bevor Grub 2002 in vielen Distributionen diese Rolle übernahm. Verfügt im Gegensatz zu Grub über keine Dateisystemtreiber und greift nur auf vorher festgelegte Adressen zu.

Change Root

kurz Chroot, Befehl, um kurzzeitig das Rootverzeichnis zu ändern. Dadurch lassen sich per Mount-Befehl eingehängte System wie eigenständige Installationen bedienen.

UUID

Universally Unique Identifier, ein Standard für Identifikatoren. Eine UUID besteht aus einer 16-Byte-Zahl, die in der Regel aus fünf Gruppen hexadezimaler Ziffern besteht. Aufgrund der möglichen Vielzahl an Ziffernvariationen tendiert die Wahrscheinlichkeit von doppelten UUIDs gegen Null, was ein zentrale Vergabe unnötig macht.

Here-Dokument

Vereinfacht die Ausgabe von mehrzeiligem Text. Dabei definieren Sie einen Marker (als Konvention oft EOF, End of file), bis zu dem alle Zeilen als Here-Dokument gelten.

Einem Freund empfehlen