Debian spezifische Anleitungen
Kernel selbst kompilieren - the Debian way
Hier will ich beschreiben, wie man einen Linux-Kernel unter Debian GNU/Linux selbst kompiliert. Dabei gehe ich auf Besonderheiten des Debian-Systems ein, d.h. ich verwende Debian-eigene Tools, um ein Debian-Kernel-Paket zu erzeugen, dass anschließend bequem mit dpkg installiert werden kann.
Kernel-Quellen vorbereiten
Zunächst muss man sich entscheiden, ob man die Kernel-Quellen von kernel.org oder aus dem Debian-Archiv beziehen will. Grundsätzlich macht es keinen Unterschied,
für welche Alternative man sich entscheidet, die Kernel aus dem Debian-Archiv enthalten lediglich ein paar kleinere Anpassungen.
Möchte man die Kernel-Quellen aus dem Debian-Archiv installieren, installiert man das entsprechende linux-source-Paket:
debian:/# apt-get install linux-source-2.6.12 |
---|
Jetzt gibt es im Verzeichnis "/usr/src" eine Datei namens "linux-source-2.6.12.tar.bz2". Wir wechseln in das Verzeichnis "/usr/src" und entpacken die Kernel-Quellen:
debian:/# cd /usr/src debian:/usr/src# tar -xvvjf linux-source-2.6.12.tar.bz2 |
---|
Falls man es noch komfortabler will, installiert man das Paket unp vorher mit:
debian:/# apt-get install unp debian:/usr/src# unp linux-source-2.6.12.tar.bz2 |
---|
Damit die Bezeichnungsweise im folgenden übereinstimmt, legen wir noch einen symbolischen Link namens "linux" auf das entstandene Verzeichnis "linux-source-2.6.12":
debian:/usr/src# ln -s linux-source-2.6.12 linux |
---|
Kernel konfigurieren
Oft bietet es sich an, mit der Konfiguration eines Debian-Standard-Kernels anzufangen und diese anzupassen, insbesondere, wenn die Hardware-Komponenten schon (größtenteils) von diesem unterstützt werden. Dazu übernehmen wir die Datei "/boot/config-xxx" aus einer Debian, Knoppix oder Kanotix (aktueller) Boot-CD als unsere Kernel-Konfigurationsdatei. Diese kopieren wir nach "/usr/src/linux/.config" und wechseln anschließend nach linux:
debian:/# cp /boot/config-xxx /usr/src/linux/.config debian:/# cd /usr/src/linux |
---|
Falls man eine Konfiguration "from scratch" erstellen möchte, lässt man obigen Schritt einfach aus oder übernimmt eine eigene (vielleicht gebackupte) .config. Für die Konfiguration stehen mehrere Frontends zur Verfügung, für die Konsole oder für X. Möchte man den Kernel mit einem graphischen Frontend unter X konfigurieren, ist der nächste Schritt:
debian:/# cd /usr/src/linux debian:/usr/src/linux# make xconfig |
---|
Möchte man den Kernel lieber menügesteuert auf der Konsole konfigurieren (diese Art ist meiner Meinung nach noch komfortabler als make xconfig, weil das Menüsystem besser gemacht ist; außerdem kann man das prima in einem xterm machen, während man in Mozilla die Dokumentation (z.B. HOWTOs) durchgehen kann. Übrigens: die Konfiguration und das Kompilieren des Kernels ist kein besonderer Prozess, man kann nebenbei das System ganz normal nutzen (Internet etc.)), installiert man zunächst die Entwicklungsversion der Ncurses-Bibliothek und startet dann make menuconfig:
debian:/usr/src/linux# apt-get install libncurses5-dev debian:/usr/src/linux# make menuconfig |
---|
Kernel patchen
Jetzt kann auch der Kernel gepatcht werden, falls gewünscht. In meinem Fall hätte ich gerne eine Reiser4 Unterstützung im Kernel. Standardmäßig wird Reiser4 (noch) nicht im Kernel integriert. Von daher muss man den Kernel entsprechend mit dem Reiser4 Debian-Kernel-Patch bearbeiten. Wir installieren den Patch , der ein neues Verzeichnis "kernel-patches" unter "/usr/src/" einrichtet. Den darin enthaltenen Patch wenden wir auf den Kernel an. Wir gehen wie folgt vor:
debian:/usr/src/linux# apt-get install kernel-patch-2.6-reiser4 debian:/usr/src/linux# patch -p1 < /usr/src/kernel-patches/diffs/reiser4/reiser4-2.6.patch |
---|
Anschliessend muss man Reiser4 im Kernel aktivieren. Dazu im Untermenü "File Systems" des Kernelmenü Reiser4 Support aktivieren:
debian:/usr/src/linux# make menuconfig |
---|
Zum Abschluss die ganze .config natürlich abspeichern und als Backup sichern. Nachdem man die Konfiguration abgeschlossen hat, gibt man nicht wie vorgeschlagen make dep ein, sondern (wir wollen ja den Komfort von Debian nutzen ;-)) erledigt die Kompilierung und das Erstellen eines Debian-Pakets mittels kernel-package, das schnell installiert ist:
debian:/usr/src/linux# apt-get install kernel-package |
---|
Bevor wir mittels kernel-package ein Debian-Paket unseres Kernels erstellen, ist es sinnvoll, sich eine eigene Bezeichnung (z.B. dri) zu überlegen, die nebst eigener Versionsnummer (z.B. startend mit 0) dem Kernel-Paket mitgegeben wird, damit der Kernel bei Bedarf wieder sauber aus dem System entfernt werden kann. Bevor man das folgende Kommando eingibt sollte man sich außerdem im klaren sein, dass das Kompilieren des Kernels je nach Systemleistung mehrere Stunden dauern kann (auf meinem P2/400-System dauerte die Kompilierung eines angepassten 2.6.12-Kernels gute 3h).
Kernel-Image bauen
Wir starten debian-like den Bau des Kernel-Images:
debian:/usr/src/linux# make-kpkg kernel_image --revision=dri.0 |
---|
Jetzt kann man das in "/usr/src" liegende Debian-Archiv bequem mit "dpkg -i" installieren:
debian:/usr/src/linux# cd .. debian:/usr/src# dpkg -i kernel-image-2.6.12-dri.0_i386.deb |
---|
Boot-Loader aktualisieren
Anschließend wird LILO konfiguriert. Sicherheitshalber sollte man "/etc/lilo.conf" selbst noch einmal mit dem Editor öffnen und auch den alten Kernel (mit dem das System ja auf jeden Fall gestartet werden kann) in das Bootmenü aufnehmen. Dazu fügt man etwa folgende Zeilen nach dem Standard-Kernel-Image ein:
/etc/lilo.conf : |
---|
image=/vmlinuz.old label=LinuxOLD read-only # restricted # alias=1 |
Beim Grub wird die "/boot/grub/menu.1st bearbeitet. Zu beachten ist, dass Grub die Partitionen anders deklariert. Die 1. Partition der Master-Platte am 1. IDE-Anschluss (dev/hda1) muss hier mit "(hd0,0)" angegeben werden. Das alte Device (/dev/hdb3) ergibt "(hd1,2)". Vielleicht bau ich die Config auch mal hier ein. ;-)
Anschließend müssen die Änderungen noch wirksam gemacht werden, indem lilo aufgerufen wird. Falls man den Grub vewendet, fällt dieser Schritt hier weg. Grub erkennt und aktualisiert den neuen Kernel automatisch beim nächsten Neustart:
debian:/# lilo |
---|
Jetzt kann das System neugestartet werden, und der neue Kernel sollte als "Linux" im Bootmenü verfügbar sein. Sollte der eigene Kernel nicht starten,
kann das System mit dem alten Kernel ("LinuxOLD") gestartet werden und erneut konfiguriert werden.
Beim Grub kann der Befehl grub-reboot aufgerufen werden, der automatisch auf den alten Kernel zurückgreift, falls beim neuen Probleme auftauchen.
Module selbst installieren
Laptop-Benutzer sind oft auf das Paket "pcmcia-cs" und die in ihm enthaltenen Module angewiesen. Um "pcmcia-cs" verwenden zu können, sollte die PCMCIA/CardBus-Unterstützung im Kernel deaktiviert sein, sonst kann es zu Konflikten kommen. Wir laden uns wieder die Quellen mittels apt herunter:
debian:/# apt-get install pcmcia-source |
---|
Anschließend finden wir in "/usr/src" eine Datei namens "pcmcia-cs.tar.gz", diese entpacken wir:
debian:/# cd /usr/src debian:/usr/src# tar -xvvzf pcmcia-cs.tar.gz |
---|
Module-Image bauen
Dies erzeugt einen Verzeichnisbaum modules unterhalb von "/usr/src". Wir wechseln wieder nach "/usr/src/linux" und kompilieren die pcmcia-cs-Module mittels:
debian:/usr/src/linux# make-kpkg modules_image --revision=dri.0 |
---|
Die Kennung nach "--revision=" muss dabei exakt mit der Kennung unseres eigenen Kernels übereinstimmen, den wir verwenden möchten. Anschliessend kann wieder das entstandene Debian-Paket installiert werden:
debian:/usr/src/linux# cd .. debian:/usr/src# dpkg -i pcmcia-modules-2.6.12_xxx+dri.0_i386.deb |
---|
Nach einem Neustart und Auswählen des neuen Kernels sollten nun auch die PCMCIA/CardBus-Dienste wieder verfügbar sein.
Die so entstandenen Images können immer wieder eingesetzt werden. Vor allem lohnt sich dieses Vorgehen bei schon etwas älteren Rechnern. Die Kompilierung erfolgt auf einem vorhandenen rechenstarken Computer und wird dann nur noch auf dem leistungsschwachen Rechner installiert. Der zeitraubende Kompiliervorgang entfällt somit.