KAPITEL 4 Verwalten des Kernels

Neukompilieren des Kernels

Die Administratoren von OpenLinux eServer Systemen entscheiden sich häufig dazu, die verwendeten Kernel neu zu kompilieren. Hierfür gibt es eine Reihe von Gründen: So kann auf diese Weise die Größe des Kernels verringert oder dieser an bestimmte Hardwarekomponenten angepasst werden. Es ist auch möglich, die Unterstützung für Geräte oder Funktionen bereitzustellen, die noch nicht im Kernel enthalten sind, oder nicht benötigte Funktionen zu entfernen. Der Kernel von OpenLinux eServer (und auch die meisten Anwendungen) wurde bereits für Pentium Pro oder bessere Prozessoren optimiert. Wenn Sie aber dennoch Ihren Kernel neu kompilieren möchten, erfahren Sie in diesem Abschnitt, wie Sie hierzu vorgehen müssen.

Am einfachsten erfolgt das Neukompilieren des OpenLinux eServer Kernels dadurch, dass Sie ein neues RPM-Paket erstellen und installieren, in dem alle gewünschten Anpassungen berücksichtigt werden. Gehen Sie hierzu wie folgt vor:

  1. Überprüfen Sie zuerst, ob der Kernelquellcode installiert ist. Falls dies nicht der Fall ist, müssen Sie die Installation nachholen. Sie benötigen mindestens die Dateien linux-source-common-2.2.14 und linux-source-i386-2.2.14. Außerdem muss auf Ihrem Rechner eine geeignete Entwicklungsumgebung installiert sein. Mit dem ersten Befehl werden die installierten Kernelpakete aufgelistet (falls diese vorhanden sind). Mit dem zweiten und dem dritten Befehl werden die Pakete installiert, die für das Neukompilieren des Kernels mindestens erforderlich sind:

# rpm -qa | grep linux

# rpm -ivh linux-source-common-2.2.14-1.i386.rpm

# rpm -ivh linux-source-i386-2.2.14-1.i386.rpm

  1. Installieren Sie das RPM-Paket mit dem Linux-Quellcode (SRPM). Dieses Paket trägt die Bezeichnung linux-2.2.13-1.src.rpm:

rpm -ivh linux-2.2.13-1.src.rpm

  1. Kopieren Sie als nächstes die standardmäßige Kernelkonfigurationsdatei für OpenLinux eServer in der beschriebenen Form in das Verzeichnis für den Kernelquellcode:

# /usr/src/OpenLinux/SOURCES

# cp linux.defconfig.i386.modular /usr/src/linux/.config

  1. Wechseln Sie in das Verzeichnis mit dem Kernelquellcode, und verwenden Sie den Befehl make in Verbindung mit den üblichen Optionen für das Konfigurieren des Kernels:

# cd /usr/src/linux

# make [config | menuconfig | xconfig]

  1. Nach dem Konfigurieren des Kernels kopieren Sie die neue Konfigurationsdatei, /usr/src/linux/.config, zurück in das Quellverzeichnis von OpenLinux:

# cd /usr/src/OpenLinux/SOURCES

# cp /usr/src/linux/.config linux.defconfig.i386.modular

  1. Sie müssen die Schritte 4 und 5 für jede Architektur durchführen, für die Sie einen Kernel erstellen möchten. Standardmäßig werden i386 und i586 kompiliert, und so müssen Sie diese Schritte für die i586-Konfiguration wie folgt wiederholen:

# cd /usr/src/OpenLinux/SOURCES

# cp linux.defconfig.i586.modular /usr/src/linux/.config

# cd /usr/src/linux

# make [config | menuconfig | xconfig]

# cd /usr/src/OpenLinux/SOURCES

# cp /usr/src/linux/.config linux.defconfig.i586.modular

  1. Damit ist der schwierige Teil auch schon abgeschlossen. Als nächstes müssen Sie die Spezifikationsdatei für das RPM-Paket bearbeiten und die Zeile Release: in eine Angabe ändern, die Ihren Anpassungen Rechnung trägt (das Zeichen - kann jedoch nicht verwendet werden). Die standardmäßige Spezifikationsdatei, /usr/src/OpenLinux/SPECS/linux.spec, wird vermutlich wie folgt aussehen:

Name : linux

Version : 2.2.14

Release : 1

Group : System/Kernel

    Angenommen, Sie haben Unterstützung für die Funktion IP-Masquerading hinzugefügt. In diesem Fall sollten Sie die Zeile Release: wie folgt ändern:

Release : ip_masq

  1. Erstellen Sie nun das RPM-Paket. Wenn Sie nur das binäre RPM-Paket benötigen, verwenden Sie hierfür folgenden Befehl:

# rpm -bb /usr/src/OpenLinux/SPECS/linux.spec

    Wenn Sie sowohl RPM-Pakete mit Binärcode als auch Quellcode benötigen, verwenden Sie hierfür die Option -ba von RPM:

# rpm -ba /usr/src/OpenLinux/SPECS/linux.spec

    Mit dem ersten RPM-Befehl wird ein RPM-Paket mit dem Binärcode und der Bezeichnung /usr/src/OpenLinux/RPMS/i386/linux-kernel-binary-2.2.14-ip_masq.i386.rpm erstellt. Mit dem zweiten Befehl wird neben dem Binärpaket zusätzlich noch ein RPM-Paket mit dem Quellcode und der Bezeichnung /usr/src/OpenLinux/SRPMS/i386/linux-kernel-binary-2.2.14-ip_masq.src.rpm erstellt.

  1. Geben Sie zum Installieren des RPM-Pakets mit dem Binärcode den folgenden Befehl ein:

# cd /usr/src/OpenLinux/RPMS/i386/

# rpm -ivh linux-kernel-binary-2.2.14-ip_masq.i386.rpm

  1. Schließlich müssen Sie LILO nochmals ausführen, um dem Bootloader die Information über den geänderten Kernel zu übergeben:

# /sbin/lilo -v

    Wenn Sie Ihr OpenLinux eServer System zum nächsten Mal booten, wird dabei der neu erstellte Kernel geladen.

Verwenden von Kernelmodulen

Bei Kernelmodulen handelt es sich um Code, der dem Kernel dynamisch hinzugefügt bzw. aus diesem entfernt werden kann. Dieser Code wird häufig verwendet, um bestimmte Hardwaregeräte zu unterstützen oder bestimmte Funktionen wie IP-Masquerading oder BSD-Prozessverwaltung zu aktivieren. Da diese Module dynamisch geladen und entfernt werden können, ist der Kernel dadurch insgesamt kleiner und schneller.

Ihr OpenLinux eServer System verwendet standardmäßig einen modularen Kernel. Die Module können manuell oder automatisch geladen werden. Im ersten Abschnitt wird kurz das manuelle Laden von Modulen erläutert, bevor dann das von OpenLinux zum automatischen Laden von Modulen beim Booten verwendete System beschrieben wird.

Manuelles Laden von Kernelmodulen

Die Syntax der einzelnen Befehle ist ziemlich einfach. Um alle aktuell geladenen Module anzuzeigen, verwenden Sie den Befehl lsmod wie folgt:

# lsmod

Module Size Used by

isofs 17176 1 (autoclean)

nfs 30168 0 (autoclean)

lockd 31720 0 (autoclean) [nfs]

sunrpc 53924 0 (autoclean) [nfs lockd]

nls_iso8859-1 2020 2 (autoclean)

nls_cp437 3548 1 (autoclean)

vfat 11292 1 (autoclean)

fat 25504 1 (autoclean) [vfat]

Aus Platzgründen wurde die Ausgabe des Befehls hier gekürzt.

Um ein Modul zu entfernen, verwenden Sie rmmod. Da das Entfernen (und Einfügen) von Modulen Rootberechtigung erfordert, müssen Sie sich als Root angemeldet haben. Bei der Reihenfolge, in der Module entfernt werden, muss zudem berücksichtigt werden, dass manche Module von bestimmten anderen Modulen abhängig sind. Daher müssen diese Module zuerst entfernt werden.

# rmmod fat

rmmod: fat is in use

# rmmod vfat

# rmmod fat

Verwenden Sie den Befehl insmod, um Module einzufügen. Wenn Sie die Option -v (verbose, d.h. erläuternd) in Verbindung mit insmod verwenden, geben manche Module zusätzliche Informationen aus, die nützlich sind, falls beim Laden der Module Fehler auftreten.

# insmod fat

# insmod vfat

Da das Modul vfat vom Modul fat abhängt, müssen Sie das Modul fat zuerst laden. Wenn Sie sich nicht sicher sind, welche Modulabhängigkeiten existieren, können Sie diese mit dem Befehl modprobe in Verbindung mit der Option -v auf dem Bildschirm anzeigen. Außerdem bietet Ihnen modprobe den Vorteil, dass es die Module durch Aufrufen von insmod lädt:

# modprobe -v /lib/modules/2.2.12/fs/vfat.o

/sbin/insmod -L /lib/modules/2.2.12/fs/fat.o

/sbin/insmod -L /lib/modules/2.2.12/fs/vfat.o

Automatisches Laden von Kernelmodulen

Bei der Installation erstellt OpenLinux eServer eine Datei mit der Bezeichnung /etc/modules/default, die eine Liste mit den Modulen enthält, die beim Booten automatisch geladen werden sollen. Wenn Ihr System eine initiale RAM-Disk erfordert (initrd), wurde auch eine Datei mit der Bezeichnung /etc/modules/rootfs angelegt, in der eine Liste mit allen Modulen enthalten ist, die für das Booten des Systems und Mounten des Rootdateisystems erforderlich ist. Die meisten SCSI-Systeme müssen beispielsweise diese Methode nutzen, um SCSI-Treiber laden zu können.

Um automatisch ein neues Modul zu laden, das für das Booten nicht unbedingt erforderlich ist, müssen Sie dieses in die Datei /etc/modules/default einfügen. Wenn ein Modul für das Booten hingegen unverzichtbar ist, fügen Sie dieses in /etc/modules/rootfs ein. Beachten Sie bitte in diesem Zusammenhang, dass die Reihenfolge von großer Bedeutung sein kann, in der die Module geladen werden. Dies gilt vor allem für den Fall, dass wie im bereits erwähnten Beispiel mit fat und vfat einzelne Module voneinander abhängig sind.

Go to Main Go to Previous Go to Next