Linux als SOHO-Server
für Linux- und Windows-Clients |
Kapitel:
|
Der Kernel ist das Herzstück eines Unix- bzw. Linux-Betriebssystems. Unter Debian GNU/Linux liegt der Kernel in verschiedenen Versionen als offizielles Paket (Standard-Kernel) vor, jedoch kann es manchmal sinnvoll sein einen eigenen Kernel zu verwenden. Gründe die für einen anderen Kernel können z.B. sein:
Im Folgenden wird gezeigt, wie unter Debian-Linux ein neuer Kernel erstellt und installiert werden kann. Weiterhin wird kurz auf dazugehörige Dinge wie 'Header', 'Module' und 'Patches' eingegangen. Vorgefertigte Kernel nutzenUnter Debian können aus der Distribution heraus einige andere alternative vorgefertigte Kernel genutzt werden. Dabei kann zwischen unterschiedlichen Kerneln, die zumeist jeweils für die entsprechenden Prozessoren optimiert sind, gewählt werden. Mit dem Kommando 'apt-cache search --names-only linux-image' kann man sich die verfügbaren fertigen Kernels anzeigen lassen. Dabei fällt auf, dass es bei den Bezeichnungen für die Images Kurzbezeichnungen (z.B.: 'linux-image-2.6-686') und Langbezeichnungen (z.B.: 'linux-image-2.6-1-686') für den Kernel gibt. Bei den Kurzbezeichnung ist ein Meta-Paket gemeint, während die Langbezeichnung das eigentliche Kernel-Image ist. Wird das Meta-Paket installierst, wird bei einem 'dist-upgrade' automatisch ein evtl. neuer Kernel installiert (der alte bleibt natürlich erhalten). Ist das Meta-Paket nicht installiert ist, muss der Kernel-Upgrade manuell anstoßen werden. Ein neuer Kernel kann dann einfach, wie unter Debian üblich, mittels 'apt-get install' installiert werden; z.B. mit:
wird ein 'Linux-Image 2.6 für PPro/Celeron/PII/PIII/P4' installiert. Nach der Installation des Kernel-Pakets befinden sich der eigentliche Kernel ('vmlinuz-2.6.26-1-686'), die passende System-Map ('System.map-2.6.26-1-686') sowie die Konfigurationsdatei, mit der das Kernel-Image erzeugt wurde, ('config-2.6.26-1-686') im Verzeichnis '/boot'. Auch wurden die zum Kernel gehörenden Module unter '/lib/modules/2.6.26-1-686' installiert, sowie ein entsprechende Eintrag zum Starten für den Boot-Loader (z.B.: 'GRUB') hinzugefügt. Nach der Installation kann das System mit dem neu installierten fertigen Kernel gebootet werden. Eigene Kernel/Module erstellenIm Folgenden wird kurz gezeigt, wie nach Debian-Art, aus den Kernel-Sourcen ein eigener Kernel generiert und installiert werden kann. Die Debian-Methode nutzt dazu eigene Tools, mit denen es wesentlich einfacher ist einen Kernel zu erstellen und zu installieren als mit der klassischen Methode unter Linux. Auf die klassische Methode wird auf dieser Seite nicht weiter eingegangen, sie kann leicht im Internet rechergiert werden. Vorbereitungen zum Kernel-BauZum Erstellen eines Kernels sind zunächst einige Vorbereitungen zu treffen, wie das zusätzliche Installieren von Software-Tools zur Kernel-Erstellung. Auf dem Rechner sollten mit 'apt-get install' zusätzlich folgende Pakete installiert werden:
Auch muss natürlich ein 'C'-Compiler und die nötigen Hilfsmittel ('make') vorhanden sein. Bei einer Standard-Installation von Debian sollte das jedoch der Fall sein. Kernel erstellenNach dem alle Vorbereitungen bez. Kernel-Bau getroffen sind können als nächstes die 'Source-Code'-Quellen installiert werden, welches ebenfalls mit 'apt-get install' aus dem Debian-Archiv geschehen kann:
Nach der Installation sind, die noch gepackten 'Sourcen' im Verzeichnis '/usr/src' zu entpacken:
Nach dem Entpacken sollte ein neues Verzeichnis mit dem Namen 'kernel-source-x-y.z' unter '/usr/src/' vorliegen, indem sich nun die ausgepackten 'Sourcen' befinden. Auch für das Kernel-Paket gibt es eine Konfigurationsdatei: '/etc/kernel-pkg.conf'. In dieser Datei sollen einige Eintragungen bez. der späteren Verwaltung des fertigen Kernels vorgenommen werden:
In der Datei sollte zumindest der Name ('maintainer') und die E-Mail-Adresse eingetragen werden. Weiteren mögliche Parameter und deren Bedeutung lassen sich auf der Manualseite zu 'kernel-pkg.conf' nachschlagen. Als weitere Schritt sollte die eigentliche Kernel-Konfigurationsdatei '.config' ins Verzeichnis '/etc/src/kernel-x.y.z' abgelegt werden. Als quasi Vorlage kann eine ältere Konfigurationsdatei, z.B. von einem zuvor installierten Debian-Standard-Kernel dienen. Die '.config'-Vorlagen sollten sich im Verzeichnis '/boot/'config-x.y.z' befinden. Also am besten Folgendes:
Mittels 'make oldconfig' wird die alte Konfigurationsdatei auf den neuen Kernel angepasst, es werden so evtl. neu hinzugekommenen Optionen berücksichtigt. Das 'make' sollte im Verzeichnis der 'Kernel-Sourcen' ausgeführt werden:
Nun kann die eigentliche Konfiguration des Kernels erfolgen. Dazu kann auf der Konsole 'make menuconfig' eingegeben werden. Es sollte ungefähr folgendes Menü erscheinen:
Mittels den 'Cursor'-Tasten kann navigiert und in die einzelnen Untermenüs gewechselt werden
um die gewünschten Einstellungen/Änderungen zu tätigen. Zum Schluss
sollte die neue Konfiguration vor dem Verlassen der Konfiguration gespeichert werden. Die neuen
Einstellungen sollten dann in der Datei '/usr/src/kernel-source-x.y.z/.config'
einfließen. Nun kann zur eigentlichen Kompilierung übergegangen werden, welches unter Debian dank des Paketes 'kernel-package' und dem Befehl 'make-kpkg' recht einfach ist. Der Kernel kann z.B. mit folgenden Kommandos kompiliert werden:
Vor der eigentlichen Kompilierung sollte noch ein 'clean'
auf die 'Sourcen' angewendet werden. Nach Beendigung der Kompilierung, welches je nach Performance des Systems dauern kann, sollte im Verzeichnis '/usr/src/' ein fertige Debian-Kernel-Paket z.B. 'kernel-image-x.y.z-....deb' nebst sämtlicher Module vorliegen. Das Paket kann nach Debian-Art einfach installiert werden:
Auch kann das Kernel-Paket selbstverständlich auch auf unterschiedlichen Maschinen installiert werden. Nach einen Restart (z.B. mit 'reboot') des Systems, sollte beim Boot-Manager (z.B. 'GRUB') der neue Kernel zusätzlich mit angeboten werden. Der erster Hochlauf mit den neuen Kernel sollte dann sorgsam beobachtet werden. Kernel-HeadersManche Programme oder Module, die später für das System bzw. den vorhanden Kernel kompiliert werden sollen, benötigen die Kernel-Sourcen. In vielen Fällen genügt es jedoch, wenn nur die Kernel-Headers vorhanden sind. Zu jedem Debian-Standard-Kerneln gibt es auch immer ein entsprechendes Kernel-Header-Paket, welches einfach nur eingespielt werden brauch ('apt-get install ...'). Dabei ist zu beachten, dass nur ein 'Header'-Paket verwendet werden darf, welches auch zur Kernel-Version passt. Ein fertiges 'Header'-Paket installiert man daher am besten wie folgt:
Mit 'uname -r' ist sichergestellt, dass die 'Headers' auch zum Kernel passen. Hat man wie oben beschrieben einen eigenen Kernel erstellt, so ist es sinnvoll eine Kopie der Kernel-Header vorrätig zu haben. Ein 'Header'-Paket kann wie folget erstellt werden:
Nach dem Erzeugen der 'kernel_headers', sollten diese auch als installierbares Debian-Paket unter '/usr/src/' vorliegen. Das 'Header'-Paket kann wie gewohnt unter Debian installiert werden:
Danach liegt ein Verzeichnis 'kernel-headers-x.y.z-...' vor, indem sich dann die eigentlichen 'Headers' befinden. Um Festplattenkapazität zu sparen, können evtl. die eigentlichen 'Sourcen' unter 'kernel-source-x.y.z-...' gelöst werden. Kernel DokumentationEine weitere Option von 'make-kpkg' ist 'kernel_doc', mit der eine Dokumentation für den Kernel erstellt werden kann. Die Option 'kernel_doc' kann wie folgt angewendet werden:
Als Ergebnis werden unter '/usr/src/kernel-source-x.y.z/Documentation' die Dokumentation zum Kernel erzeugt, zusätzlich wird unter '/usr/src/' ein auch später installierbares Debian-Paket 'kernel-doc-2.6.8-....deb' abgelegt. Module erstellenViel häufiger, als ein neuer Kernel, werden neue oder veränderte Kernel-Module benötigt. Kernel-Module sind Gerätetreiber, die als separates Modul vorliegen und bei laufenden System eingebunden und wieder entfernt werden können. Beispiele hierfür sind z.B.: ISDN- oder Grafikkarten-Treiber, die später als Module im Kernel eingebunden werden. Der 'Source'-Code der Module sollten ebenfalls im Verzeichnis '/usr/src/' abgelegt werden, in der Regel handelt es sich hierbei um 'tar.gz'- oder 'tar.bz2'-Archive. Nach dem Entpacken der Archive sollten sich die 'Sourcen' im Verzeichnis '/usr/src/modules' befinden. Die Module können als Debian-Paket dann wie folgt erzeugt werden:
Mit dem Target 'modules-image' können alle dort abgelegten Treiber- bzw. Modul-Quellen passend zum jeweiligen Kernel übersetzen werden. 'make-kpkg' erzeugt für jedes dieser installierten Quellpakete ein eigenes Paket, das sich, wenn der passende Kernel auf einem System vorhanden ist, dann zusätzlich dort einrichten lässt. Wichtig ist, dass für den 'make-kpkg'-Aufruf die gleichen Parameter verwendet werden wie für den Kernel auch, sonst lässt sich ein aus den Modul-Quellen erzeugtes Paket nicht installieren. Eventuell muss vor der Erstellung der Modulen noch ein Pfad zu den Kernel-Sourcen mit angegeben werden ('KSRC'-Variable). Es sollte diesbezüglich die Dokumentation (ReadMe) zum Modul-Source-Paket gelesen werden. Nach der Erstellung der Module mit 'make-kpkg' sollten Modul-Pakete ('.deb') unter '/usr/src/' vorliegen. Die Modul-Pakete können wie gewohnt installiert werden, die fertigen Module liegen nach der Installation in '/lib/modules/x.y.z.../'. Kernel-PatchesIn den meisten Fällen möchte man nur einen Kernel aus den aktuellen Quellen erstellen. Es gibt aber auch Fälle, wo zusätzliche Funktionalität oder Korrekturen eingebaut werden müssen. Dabei kommen vielfach 'Patches' (Flicken) zum Einsatz. Unter Debian gibt es separate Pakete die als Kernel-Patch-Pakete verpackt sind. Um nach Kernel-Patches unter Debian zu suchen verwendet man am besten 'apt-cache search', z.B:
Hat man sich für einen notwendigen Kernel-Patch entschieden, so kann dieser einfach mit 'apt-get install' installiert werden, z.B.:
Die Patch-Pakete werden ausgepackt und an den korrekten Ort abgelegt (nach
Dabei gibt '--added-patches' an, mit welchen der installierten 'Patches' der Kernel zu behandeln ist, in diesem Beispiel 'kernel-patch-debianlogo'. Nach Fertigstellung des neuen Kernel-Paketes kann dieses wie oben beschrieben installiert werden. Auch werden Kernel-Patches als 'diff'-Dateien bereitgestellt. Angenommen, es wurde ein Patch 'my-patch.diff' herunter geladen und unter '/usr/src/' gespeichert, so sollte zunächst getestet werden ob dieser passt:
Mit der Option '--dry-run' kann zunächst ausprobiert werden was der 'Patch' macht, ohne an den 'Sourcen' des Kernels etwas zu verändern. Es wird zunächst nur die Anwendung des 'Patches' geprüft. Sollte 'patch' keinen Fehler melden, kann richtig ge-patcht werden:
Je nach Herkunft kann es sein, dass man statt dem Parameter 'p1' eher 'p0' nutzen sollte. AnmerkungenUm einen installierten Kernel nach Debian-Art wieder zu entfernen kann einfach folgender Befehl verwendet werden:
Kommt es zu einer Meldung, dass z.B. '/lib/modules/x.y.z-*' nicht leer ist, sollten zunächst die Module deinstalliert werden, z.B.:
Auch kann evtl. das Modul-Verzeichnis gelöscht werden. Beim Kompilieren und Einsetzen eines neuen Kernels sollte auf jeden Fall eine Möglichkeit vorgesehen werden um mit dem alten Kernel weiterhin starten zu können. Auch sollet sichergestellt werden, dass zumindest bei Problemen die Daten auf dem System erreichbar sind, es kann nicht schaden zuvor ein Backup des Systems durchzuführen. Weitere Infos
letzte Änderung: 16. Februar 2009 |
Copyright © 2004 Norbert Eusterholz |