Das Wiki ist im Nur-Lese-Modus, es wird durch ein neues Wiki ersetzt. Mehr Infos....

Debian-Kernelpaket erzeugen

Einleitung (oder: Warum sollte ich einen eigenen Kernel erstellen?)

Vieles spricht dafür, einen eigenen Kernel zu erstellen, denn ein Standardkernel aus dem Debianarchiv mag zwar funktionieren, bringt aber Unmengen von Modulen mit, die man auf dem eigenen Rechner niemals brauchen wird. Ein eigener Kernel ist schlanker, optimierter und steigert im besten Fall die Performance ganz erheblich. Auf der anderen Seite kann es auch aus Sicherheitsgründen notwendig sein einen neuen Kernel zu erstellen, so z.B. auf Webservern. Dort sollte es beispielsweise nicht möglich sein, im laufenden Betrieb Module nachzuladen. Es gibt sicherlich noch viele weitere Gründe, aber dies soll als Ausblick genügen.
Trotz der gerade aufgeführten Vorteile fürchten sich viele vor dem ersten eigenen Kernel, das ist aber eigentlich nicht notwendig, denn Debian bringt einen relativ einfachen und komfortablen Weg zum eigenen Kernel mit, dieser soll im Folgenden dargestellt werden. Der "klassische" Weg wird in einem anderen HowTo beschrieben.

Autor und Version

Autor

Version

Voraussetzungen

Neben einem installierten Debian-System werden folgende Pakete benötigt:

apt-get install kernel-package gcc libc6-dev zlib1g-dev binutils make gawk gzip shellutils grep bin86 libncurses5-dev initramfs-tools

Schritt für Schritt zum eigenen Kernel

  1. Viele der folgenden Befehle erwarten den Kernel unter /usr/src/linux, deshalb muss zuerst die Arbeitsumgebung "eingerichtet" werden. Es kann sein, dass man die folgenden Befehle nicht als normaler Nutzer ausführen darf, in diesem Fall kann man sich entweder die benötigten Rechte verschaffen (empfohlen) oder mittels su root werden.

    1. Entpacken des heruntergeladenen Kernels unter /usr/src

      /usr/src$ tar xvjf linux-2.6.y.x.tar.bz2 
    2. Verlinken des gerade enstandenen Verzeichnes nach /usr/src/linux

      /usr/src$ ln -s linux-2.6.y.x linux 

    y und x sind durch die entsprechenden Versionsnummern zu ersetzen. Eventuell entfällt der letzte Teil (.x), wenn noch kein Bugfix-Release erschienen ist.

  2. In das Verzeichnis /usr/src/linux wechseln

    /usr/src$ cd linux 
  3. Einmalig muss man nun (seit kernel-package 12.001), sollte man einen Kernel mit initrd erstellen wollen, noch je ein Script in /etc/kernel/post{inst,rm}.d ablegen, welches die Erzeugung übernimmt. Im Falle einer initrd findet man ein gutes Beispiel-Script unter /usr/share/doc/kernel-package/examples/etc/kernel/post{inst,rm}.d, welches man bedenkenlos einsetzen kann (ein Symlink genügt, der hat den Vorteil, das beim Aktualisieren von kernel-package auch automatisch die Scripte für den nächsten Bau auf den neusten Stand gebracht werden). An dieser Stelle vielleicht auch noch der Hinweis auf andere neue (seit Version 12.000) Funktionen/Optionen: man kann jetzt einfachen Einfluss auf den Inhalt des debian-Verzeichnisses nehmen und die Installations-Routinen um eigene Scripte erweitern ({post,pre}{inst,rm}). Da diese Optionen recht umfangreich sind, verweise ich hier auf die im Paket enthaltene Dokumentation, unter /usr/share/doc/kernel-package und in der Manualpage.

  4. Konfiguration und Erstellen werden mit einem Befehl initialisiert (muss als root ausgeführt werden, weil sonst make-kpkg nach dem Kompilieren nicht in der Lage ist, das Debian-Paket zu erzeugen) In diesem HowTo wird menuconfig verwandt, es gibt aber noch andere Methoden, wie oldconfig, die man nach dem eigenen Geschmack einsetzen kann.

    /usr/src/linux# make-kpkg --config menuconfig --initrd --revision 0.1 kernel_image 

    Konfiguration
    Bei der Konfiguration des Kernels lohnt es sich verschiedenes zu bedenken:

    • Auf was für einem System soll der Kernel eingesetzt werden? Server oder Desktop?
      • Im Falle eines Servers: Loadable module support deaktivieren, über diesen Weg könnten möglichweise unliebsame Kernelmodule nachgeladen werden, Sound-System komplett deaktivieren, ein Server soll in aller Regel keine Musik spielen; andere Subsysteme, die nicht benötigt werden komplett deaktivieren (hier sind z.B. Video4Linux, das ISDN-Subsystem usw. zu nennen); sich mit der Hardware des Servers vertraut machen (die Befehle lspci und lsmod sind hier äußerst hilfreich) und die Module fest einkompilieren, die auch wirklich benötigt werden, alles andere stellt ein inakzeptables Sicherheitsrisiko dar.

      • Im Falle eines Desktops: Hier muss man bei der Auswahl nicht ganz so streng sein, kann auch zukünftige Entwicklungen, die abzusehen sind, bereits einplanen (die entsprechenden Module einfach mit erzeugen). Hier sind natürlich auch Sound-Funktionalitäten u.ä. gefordert. Loadable Module Support sollte man aktivieren, damit der Kernel nur das laden muss/kann, was gerade benötigt wird (kann durchaus variieren, Stichwort "externe Geräte"). Dennoch, auch hier gilt, Dinge, von denen man mit ziemlicher Sicherheit sagen kann, dass sie ihren Weg nicht in den Rechner finden (InfiniBand-Support u.ä.), sollten auch hier komplett deaktiviert werden. Nur als Vergleichswert: der durchschnittliche Debianstandardkernel benötigt ca. 52 MB, ein eigener für den Desktop meistens weniger als 20 MB (hängt von der Auswahl der Module ab). Man kann aber auch hier sehr restriktiv auswählen und evtl. später benötigte Module mit dem module-assistant erzeugen (alternativ kann man natürlich auch auf die modules*-Ziele von kernel-package zurückgreifen).

    • Welche Hardware ist überhaupt vorhanden? Welche Treiber werden benötigt?
    • Was wird möglicherweise von Programmen im Userspace benötigt?

    menuconfig übernimmt normalerweise die Konfiguration des gerade laufenden Kernels, wenn man eine andere Konfiguration als Basis nutzen möchte, kann man diese über den Menüpunkt Load alternate Configuration File laden. An dieser Stelle ist evtl. noch ein Hinweis: man kann die Konfiguration auch getrennt von make-kpkg aufrufen, dazu muss man in /usr/src/linux z.B. make menuconfig (kann man dann noch als Benutzer ohne root-Rechte machen) ausführen.
    Weitere Pakete in einem Rutsch erzeugen
    Ggf. ist es auch sinnvoll gleich die Kernelheader zu erstellen um später dann z.B. einen proprietären Grafikkartentreiber zu erstellen. Für alle weiteren Optionen von make-kpkg empfiehlt sich ein Blick in die Manualpage. Die Option --append-to-version bietet sich zur einfacheren Versionsverwaltung an, auf diese Weise kann man einen selbst erstellten Kernel auch als solchen kennzeichnen.

  5. Jetzt sollte im Verzeichnis /usr/src ein (bzw. mehrere) Debianpaket(e) erstellt worden sein (die Anzahl der erstellten Pakete hängt von den angegebenen Targets ab). Jetzt muss man also nur noch das Kernelpaket mittels dpkg installieren.

    /usr/src# dpkg -i [Name des Kernel-, Header- od. sonstigen Archivs].deb 
  6. Nun gilt es nur noch den neuen Kernel zu booten. Normalerweise dürfte jetzt nichts mehr schief gehen, denn yaird sollte bei irgendwelchen Problemen bereits vor dem Neustart die Installation des Kernels abbrechen. Außerdem empfiehlt es sich den alten Kernel noch bis nach dem erfolgreichen Reboot beizubehalten, so hat man im Zweifelsfall immernoch ein lauffähiges System.

Debian-Patchsets anwenden

Patchsets aus dem Debianrepository auf die Kernelquellen anzuwenden wird mittels make-kpkg sehr einfach. Dazu muss man nur die Patchsets installieren (apt-get install [Name des Patches]) und beim Aufruf von make-kpkg die Option --added-patches mit übergeben:

/usr/src/linux# make-kpkg --added-patches patch1,patch2 --initrd --revision 0.1.plus.patches kernel_image 

Für die Vorgehensweise bei anderen Patches bitte das entsprechende HowTo lesen.

Bootsplash einrichten

Wie die Einrichtung von Bootsplashs funktioniert, wird in den folgenden HowTos beschrieben:

Links


KategorieKernel



Lizenz: MIT-Lizenz oder Creative Commons Attribution-ShareAlike 2.0 Germany License

DebianizedLinuxKernel (last edited 2009-09-10 13:45:13 by Drizzt Do'Urden)