Kernel selber kompilieren

Der klassische Weg mit make (config, menuconfig oder xconfig) und make install scheint unter Debian nicht der richtige zu sein, da der installierte Kernel so an der zentralen Paketverwaltung vorbei installiert wird, mit allen Nachteilen, die damit zusammenhängen.

Baut man den Kernel mit make-kpkg, erhält man danach ein deb-Paket, welches mit dpkg installiert werden kann.

Der Weg (soweit ich das verstanden habe, denn bei den Modulen habe ich noch weiße Flecken, s.u.) für einen 2.6er Kernel, der über eine Ramdisk geladen wird, sollte dann wie folgt sein:

  1. Evtl. fehlende Pakete wie kernel-package, ncurses-dev, fakeroot, module-init-tools, initrd-tools, procps, wget oder bzip2 installieren (apt-get update, apt-get install Paketname)
  2. Kernel-Source: Entweder von kernel.org ziehen und nach /usr/src entpacken, oder das gewünschte Paket "kernel-source-2.6.x-x" via apt-get installieren
  3. Symlink /usr/src/linux auf neues Kernel-Quellcodeverzeichnis einstellen "ln -s /usr/src/kernel-source-2.6.x-x linux"
  4. cd /usr/src/linux
  5. make menuconfig (oder make xconfig, make config will sich wohl keiner antun), evtl. vorher alte Kernelconfig laden (.config-2.6.x aus /boot). In der Konfiguration vor allem den Prozessortyp wählen (evtl. eine allgemeinen, wenn der Kernel auch auf anderen Systemen benutzt werden soll), außerdem Unterstützung für Ramdisk-Kernel (initrd) auswählen
  6. make-kpkg clean
  7. fakeroot make-kpkg --revision=custom.1.0 kernel_image
    (die Revision kann natürlich frei vergeben werden, ist nur ein Beispiel)
  8. nun sollte ein Paket kernel-image-2.6.x.x_custom.1.0_i386.deb unter /usr/src liegen (falls man 586 oder anderes in der Kernel-Konfiguration unter "Processor type and features" gewählt hat, heißt der Name natürlich entsprechend)
  9. Kernel installieren: dpkg -i kernel-image-2.6.x.x_custom.1.0_i386.deb
  10. cd /boot/
  11. mkinitrd -o initrd.img-2.6.x.x
  12. /etc/lilo.conf editieren, neuen Eintrag ergänzen, bspw.:

    default=Linux-2.6.x-1.0

    image=/boot/vmlinuz-2.6.x.x
    label=Linux-2.6.x-1.0
    read-only
    initrd=/boot/initrd.img-2.6.x.x

  13. lilo
  14. shutdown -r now
  15. uname -r