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

Inhaltsverzeichnis
Vorwort
Über die Autoren
Über dieses Buch
Linux vs. BSD
1 Der Kernel
2 Die Grundlagen aus Anwendersicht
3 Die Shell
4 Reguläre Ausdrücke
5 Tools zur Dateibearbeitung
6 Die Editoren
7 Shellskriptprogrammierung
8 Benutzerverwaltung
9 Grundlegende Verwaltungsaufgaben
10 Netzwerk-Grundlagen
11 Anwendersoftware für das Netzwerk
12 Netzwerkdienste
13 Mailserver unter Linux
14 LAMP
15 DNS-Server
16 Secure Shell
17 Die grafische Oberfläche
18 Window-Manager und Desktops
19 X11-Programme
20 Multimedia und Spiele
21 Softwareentwicklung
22 Crashkurs in C und Perl
23 Sicherheit
24 Prozesse und IPC
25 Bootstrap und Shutdown
26 Dateisysteme
27 Virtualisierung und Emulatoren
A Die Installation
B Lösungen zu den einzelnen Aufgaben
C Kommandoreferenz
D X11-InputDevices
E MBR
F Die Buch-DVDs
G Glossar
H Literatur

Download:
- ZIP, ca. 6,3 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Plötner, Steffen Wendzel
Das distributionsunabhängige Handbuch
Buch: Linux

Linux
2., aktualisierte und erweiterte Auflage
1119 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1090-4
gp 9 Grundlegende Verwaltungsaufgaben
  gp 9.1 Rechteverwaltung
    gp 9.1.1 chmod
    gp 9.1.2 chown
    gp 9.1.3 Erweiterte Rechte
    gp 9.1.4 umask
    gp 9.1.5 Access Control Lists
  gp 9.2 Softwareinstallation
    gp 9.2.1 Paketverwaltung und Ports
    gp 9.2.2 APT – Advanced Packaging Tool
    gp 9.2.3 Pakete in Handarbeit: dpkg und rpm
    gp 9.2.4 .tgz Packages unter Slackware
    gp 9.2.5 Das Gentoo Portage System
    gp 9.2.6 BSD-Ports
    gp 9.2.7 Softwareinstallation ohne Pakete
  gp 9.3 Tätigkeiten automatisieren
    gp 9.3.1 Skripts
    gp 9.3.2 Cronjobs
    gp 9.3.3 Punktgenau mit at
  gp 9.4 Logging
    gp 9.4.1 Die Logdateien
    gp 9.4.2 Der syslogd
    gp 9.4.3 logrotate
    gp 9.4.4 logcheck
  gp 9.5 Dateisystemverwaltung
    gp 9.5.1 Die /etc/fstab
    gp 9.5.2 Das mount-Tool
    gp 9.5.3 Platz beschränken: Quotas
    gp 9.5.4 du und df
    gp 9.5.5 SoftRAID und LVM
    gp 9.5.6 Backups, Archive & Co.
  gp 9.6 Kernel kompilieren
    gp 9.6.1 Die Kernel-Quellen besorgen
    gp 9.6.2 Die Konfiguration
    gp 9.6.3 Den Kernel übersetzen
    gp 9.6.4 Den Bootloader anpassen
    gp 9.6.5 BSD-Kernel kompilieren
  gp 9.7 Linux' SysRq
    gp 9.7.1 Aktivierung von SysRq
    gp 9.7.2 Tastenkombinationen
  gp 9.8 Lokalisierung
    gp 9.8.1 Die Tastaturbelegung
    gp 9.8.2 Die deutsche Sprache
    gp 9.8.3 Das Einstellen der Uhr
    gp 9.8.4 Texte von anderen Plattformen
  gp 9.9 Zusammenfassung
  gp 9.10 Aufgaben


Galileo Computing

9.6 Kernel kompilieren  downtop

Die Königsdisziplin im Aufgabenspektrum eines Linux-Admins ist sicherlich die Kompilierung eines eigenen Kernels. Linux ist bekanntlich Open-Source und somit in Form von Quellcode verfügbar. Das impliziert natürlich, dass man diese Quellen auch selbst in Maschinencode übersetzen kann.

Die erste Frage stellt sich jedoch mit dem »Warum«. In der Tat ist es für die meisten, auch professionellen Linux-Benutzer nicht notwendig, sich einen eigenen Kernel zu »backen«. Schließlich ist der Mensch faul, und die Standard-Kernel der gängigen Distributionen bieten in der Regel alle denkbaren Features als Modul und werden dazu noch regelmäßig aktualisiert.

Etwas anders sieht das Ganze natürlich bei Administratoren aus, die ein bestimmtes Feature unbedingt benötigen, das eben so noch nicht in den Kernel integriert ist. Meistens hat man dann einen Patch für die aktuellen Kernel-Sourcen, den man recht einfach mit dem Programm patch, der Option »-p0« oder – je nachdem, wie der Patch erstellt wurde – mit »-p1« als Argument sowie der Patch-Datei als Input einspielt.


Galileo Computing

9.6.1 Die Kernel-Quellen besorgen  downtop

Bevor man aber einen Patch anwenden kann, sollte man sich erst einmal die aktuellen Kernel-Quellen besorgen. Die meisten Distributionen bieten dabei auch spezielle »kernel-source«-Pakete an, die je nach Einsatzgebiet den »nackten« Originalquelldateien vorgezogen werden sollten. Schließlich bauen einige Distributionen teilweise auch selbst schon diverse Verbesserungen in Form von Patches in die Quellen ein, und Verbesserungen sind schließlich immer gut.

Die aktuelle Version

Die aktuelle Linux-Version erhält man auf der Kommandozeile am einfachsten mit dem Tool finger. Natürlich könnte man auch direkt auf die Webseite http://www.kernel.org gehen und dort gleich das entsprechende Paket herunterladen, allerdings hat finger deutlich mehr Stil:

$ finger @kernel.org 
[kernel.org] 
The latest stable version of the Linux kernel is: 
  2.6.12.3 
The latest prepatch for the stable Linux kernel tree 
  is: 2.6.13-rc5 
The latest snapshot for the stable Linux kernel tree 
  is: 2.6.12-git10 
The latest 2.4 version of the Linux kernel is: 
  2.4.31 
...

Listing 9.89    Was ist die aktuelle Version?

Nachdem man also die Sourcen entweder von der Webseite oder direkt per FTP von ftp.kernel.org gezogen hat, sollte man das Archiv nach /usr/src entpacken. Nutzt man ein Paket der hauseigenen Distribution, so wird nach dessen Installation sich hier schon entweder das entpackte Verzeichnis samt Quellen oder noch ein Source-Archiv finden.

In jedem Fall sollte man einen Link von /usr/src/linux nach /usr/src/linux- 2.6.XX anlegen. Das erledigt das ln-Programm für uns:

# cd /usr/src/ 
# tar -xjvf linux-2.6.XX.tar.bz2 
# ls 
linux-2.6.XX/  linux-2.6.XX.tar.bz2 
# ln -s linux-2.6.XX/ linux

Listing 9.90    Die Arena vorbereiten

Eventuell muss man einen alten Link vorher per rm löschen, bevor man den neuen anlegen kann. Im Anschluss zeigt jedenfalls das Verzeichnis linux/ auf das Verzeichnis linux-2.6.XX/ – das ist nicht nur so üblich, sondern wird teilweise von einigen Programmen vorausgesetzt. Schließlich könnte man mehrere Linux-Versionen unter /usr/src entpackt haben, und ein Skript kann ja schlecht raten, welches nun die von uns als »aktuell« betrachtete Version ist. <Dabei muss es sich schließlich nicht notwendigerweise um die höchste Versionsnummer handeln.>


Galileo Computing

9.6.2 Die Konfiguration  downtop

Die Konfiguration ist leider zu komplex, als dass sie hier umfassend erläutert werden könnte. Wenn man beispielsweise mit

# cd linux/ 
# make menuconfig

Listing 9.91    Die Quellen konfigurieren

die Konfiguration über eine Textoberfläche oder mit »make xconfig« <Achtung: Sowohl »xconfig« als auch »menuconfig« benötigen diverse Bibliotheken in der Development-Version.

Entsprechend müssen also höchstwahrscheinlich Pakete ähnlich wie »linbncurses-dev« oder »libqt-dev« per Hand nachinstalliert werden.> die Konfiguration über ein grafisches Programm wählt, bekommt man in einer Reihe von Sektionen und Untersektionen verschiedenste Optionen zur Wahl gestellt. Die meisten lassen sich statisch in den Kernel einkompilieren, als Modul übersetzen oder deaktivieren. Einige Optionen lassen sich auch einfach nur »an-« oder »ausschalten«.

Ebenfalls gibt es zu jedem Punkt eine recht umfangreiche Hilfe, von der man beim ersten selbstgebauten Kernel reichlich Gebrauch machen sollte.

Unverzichtbar erweist sich dabei die Kenntnis der eigenen Hardware. Vor allem die Bezeichnung der Chipsätze ist dabei interessant und wird oft gefordert. Entgegen mancher Meinungen sollte man dabei auch alles, was »Treiber« ist, als Modul kompilieren, da so bei einem Problem die Chancen gut sind, nur den Treiber und nicht gleich den ganzen Kernel beim Absturz beobachten zu müssen.


Galileo Computing

9.6.3 Den Kernel übersetzen  downtop

Beim Übersetzen des Kernels hilft wiederum das Programm make. Die Übersetzung dauert je nach Konfiguration und aktivierter Features recht lange, sodass man sich währenddessen durchaus mal wieder einen Kaffee holen kann. Tee geht auch.

# make all 
... 
# make modules_install 
...

Listing 9.92    Den Kernel übersetzen

Das Image

Das Kernel-Image befindet sich nach dem Kompilieren im Unterverzeichnis arch/i386/boot/ und heißt »bzImage«. Es muss noch aus den Quellen an die richtige Stelle – in das Verzeichnis /boot – kopiert werden:

# pwd 
/usr/src/linux-2.6.XX/ 
# cp arch/i386/boot/bzImage /boot/kernel-2.6.XX 
# cp System.map /boot/System-2.6.XX.map 
# cp .config /boot/config-2.6.XX

Listing 9.93    Den Kernel an die richtige Stelle schieben


Galileo Computing

9.6.4 Den Bootloader anpassen  downtop

Die meisten Distributionen nutzen mittlerweile nicht mehr den älteren LiLo, sondern den besseren grub. Dieser Bootloader ist deswegen besser, weil er mit einem einzigen Aufruf den neuen Kernel findet und das Bootmenü aktualisiert:

# 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.11-1-686 
Found kernel: /boot/vmlinuz-2.6.8-2-386 
Found kernel: /boot/kernel-2.6.XX 
Updating /boot/grub/menu.lst ... done

Listing 9.94    grub aktualisieren

Der ältere LiLo

Beim älteren LiLo muss dagegen die Konfigurationsdatei /etc/lilo.conf angepasst und eine Sektion für den neuen Kernel eingefügt werden, die ungefähr so aussehen könnte:

image=/boot/kernel-2.6.XX 
      label=Kernel-2.6.XX 
      read-only

Listing 9.95    Ausschnitt einer /etc/lilo.conf-Datei

Nach einem anschließenden Aufruf von lilo als root wird auch unter LiLo der neue Kernel hinzugefügt.

Bei all diesen Vorgängen sollte man lediglich dafür sorgen, dass man immer noch einen »alten«, garantiert bootfähigen Kernel in Reserve hat, falls das neue selbst gebastelte Prachtexemplar doch nicht ganz das macht, was man sich vorstellt.

Aber darüber gibt erst ein Reboot mit dem neuen Kernel Aufschluss. Hinweis: Eine Nachricht, die in irgendeiner Form die Worte »Kernel Panic« beinhaltet, ist dabei selten ein gutes Zeichen. Lesen Sie die Fehlermeldungen, suchen Sie bei Bedarf mit Google nach zusätzlichen Informationen, und versuchen Sie es noch einmal.

Viel Erfolg!


Galileo Computing

9.6.5 BSD-Kernel kompilieren  toptop

Je nach BSD-Derivat gestaltet sich die Kompilierung des Kernels etwas anders. Wir gehen an dieser Stelle vom OpenBSD-System aus. Dieses Wissen lässt sich allerdings sehr einfach auf FreeBSD und NetBSD übertragen.

Zunächst sollte man Kernel-Quellen der verwendeten Systemversion installieren. Es ist wichtig, nicht die top-aktuellen Kernel-Quellen zu laden, da dies zu Problemen mit dem restlichen System führen kann. Entweder man kompiliert also den entsprechenden Kernel des verwendeten Systems, oder man installiert das aktuelle Snapshot und kompiliert dessen Kernel. <Oder man lädt das komplette System als Quellcode vom CVS-Server und macht sich daran, das ganze System mit einem make world zu übersetzen.>

Die Datei mit den Kernel-Quellen nennt sich sys.tar.gz und ist auf der CD-ROM und auf den FTP-Mirrors des OpenBSD-Projekts zu finden. Nachdem die etwa 15 Megabyte große Datei in /usr/src entpackt wurde, wechselt man in das Unterverzeichnis sys.

Die Konfigdatei

Die Konfiguration des Kernels wird über eine Konfigurationsdatei abgewickelt (nein, es gibt kein grafisches Tool dafür). Diese Datei findet sich im Unterverzeichnis arch/PLATFORM/conf. Für PLATFORM muss der Name der Prozessorarchitektur eingesetzt werden, die Sie verwenden. Diese kann durch einen Aufruf von uname -m ermittelt werden, was beispielsweise »i386« für die Intel-386-basierte Architektur ausgibt.

Die standardmäßig verwendete Kernel-Konfiguration ist in der Datei GENERIC abgelegt und die für Multiprozessor-Systeme in der Datei GENERIC.MP, die allerdings nur die Compiler-Option (das sind in Wirklichkeit Defines für den C-Compiler) »MULTIPROCESSOR« hinzufügt.

Egal, ob Sie ein Single- oder ein Multiprozessorsystem Ihr Eigen nennen, erstellen Sie zunächst ein Backup der Konfigurationsdatei, und arbeiten Sie nur mit der Kopie der Konfigurationsdatei. Das ermöglicht es Ihnen, jederzeit Veränderungen am Kernel rückgängig zu machen.

# cd /usr/src/sys/arch/`uname -m`/conf 
# pwd 
/usr/src/sys/arch/i386/conf 
# cp GENERIC MYKERNEL

Listing 9.96    Eine Kopie der Konfiguration erstellen

Wenn Sie sich diese Konfigurationsdatei einmal mit less ansehen, werden Sie feststellen, dass diese sehr lang ist. Wir werden den genauen Inhalt im Rahmen dieses Buches nicht besprechen können, dafür finden sich aber recht viele Kommentare in eben dieser Datei. Es ist allerdings wichtig, einige grundlegende Dinge zu wissen:

  • machine
  • Mit machine wird die Prozessorarchitektur festgelegt.
  • include
  • Ähnlich wie mit dem include der Programmiersprache C wird bei diesem include eine andere Datei in die Kernel-Konfiguration eingebaut.
  • option
  • Mit dem Schlüsselwort option wird der Kernel um eine Funktionalität erweitert. Beispielsweise erreichen Sie die Unterstützung für einen 686er-Prozessor der Intel-Architektur mittels I686_CPU.
  • COMPAT_*
  • Die COMPAT-Optionen dienen dazu, die Kompatibilität für Binärdateien anderer Unix-Systeme in den Kernel einzubauen.
  • globale GENERIC-Datei
  • Werfen Sie doch einmal einen Blick in die allgemeine, architekturunabhängige Konfigurationsdatei, die ebenfalls GENERIC heißt und sich im Verzeichnis /usr/src/sys/conf befindet. Sie werden eine Menge Features des Kernels, etwa das Crypto-Framework, die Unterstützung für das Berkeley Fast-Filesystem (FFS), für ladbare Kernel-Module (LMs), für diverse Dateisysteme oder für die TCP/IP-Protokolledarin entdecken.

Möchten Sie die Unterstützung für eine Hardwarekomponente, die vom System generell unterstützt wird, jedoch nicht einkompiliert wurde, in Ihren neuen Kernel integrieren, muss in den meisten Fällen nur die Auskommentierung der jeweiligen Zeile gelöscht werden. Die Schnittstelle, an der ein Gerät gefunden werden soll, wird durch at <Schnittstelle>? angegeben.

Um hingegen die Unterstützung einer Hardwarekomponente aus dem Kernel zu entfernen, muss der jeweilige Eintrag in der Konfigurationsdatei auskommentiert werden.

Informationen zu einzelnen Hardwarekomponenten erhalten Sie über die Manpage des jeweiligen Treibers. Für die Zeile rl* at pci? ... suchen Sie beispielsweise in der Manpage rl(4) weitere Informationen. Sie werden feststellen, dass es sich dabei um den Treiber für die Realtek 8129- und 8139-Fast-Ethernet-Karten handelt.

Konfiguration erstellen

Nachdem die Konfiguration in der jeweiligen Datei abgelegt wurde, muss mit dem Programm config noch die Kompilierung des Kernels vorbereitet werden. config kümmert sich unter anderem darum, dass die options der Konfiguration in Compiler-defines umgesetzt werden.

# config MYKERNEL

Listing 9.97    Konfiguration erzeugen

Kernel kompilieren

Übersetzen!

Nun ist es so weit – der neue Kernel kann übersetzt werden. Dazu wechselt man zunächst in das von config erstellte Verzeichnis zur jeweiligen Konfigurationsdatei und führt make depend und anschließend make aus. Sollte an der Konfiguration etwas verändert worden sein, so muss der Kernel erneut übersetzt werden, zudem sollte vorher make clean ausgeführt werden.

# cd /usr/src/sys/arch/`uname -m`/compile/MYKERNEL 
# make depend 
... 
# make 
... 
... 
DISPLAY_COMPAT_USL -DWSDISPLAY_COMPAT_RAWKBD 
-DWSDISPLAY_DEFAULTSCREENS="6" 
-DWSDISPLAY_COMPAT_PCVT -DPCIA 
GP -D_KERNEL -Di386  -c vers.c 
rm -f bsd 
ld -Ttext 0xD0100120 -e start -N -x -o bsd \ 
${SYSTEM_OBJ} vers.o 
text    data    bss     dec     hex 
4888810 118364  859728  5866902 598596

Listing 9.98    Kernel übersetzen

Den Kernel installieren

Nachdem der Kernel kompiliert wurde, bekommt er den Dateinamen »bsd«. Dieser sollte nun ins Wurzelverzeichnis / kopiert werden und kann beim nächsten Boot via boot <Kernel> verwendet werden.

Doch Achtung! Dies ist gefährlich, da Sie auf diese Weise den alten Kernel /bsd überschreiben. Sollte der neue Kernel also nicht korrekt booten, läuft Ihr System nicht mehr von allein. Daher empfiehlt es sich, vorher ein Backup des bisherigen Kernels zu erstellen. Für den Fall, dass der neue Kernel Probleme verursacht, können Sie auf diese Weise beim Bootprompt immer noch den alten Kernel verwenden und das System wieder in den vorherigen Zustand bringen.

Um diesen Backup-Vorgang zu automatisieren, hat das OpenBSD-Team ein install-Target in die Kernel-Makefile eingebracht. Verwenden Sie nach dem make-Aufruf zur Kernel-Kompilierung also am besten make install, um den Kernel sicher zu installieren.

make install beugt außerdem der Möglichkeit vor, dass das System durch einen Stromausfall während des Kopiervorgangs des Kernels nicht mehr bootfähig wird.

# make install 
rm -f /obsd 
ln /bsd /obsd 
cp bsd /nbsd 
mv /nbsd /bsd

Listing 9.99    Kernel installieren

Der alte Kernel kann folglich mit obsd gebootet werden.



Ihr Kommentar

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






 <<   zurück
  
  Zum Katalog
Zum Katalog: Linux






 Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Einstieg in Linux






 Einstieg in Linux


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: Praxisbuch Netzwerk-Sicherheit






 Praxisbuch
 Netzwerk-Sicherheit


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de