[[:tux|{{ :linux.png?40|}}]]
===== Neuen Kernel in Debian (Squeeze) einspielen =====
Grundvoraussetzung für das Kompilieren eines neuen Linux Kernels in Debian, sind die Quellen. Man kann entweder auf die offiziellen Linux Kernel zurückgreifen, welche auf www.kernel.org heruntergeladen werden können, oder die für Debian angepassten Quellen im Online Repository. In der Debian Variante sind idR bereits einige an die Distribution angepassten Patches enthalten, so dass Sie auf diese zurückgreifen sollten, sobald diese Quellen verfügbar sind.
\\
==== Kernel Quellen und notwendige Pakete installieren ====
Installieren Sie zunächst die notwendigen Pakete, welche für das Backen eines neuen Kernels notwendig sind. Das Paket >>bin86<< ist nur auf einer >>i386<<- Maschine notwendig:
# aptitude install **gcc make libc6-dev binutils gawk build-essential bzip2 fakeroot initramfs-tools kernel-package libncurses5-dev**
Laden Sie die gewünschten Kernel Quellen:
# aptitude install linux-source-2.6.38
**Note**: Zur Erstellung dieser Anleitung waren die Kernel Sources für das Release 2.6.38 noch nicht im normalen Stable Archiv verfügbar, Sie können aber derzeit (05/11) über das >>Testing<< Archiv bereits darauf zugreifen. Erweitern Sie Ihre >>/etc/apt/sources.list<< dafür wie folgt mit der Zeile >>deb http://ftp.debian.org/debian/ testing main contrib non-free<< und führen ein >>aptitude update<< aus:
# deb cdrom:[Debian GNU/Linux 6.0.0 _Squeeze_ - Official i386 NETINST Binary-1 20110205-14:34]/ squeeze main
#deb cdrom:[Debian GNU/Linux 6.0.0 _Squeeze_ - Official i386 NETINST Binary-1 20110205-14:34]/ squeeze main
deb http://ftp.de.debian.org/debian/ squeeze main
deb-src http://ftp.de.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
deb http://ftp.de.debian.org/debian/ squeeze-updates main
deb-src http://ftp.de.debian.org/debian/ squeeze-updates main
deb http://ftp.debian.org/debian/ testing main contrib non-free
**Important**: Nachdem Sie die Kernel Quellen aus dem >>Testing Archiv<< geladen haben, entfernen Sie unbedingt diese Quelle wieder aus Ihrer >>sources.list<< und führen erneut ein >>aptitude update<< aus, andernfalls werden uU auch weiteren Pakete aus diesem - noch nicht wirklich freigegeben - Archiv geladen!
Navigieren Sie nach >>/usr/src<< und entpacken Sie das Archiv:
# cd /usr/src
/usr/src # tar -xvjf linux-source-2.6.38.tar.bz2
Das Kernel-Quellverzeichnis sollte immer **''>>/usr/src/linux<<''** heißen und die Kernel-Quellen des aktuellen Kernels enthalten. Vor allem, wenn Sie die Quellen mehrerer Kernel dort ablegen achten Sie darauf, dass Sie die Verzeichnisse der Kernel-Quellen der einzelnen Kernel-Versionen eindeutig benannt sind (zB linux-source-2.6.32-5-686). Legen Sie einen Symlink auf die Quellen des zukünftigen Kernels an:
/usr/src # ln -s linux-source-2.6.38 linux
Wechseln Sie anschließend in das Verzeichnis >>/usr/src/linux<<
/usr/src # cd linux
\\
==== Current Minimal Requirements ====
Die Datei >>./Documentation/Changes<< zeigt Ihnen eine Liste, in welchen Versionen notwendige Programme mindestens vorliegen müssen, um Konflikte zu vermeiden. Diese Liste bedeutet aber nicht, dass alle dieser Pakete auch zwingend benötigen:
Current Minimal Requirements
============================
Upgrade to at *least* these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you.
Again, keep in mind that this list assumes you are already
functionally running a Linux 2.4 kernel. Also, not all tools are
necessary on all systems; obviously, if you don't have any ISDN
hardware, for example, you probably needn't concern yourself with
isdn4k-utils.
o Gnu C 3.2 # gcc --version
o Gnu make 3.80 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.41.4 # e2fsck -V
o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs
o xfsprogs 2.6.0 # xfs_db -V
o squashfs-tools 4.0 # mksquashfs -version
o btrfs-progs 0.18 # btrfsck
o pcmciautils 004 # pccardctl -V
o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.9 # oprofiled --version
o udev 081 # udevinfo -V
o grub 0.93 # grub --version
o mcelog 0.6
o iptables 1.4.2 # iptables -V
Sie können das Skript >>./scripts/ver_linux<< aufrufen, um die aktuellen Versionen der Pakete auf Ihrem System abzurufen:
/usr/src/linux# ./scripts/ver_linux
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
Linux debian-6-1 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 GNU/Linux
Gnu C 4.4.5
Gnu make 3.81
binutils 2.20.1
util-linux 2.17.2
mount support
module-init-tools 3.12
e2fsprogs 1.41.12
Linux C Library 2.11.2
Dynamic linker (ldd) 2.11.2
Procps 3.2.8
Net-tools 1.60
Kbd 1.15.2
Sh-utils 8.5
Modules Loaded vmblock vsock vmmemctl vmhgfs pvscsi acpiphp loop snd_ens1371 gameport snd_rawmidi snd_seq_device snd_ac97_codec ac97_bus snd_pcm evdev snd_timer snd soundcore parport_pc parport psmouse serio_raw shpchp snd_page_alloc i2c_piix4 pcspkr vmci pci_hotplug i2c_core button container processor ac ext3 jbd mbcache sg sr_mod cdrom ata_generic sd_mod crc_t10dif pcnet32 vmxnet ata_piix mptspi uhci_hcd floppy libata ehci_hcd mptscsih mptbase scsi_transport_spi mii usbcore nls_base scsi_mod thermal thermal_sys
IdR sind hier keine Probleme zu erwarten, wenn Sie die Kernel Quellen aus dem Debian-Archiv >>Stable<< oder >>Testing<< verwenden. Wenn man Kernel-Quellen aus dem Debian-Archiv >>Unstable<< verwendet, sollten Sie hier eine Weile mit dem Abgleichen der Programmversionen verbringen.
\\
==== Kernel konfigurieren ====
[{{ :tux:kernel_1.png?250|Bild 01}}]
[{{ :tux:kernel_2.png?250|Bild 02}}]
Der Kernel kann vor dem Kompilieren mit sehr umfangreichen Konfigurationen seinen bestimmten Bedürfnissen konfiguriert werden. Am einfachsten ist es jedoch erst mal die aktuelle Konfiguration als Grundlage zu verwenden und ggf auf dieser Basis aufbauend, die weiterführenden Konfigurationen vorzunehmen. Kopieren Sie hierfür die Konfigurationsdatei des aktuellen Kernels in das Verzeichnis >>/usr/src/linux<< und benennen sie >>.config<<. Die aktuelle Kernelkonfiguration finden Sie in >>/boot<< und heißt in meinem Fall >>config-2.6.32-5-686<<. Sie trägt idR die Versionsnummer des aktuellen Kernels im Namen:
/usr/src/linux # cp /boot/config-$(uname -r) .config
Starten Sie nun einen Konfigurationshelfer wie zB >>make menuconfig<<. Hier wird ein Konfigurationsinterface aufgerufen, welches Ihnen die Möglichkeit gibt, den Kernel neu zu konfigurieren:
/usr/src/linux # make menuconfig
Sie können im Konfigurationseditor mit der Space-Taste eine Option an- oder abwählen ([ ] -> abgewählt; [*] -> angewählt) oder als Modul auswählen ([M]); mit der ?-Taste die Hilfe dazu einblenden und mit der /-Taste, gefolgt vom Suchstring nach bestimmten Optionen suchen.
Um die aktuelle Konfiguration in den Editor zu laden, wählen Sie die Option >>Load An Alternative Configuration File<< (Bild 01) und wählen Sie die Konfigurationsdatei >>.config<<, welche Sie zwei Schritte zuvor in das Quellverzeichnis des zu kompilierenden Kernels geladen haben (Bild 02).
Wenn die Konfiguration abgeschlossen ist, bestätigen Sie den Konfigurationseditor mit >>Exit<< und bestätigen Sie ebenfalls das Speichern der neuen Konfiguration.
**Note:** In diesem Zusammenhang ist es meist sinnvoll den neuen Kernel für Ihr System zu optimieren. IdR werden Systeme erst mal mit einem pre-compiled Kernel installiert. Dieser enthält Hardware Support für Hardware die Sie niemals haben werden und Sprachpakete für Sprachen, die Sie niemals benötigen werden. Sie können jetzt Ihren neuen Kernel eine Diät verpassen und alles was Sie nicht brauchen aus den Kernel entfernen. Wenn Sie sich aber nicht sicher sind, lassen Sie es wie es ist. Dieser Schritt ist rein kosmetisch, beeinflusst aber die Performance positiv.
Hier eine Anleitung über die Kernel-Konfiguration zu geben, sprengt dieses Tutorial bei Weitem und übersteigt auch meinen Horizont, zumindest wenn es in die Details geht. Bevor Sie jetzt aber Ihren neuen Kernel genau so backen, wie der alte gestrickt ist, wäre die Option >>File System -> Native Language Support<< ein guter Ausgangspunkt, das ein oder andere Sprach-Modul nicht benötigter Sprachen mal wegzulassen. Hier können Sie zB mal den ganzen China-, Japan- und Russisch-Support entfernen, es werden Ihnen dort sicherlich noch ein paar andere Sprachen über den Weg laufen, die Ihnen "spanisch" vorkommen. Wird nicht viel sein aber immerhin mal etwas... ;-)
\\
==== Kernel und Debian Paket bauen ====
Das Paket >>kernel-package<< bringt das Programm >>make-kpkg<< mit, welches unter Debian anstelle der Linux üblichen Kommandos >>make menuconfig; make dep; make bzImage; make modules<< verwendet werden kann. >>make-kpkg<< bedient nun das Debian Paketmanagement (dpkg) adäquat und kompiliert den neuen Kernel, erzeugt je nach verwendeter Optionen ein über das Paketmanagement installierbares deb-Paket, welches neben dem Kernel auch gleich die Initial-RAM-Disk enthält, erteilt Revisionsnummern für das Paket-Management etc.
Führen Sie aber zuerst das Kommando >>make-kpkg clean<< aus, um die Verzeichnishierachie der Kernel-Quellen aufzuräumen und die >>kernel -package<< Parameter zurückzusetzen. Dadurch wird zwar eine vollständige Neukompilierung des Kernels veranlasst, was je nach inkludierter Optionen und abhängig von der Leistungsfähigkeit des Rechners ca. eine Stunde bis hin zu mehreren Stunden dauern kann aber zB bei der Angabe einer neuen Kernelrevision notwendig sein wird:
/usr/src/linux # make-kpkg clean
Anschließend kompilieren Sie den Kernel, bauen das Debian Paket und erstellen zugleich die Initial-Ramdisk:
/usr/src/linux # make-kpkg --rootcmd fakeroot kernel_image --revision pronto.1 --initrd
* Die Optionen >>--rootcmd<< und >>fakeroot<< sind nur notwendig, wenn der User, welcher das Kommando ausführt nicht >>root<< ist.
* Die Option >>kernel_image<< ein Debian Paket mit dem Linux-Kernel, der aus dem Quellcode übersetzt wird und aller konfigurierten Module.
* Die Option >>--revision pronto.1<< erzeugt eine Revisionsnummer (pronto.1) für das Debian Paket und wird eigentlich nur vom Paket-Management verwendet.
* Die Option >>--initrd<< ruft alle zusätzlichen Aktionen auf, welche notwendig sind, eine passende Init-RAM-Disk zu erzeugen.
Das fertige Paket liegt anschließend in >>/usr/src<< und kann mit dem Befehl >>dpkg -i //[Paketname]//.deb<< installiert werden:
# dpkg -i //[Paketname]//.deb
An dieser Stelle wird automatisch >>depmod<< aufgerufen, was die Modulliste aktualisiert. Ferner wird die Initial Ramdisk automatisch erstellt (>>mkinitramfs-kpkg<<) und der Bootloader Grub2 wird aktualisiert. Beim nächsten reboot, sollte Ihr System automatisch mit dem neuen Kernel starten.
# reboot
{{ :tux:kernel_3.png |}}
--- //pronto 2011/05/16 00:00// ((http://debiananwenderhandbuch.de/kernelbauen.html))((http://newbiedoc.sourceforge.net/system/kernel-pkg.html))