Linux Kernel backen – the Debian Way
Braucht man unter Debian Etch (bzw. Ubuntu Linux) einen Treiber oder ein Feature, das im 2.6.18er Linux Kernel nicht verfügbar ist, so muss man sich selbst einen Kernel kompilieren. Natürlich möchte man hierbei möglichst wenig Aufwand betreiben und so nahe wie möglich an der Debian Paketverwaltung bleiben, um das System konsistent zu halten. Aus diesem Grund bietet Debian für das Erstellen und Kompilieren eines eigenen Kernels das Paket kernel-package an.
Nebem diesem Paket sollten wir zwei weitere Pakete installieren, um unseren Kernel zu konfigurieren:
aptitude install kernel-package build-essential libncurses5-dev
Hat man zusätzlich build-essential mit notwendigen Programmen zum Übersetzen von Quellcode und libncurses5-dev zur übersichtlicheren Konfiguration des Kernels installiert, macht man sich an das Herunterladen eines aktuellen Kernels auf www.kernel.org. Hat man seinen Wunschkernel gefunden, lädt man diesen runter und entpackt ihn z.B. nach /usr/src/ und linkt die Kernelsources dann traditionell nach /usr/src/linux:
tar xjvf linux-2.6.xx.tar.bz2 -C /usr/src
ln -s /usr/src/linux-2.6.xx /usr/src/linux
Nun kopieren wir die Kernelkonfiguration des mitgelieferten Debian Kernels in das Verzeichnis, in dem die eben entpackten Kernelquellen liegen. Dies hat den Vorteil, dass wir von einer funktionierenden Kernelkonfiguration ausgehen können.
cp /boot/config-`uname -r` /usr/src/linux/.config
Nun geht es ans Konfigurieren. Zuerst gehen wir die alte Konfiguration durch und überprüfen dabei neue Features, die wir in den Kernel aufnehmen wollen oder nicht. Danach sollte man auf jeden Fall noch einmal einen Blick in die Konfiguration werfen und möglichen Ballast wie nicht genutzte Treiber und Features rauswerfen.
cd /usr/src/linux
make oldconfig
make menuconfig
Nun können wir den Kernel kompilieren und dabei die *.deb Pakete für Debian erstellen.
make-kpkg buildpackage --revision 20071014 --initrd
Mit dem Parameter buildpackage geben wir an, dass wir alle Pakete bauen lassen wollen:
linux-doclinux-headerslinux-imagelinux-manuallinux-source
make-kpkg --targets gibt einen Überblick über die möglichen Ziele. Mit --revision geben wir die Revision des Debian Paketes an. Hierdurch verliert man nicht den Überblick, auch wenn man mehrere Kernelpakete der gleichen Version baut. Um die benötigte initial ramdisk zu erstellen, fügen wir den Parameter --initrd hinzu. Benötigen wir keine Module und bauen alles fest in den Kernel ein, kann man auf die RAM-Disk verzichten. Weitere nützliche Optionen von make-kpkg finden sich in der zugehörigen man-Page.
Nachdem der Kernel kompiliert ist und alle Pakete erstellt worden sind, finden sich diese unter /usr/src wieder. Die *.deb-Pakete lassen sich wie gewohnt installieren:
dpkg -i linux-(doc|headers|image|manual|source)-2.6.xx_rev_arch.deb
Um nur den Kernel zu installieren, reicht das Paket linux-image-2.6.xx_rev_arch aus. Dabei werden alle benötigten Dateien nach /boot kopiert, die RAM-Disk erstellt und update-grub ausgeführt. Hierbei kann jedoch eine Zeile in der /boot/grub/menu.lst fehlen, die nachgetragen werden muss um eine Kernel Panic bei benötigter RAM-Disk zu verhindern:
initrd /boot/initrd.img-2.6.xx
Nun sollte man einen Neustart wagen und überprüfen ob alles wunschgemäß funktioniert. Mit uname -r sollte man die neue Kernelversion angezeigt bekommen.
Auf diese Art und Weise erhält man einen aktuellen Kernel für sein Debian System, der vom Paketsystem erkannt und somit nicht durch ein (Kernel-)Update beeinträchtigt wird. Natürlich ist man für Updates des Kernels in diesem Fall selber zuständig und muss Kernelpatches bei Bedarf in Eigenregie auf die gleiche Art und Weise einspielen.
Related posts:
- Aktuelle Bacula Pakete für Debian Etch Im Moment migriere ich die komplette Backuproutine (wenn man die bisherige so nennen darf) auf...
- Debian Etch: ClamAV & Co. aktuell halten Wer Debian Etch nutzt und Software wie Virenscanner oder Anti-Spamsoftware einsetzt kennt das Problem: die...
- Howto: Installation von Nessus 3 unter Debian Etch Wer nach einem guten Vulnerability Scanner für Linux sucht, kommt kaum am freien Scanner Nessus...
- Bash Completion unter Debian Etch Die Autovervollständigung ist schon eine sehr hilfreiche Funktion der Bourne Again Shell. Um diese unter...
- Zeitsynchronisation unter Debian Etch mit chrony PCs speichern ihre Uhrzeit mithilfe eines kleinen Chips: der Realtime Clock (RTC). Häufig ist dies...



Stefan
Ich finde diese Vorgehensweise umständlich.
Der Kernel muss meiner Meinung nach nicht unbedingt im Paketmanagement auftauchen, das Paket zu bauen halte ich für relativ sinnlos. Außerdem mag ich die Benutzung von initrds nicht besonders…im Grunde kann man auf die auch verzichten, wenn man kein verschlüsseltes Dateisystem nutzt oder aus irgendeinem Grund ein proprietäres Kernel-Modul für die Controller- oder Festplattennutzung laden muss (das sollte man aber sowieso vermeiden).
matthias
Klar sollte der Kernel im Paketmanagement auftauchen. Ansonsten wird ja ein unnützes Update des “Original”-Kernels installiert.
Man mag über initrd denken was man will – um möglichst hohe Kompatibilität zu erzielen, ist es ziemlich nützlich. Aber wenn man sich seinen eigenen Kernel baut, kann man es auch weglassen. Stören tut es später eh nicht, da es ja nur den Bootvorgang beeinflusst.
mortice
Ich mag initrds auch nicht. Sie bringen eine unnötige Komplexität in die Geschichte. Warum sollte ich mein Filesystemtreiber als Modul kompilieren, um es dann in ein initrd zu packen, anstatt ihn einfach fest in den Kernel einzukompilieren?
matthias
Deswegen kompiliert man ja seinen Kernel selber – um alles Wichtige bereits im Kernel drin zu haben.
Bei den in Debian/Ubuntu mitgelieferten nicht auf die Hardware angepassten Kernel würde dies jedoch eindeutig den Rahmen sprengen! Daher ist hier initrd die bessere Lösung, als einen Riesenkernel zu haben.
Stefan
Immer diese Binärdistributionen
Nervofix
Hey ho…thx für dieses kleine aber feine tutorial…ohne das hätte ich noch stunden damit zu gebracht meinen kernel neu zu compilieren…
habe es erst mir hilfe des wikis auf http://www.debianforum.de versucht, aber da bekam ich dann ein “Kernel Panic” beim booten des neuen Kernels…
Jetzt das Tut hier probiert und einfach alles nach vorgabe eingehackt…klappt anstandslos =) und wenn man einen neuen kernel sich zusammen baut, kann man den alten mit der packetverwaltung wieder löschen…geneial….thx a lot…
matthias
Keine Ursache Nervofix. Aber nie vergessen bei Tutorials: nicht nur copy & paste, sondern auch das Hirn anschalten und mitdenken
lukas2511
Wuhuuu !
Compilen aufm P2er xD
DAS IST GEIL !! xDDD
Homeserver4Ever
Finde die anleitung sehr überschaubar
hättest vielleicht noch was sagen können zu “make oldconfig” weil da ja einige fragen auftauchen die für anfänger, die auch mal nen eigenen kernel backen wollen, nicht zu beantworten sind
mein trick dabei: immer weiter enter gedrückt halten bis man wieder in bash ankommt ^^
DocDOS
Klasse Anleitung… für Kompilierer unter Debian 5.0 (Lenny) sollte zu Beginn noch zlib1g-dev und/ oder zlib1g mit installiert werden..
Die fehlen sonst beim Package-Erstellen
Naznaz
Hallo,
vielen Dank für dieses Tutorial. Für mich war es sehr hilfreich, und viel besser als der Rest den man sonst findet. Vielen Dank, großartig!
MPB
VIELEN DANK!
Klasse Howto, ich hatte zwer im Hinterkopf wie es geht aber nach ein paar Jahren gets verloren
debian_user_2009
hi, also des HowTo ist echt klasse!
Hat jemand evt nen Link für ein HowTo, wo man sich einen Systemspezifischen Kernel bauen kann. D.h. wo z.b. menuconfig erläutert wird. Vorzugsweise natürlichen auf Deutsch!
bender72
THX