Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Einleitung
TEIL I: Einstieg in Linux
2 Die Installation
3 Erste Schritte
4 Linux als Workstation für Einsteiger
TEIL II: Grundlagen
5 Kernel
6 Grundlagen aus Anwendersicht
TEIL III: Die Shell
7 Die Shell
8 Reguläre Ausdrücke
9 Konsolentools
10 Die Editoren
11 Shellskriptprogrammierung mit der bash
12 Die C-Shell
TEIL IV: System- & Netzwerkadministration
13 Benutzerverwaltung
14 Grundlegende Verwaltungsaufgaben
15 Netzwerkgrundlagen
16 Anwendersoftware für das Netzwerk
17 Netzwerkdienste
18 Mailserver unter Linux
19 LAMP & Co.
20 DNS-Server
21 Secure Shell
TEIL V: Die grafische Oberfläche
22 Die grafische Oberfläche
23 Window-Manager und Desktops
24 X11-Programme
25 Multimedia und Spiele
TEIL VI: Systeminterna
26 Prozesse und IPC
27 Bootstrap und Shutdown
28 Dateisysteme
29 Virtualisierung und Emulatoren
TEIL VII: Programmierung und Sicherheit
30 Softwareentwicklung
31 Crashkurs in C und Perl
32 Einführung in Computersicherheit
33 Netzwerksicherheit überwachen
TEIL VIII: Anhang
A Lösungen zu den einzelnen Aufgaben
B Kommandoreferenz
C X11-InputDevices
D MBR
E Buch-DVDs
F Glossar
G Literatur
Stichwort
Ihre Meinung?

Spacer
Linux von Johannes Plötner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
Rheinwerk Computing
1282 S., 5., aktualisierte Auflage 2012, geb., mit 2 DVDs
49,90 Euro, ISBN 978-3-8362-1822-1
Pfeil 27 Bootstrap und Shutdown
Pfeil 27.1 Was ist der Bootstrap-Vorgang?
Pfeil 27.2 Hardware-Booten
Pfeil 27.3 Bootcode
Pfeil 27.3.1 Die Partitionstabelle
Pfeil 27.3.2 Ein Beispiel
Pfeil 27.4 Bootmanager
Pfeil 27.4.1 GRUB (alte Version)
Pfeil 27.4.2 GRUB Version 2
Pfeil 27.4.3 LILO
Pfeil 27.5 Startphase des Kernels
Pfeil 27.6 init
Pfeil 27.6.1 Linux und init
Pfeil 27.6.2 BSD und init
Pfeil 27.7 Upstart
Pfeil 27.8 getty
Pfeil 27.9 login
Pfeil 27.9.1 Shellstart
Pfeil 27.9.2 Beenden einer Terminal-Sitzung
Pfeil 27.10 System-Shutdown
Pfeil 27.10.1 halt, reboot und poweroff
Pfeil 27.10.2 shutdown
Pfeil 27.11 Zusammenfassung
Pfeil 27.12 Aufgaben

Rheinwerk Computing - Zum Seitenanfang

27.4 BootmanagerZur nächsten Überschrift

In diesem Abschnitt soll es um die Bootmanager gehen, mit denen man Linux (und andere Betriebssysteme) hochfahren kann. Bootloader mit einem Auswahlmenü werden in der Regel im Master Boot Record (MBR) platziert [Fn. Theoretisch kann man einen Bootloader auch in den ersten Sektor einer Partition stecken, was jedoch nur selten sinnvoll ist.] und dazu verwendet, beim Start des Computers eines von mehreren installierten Betriebssystemen zu starten.

Typische Bootmanager sind GAG und die beiden besonders populären Vertreter LILO und GRUB. Viele Distributionen sind mittlerweile vom »alten« Linux Loader (LILO) zu GRUB(2) gewechselt, doch es gibt auch einige, etwa Slackware-Linux, die noch immer den LILO verwenden. Wir werden in diesem Buch daher beide Bootmanager besprechen.


Rheinwerk Computing - Zum Seitenanfang

27.4.1 GRUB (alte Version)Zur nächsten ÜberschriftZur vorigen Überschrift

Die großen Linux-Distributionen wie Debian, Ubuntu und openSUSE setzen allesamt GRUB als Bootmanager ein. Die Software ist so komfortabel, dass man sich in der Regel um nichts kümmern muss. Modifiziert man die GRUB-Konfiguration jedoch von Hand, sind folgende Schritte notwendig:

  1. In den MBR installieren
  2. Möchte man den Bootmanager in den Bootsektor der ersten Festplatte installieren, ruft man einfach grub-install mit der Gerätedatei der entsprechenden Festplatte als Argument auf:

    Listing 27.1 grub-install

    # grub-install /dev/hda
    Installation finished. No error reported.
    [...]
    (hd0) /dev/hda

    Neuer Kernel?

  3. Die Kernel-Liste updaten
  4. Im Normalfall erkennt GRUB alle installierten Kernel und alle weiteren Betriebssysteme auf der Platte automatisch. Um diese Erkennung nach der Installation eines neuen Kernels jedoch manuell noch einmal anzustoßen, genügt folgender Aufruf:

    Listing 27.2 update-grub

    # update-grub
    Searching for GRUB installation directory ... \
    found: /boot/grub
    Testing for an existing GRUB menu.list file ... \
    found: /boot/grub/menu.lst
    Searching for splash image ... none found, skipping
    Found kernel: /boot/vmlinuz-2.6.14-2-686
    Found kernel: /boot/vmlinuz-2.6.8-2-386
    Updating /boot/grub/menu.lst ... done

    Dieses Skript wurde für Debian entwickelt, ist aber auch für andere Distributionen verfügbar. Zum Standardumfang des GNU-GRUB-Projekts gehört es jedoch leider nicht.

Die Datei /boot/grub/menu.lst

Sie kommen also möglicherweise in die Verlegenheit, die menu.lst selbst editieren zu müssen. Da dies bei der Benutzung von update-grub automatisch geschieht, sollte man nur die Direktiven ändern, die einfach kommentiert sind. Doppelte Kommentare nach zwei Rauten sind dabei erst normale Kommentare, und alles, was nicht kommentiert ist, wird automatisch erstellt. Möchte man zum Beispiel die allen Kerneln gemeinsamen Bootoptionen ändern, editiert man folgende Zeile:

Listing 27.3 menu.lst mit update-grub

## e.g. kopt=root=/dev/hda1 ro
## kopt_2_6_8=root=/dev/hdc1 ro
## kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=/dev/hda5 ro

Für GRUB ist diese Zeile ein Kommentar, für update-grub jedoch nicht. Darum werden nach einem erneuten Aufruf des Skripts auch alle Einträge des Kernels automatisch angepasst. Verzichtet man selbst oder eben die Distribution der Wahl auf dieses Skript, so muss man für einen neuen Kernel einen neuen Eintrag nach folgendem Beispiel einfügen:

Listing 27.4 Ein Eintrag im Bootmenü

title    Debian GNU/Linux, kernel 2.6.8-2-386
root (hd0,1)
kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.8-2-386
savedefault
boot

Dieses Beispiel ist weitestgehend selbsterklärend; einzig die Wurzel des Dateisystems muss dem Kernel wie auch GRUB extra mit auf den Weg gegeben werden. Schließlich befindet sich die Datei /etc/fstab mit diesen Informationen ja auf der Partition, die man einbinden will.

[»]Wenn Sie beim Booten etwas in diesen Einstellungen ändern wollen, drücken Sie einfach die Taste E. GRUB erlaubt Ihnen dann, den entsprechenden Eintrag quasi zur Laufzeit anzupassen. Sollen die Änderungen jedoch dauerhaft gespeichert werden, müssen Sie sie noch in der Datei menu.lst fixieren.

Wenn Sie mehr über GRUB erfahren möchten, sei Ihnen die Manpage sowie die Homepage des Projekts auf gnu.org ans Herz gelegt.


Rheinwerk Computing - Zum Seitenanfang

27.4.2 GRUB Version 2Zur nächsten ÜberschriftZur vorigen Überschrift

Gegenüber der Vorgängerversion bietet GRUB2 einige Vorteile, darunter die Unterstützung für weitere Dateisystemtypen und UUIDs (also die neuen Identifikationsnummern für Dateisysteme). Bei neueren Versionen von Ubuntu Linux sowie einigen weiteren Distributionen ist GRUB2 mittlerweile der Standard-Bootloader. Die Konfiguration von GRUB2 erfolgt über die Datei /etc/default/grub, die Sie im folgenden Listing sehen.

Listing 27.5 Die Datei /etc/default/grub unter Debian 6

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

GRUB_DEFAULT=0 legt fest, dass der erste (0.) Booteintrag standardmäßig im GRUB-Menü ausgewählt werden soll. Ansteller einer Zahl kann auch ein String für die Bezeichnung des jeweiligen Eintrags oder das Wort »saved« angegeben werden, womit der zuletzt gebootete Eintrag automatisch beim nächsten Boot vorselektiert wird. Um »saved« verwenden zu können, sollte zudem GRUB_SAVEDEFAULT=true gesetzt werden, was bewirkt, dass sich GRUB2 auch tatsächlich den zuletzt gebooteten Eintrag abspeichert.

GRUB_TIMEOUT=5 legt die Zeitspanne (in Sekunden) fest, die gewartet werden soll, bis der Standardeintrag gebootet wird. Wird der Timeout-Wert auf 0 gesetzt, wird sofort gebootet, ohne dem Benutzer eine Auswahlmöglichkeit zu bieten. Falls Sie Ihrer Linux-Distribution einen eigenen Namen vergeben möchten, können Sie zudem die Zeile GRUB_DISTRIBUTOR anpassen. Die beiden Zeilen GRUB_CMDLINE_LINUX und GRUB_CMDLINE_LINUX_DEFAULT übergeben Parameter an den Kernel, wobei beide Variablen für den normalen Bootmodus gelten, aber nur GRUB_CMDLINE_LINUX auch für den Recovery-Bootmodus verwendet wird.

Die Konfiguration der Booteinträge und des Bootscreens erfolgt über die Dateien im Verzeichnis /etc/grub.d, wobei gilt, dass die Skripte mit dem niedrigsten Nummernprefix zuerst ausgeführt werden. Es handelt sich hierbei um relativ komplexe Shellskripte, weshalb wir ihre Innereien hier nicht im Einzelnen besprechen können. Mit Hilfe des Wissens aus den vorherigen Kapiteln zur Shell und zur Shellskriptprogrammierung werden Sie allerdings in der Lage sein, sie zu verstehen.

Listing 27.6 /etc/grub.d

/etc/grub.d$ /bin/ls
00_header 10_linux 30_os-prober 41_custom
05_debian_theme 20_linux_xen 40_custom README

Das Programm grub-mkconfig verwendet die Dateien in /etc/grub.d und die Einstellungen, die in /etc/default/grub angegeben wurden, um daraus die eigentliche Konfigurationsdatei für GRUB2, nämlich /boot/grub/grub.cfg, zu generieren. In der Regel brauchen Sie dazu aber nur update-grub aufzurufen, welches grub-mkconfig von sich aus aufruft. [Fn. Im Detail ruft update-grub genau grub-mkconfig -o /boot/grub/grub.cfg auf.] In der grub.cfg finden Sie anschließend auch die zur Verfügung stehenden Booteinträge und weiteren Konfigurationswerte für GRUB2 (etwa das Laden von Video-Modulen für die grafische Ausgabe oder die Konfiguration von Farbeinstellungen). Wenn Sie sich die Datei anschauen, werden Sie feststellen, dass der Aufbau gemäß der durchnummerierten Skripte in /etc/grub.d gestaltet ist. Die weniger wichtigen Designparameter werden an dieser Stelle nicht besprochen und sind zum Großteil selbst erklärend, doch ist es wichtig und interessant, einen Menüeintrag zu verstehen. Ein solcher Menüeintrag in der Datei sieht folgendermaßen aus (die Backslash-Zeichen signalisieren einen Umbruch, den wir zur besseren Lesbarkeit eingefügt haben und der in der Originaldatei nicht vorkam):

Listing 27.7 Auszug aus der grub.cfg

menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686'\
--class debian --class gnu-linux --class gnu \
--class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set \
fbe90871-9893-4899-aefb-4e6377e114bc
echo 'Loading Linux 2.6.32-5-686 ...'
linux /boot/vmlinuz-2.6.32-5-686 \
root=UUID=fbe90871-9893-4899-aefb-4e6377e114bc \
ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-5-686
}

Um den Eintrag zu verstehen, sollten wir zunächst den generellen Aufbau eines Menüeintrags betrachten:

Listing 27.8 Der Aufbau von menuentry

menuentry Titel [--class=Klasse ..] [--users=Benutzer ..] \
[--hotkey=Taste] { Konfigurationsbefehle }

Die Angabe eines Titels für den Menüeintrag ist selbsterklärend. Klassen dienen der Gruppierung von Einträgen und sind optional, sie können für unterschiedliche Darstellungen von Menüeinträgen verwendet werden. Mit Benutzerzuordnungen (ebenfalls optional) kann der Zugriff auf den Menüeintrag bestimmten Benutzern vorbehalten werden (diese müssen allerdings erst in GRUB angelegt werden). Mit hotkey lässt sich dem Eintrag eine Taste zuordnen. Wird diese gedrückt, wird der entsprechende Eintrag ausgewählt. Auch für Hotkeys gilt: Es ist kein Muss, sie zu vergeben.

Betrachten wir nun die restlichen Komponenten des menuentry-Eintrags. insmod lädt ein dynamisches GRUB-Modul in den Speicher, während set Umgebungsvariablen setzt. Mit search werden bootbare Partitionen gesucht, wobei --set der Variable root das erste gefundene Gerät zuweist. Alternativ können mit set auch andere Variablen gesetzt werden, wobei diese dann direkt angegeben werden müssen: --set=Variable. Mit --no-floppy wird verhindert, das Diskettenlaufwerke durchsucht werden. --fs-uuid bewirkt, dass search nach einer bestimmten UUID (nämlich der am Zeilenende angegebenen) sucht.

echo erzeugt wie in der Shell eine Ausgabe, und linux bewirkt, dass ein Linux-Kernel gestartet werden soll. Die Angabe des Bootkernels und der zu verwendenen UUID (die zuvor über search ermitelt wurde, und weitere Bootparameter für den Kernel können dort angeben werden. Mit initrd wird hingegen die RAM-Disk spezifiziert, die verwendet werden soll.


Rheinwerk Computing - Zum Seitenanfang

27.4.3 LILOZur vorigen Überschrift

Der ältere und etwas weniger komfortable LILO (Linux Loader) wird über die Datei /etc/lilo.conf konfiguriert. Diese Datei wird von den meisten Distributionen automatisch durch Tools wie liloconfig erzeugt. Mithilfe dieser Datei wird schließlich auch die Installation des LILO im MBR vollzogen. Die bisher im LILO konfigurierten Betriebssysteme kann man mit dem Tool /sbin/lilo abfragen.

Listing 27.9 lilo -q

# lilo -q
Slackware102 *
Windows2000

Betrachten wir einmal eine Beispielkonfiguration, um die einzelnen Konfigurationsoptionen zu verstehen.

Listing 27.10 /etc/lilo.conf

boot = /dev/hda
delay = 10

prompt

lba32

menu-title="Bootmenue Host yorick.sun"

# Linux-Partition
image = /boot/vmlinux
root = /dev/hda3
label = Slackware102
read-only

# Windows-Partition
other = /dev/hda1
table = /dev/hda
label = Windows2000

Mit dem Schlüsselwort boot gibt man die Festplatte an, die den Bootsektor enthält – in diesem Fall also /dev/hda, die erste IDE-Festplatte. Die Zeit, die LILO warten soll, bis das Standardbetriebssystem gebootet wird, wird via delay angegeben. Durch prompt erscheint die Eingabemöglichkeit, in der das Bootlabel angegeben werden kann, das LILO laden soll.

Falls Sie jenseits der 1024-Zylinder-Grenze booten möchten, so müssen Sie LILO bei der Konfiguration noch das Schlüsselwort lba32 mit auf den Weg geben, um den Bootvorgang in diesem Fall überhaupt zu ermöglichen. Via menu-title wird, wie Sie vielleicht schon ahnen, der Titel des LILO-Menüs angepasst.

Mit image geben Sie an, wo sich der Linux-Kernel befindet. Da dies allein aber noch nicht ausreicht, weil eine Datei auf mehreren Partitionen vorhanden sein könnte, müssen Sie auch noch angeben, von welcher Partition der Kernel geladen werden soll – hierzu nutzen Sie root=xxx. Die Option label verpasst dem Eintrag im Bootmenü einen Namen.

Unter Linux wird das Root-Dateisystem aus Sicherheitsgründen zunächst nur mit Leserechten gemountet, daher das Schlüsselwort read-only. Später wird es dann mit Schreibzugriff gemountet. Sie können mit read-write aber auch erzwingen, dass es gleich während des Bootvorgangs mit Schreibzugriff gemountet wird.

Um ein System, bei dem es sich nicht um Linux handelt, als Booteintrag zu verwenden, gibt man dies durch other an. Mit table wird noch spezifiziert, wo die Partitionstabelle liegt.

LILO installieren

Um den LILO im Bootsektor zu installieren, rufen Sie /sbin/lilo auf.

Listing 27.11 LILO installieren

# /sbin/lilo
Added Slackware102 *
Added Windows2000

[»]Um den LILO wieder aus dem Bootsektor zu entfernen, rufen Sie lilo -u auf.


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Linux Handbuch






 Linux Handbuch


Zum Katalog: Linux Server






 Linux Server


Zum Katalog: Raspberry Pi






 Raspberry Pi


Zum Katalog: Ubuntu 14.04 LTS






 Ubuntu 14.04 LTS


Zum Katalog: Roboter bauen mit Arduino






 Roboter bauen
 mit Arduino


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de