Kernel How To / Debian Sarge mit GRUB Bootloader / V1.0.2
Vorarbeiten:
Als Root am System anmelden.
Achtung.
Sollte Debian mit einem Kernel kleiner 2.6 installiert worden sein, dann sind die Module-init-Toos notwendig. Am besten sollte Debian mit "linux26" als Installationsstartparameter installiert werden, dann sind die Module-Init-Tools nicht notwendig.
Ab Kernel 6 müssen andere init-tools installiert werden.
( Wenn ein Kernel kleiner als 6 installiert wird, muss dieser Schritt übersprungen werden. )
Um die neuen module-init-tools zu installieren reicht unter Sarge:
apt-get install module-init-tools
1. Neue Kernel Sourcen Laden
Es sollte das Paket ncftp auf dem System installiert sein.
Wenn nicht, einfach nachinstallieren mit
apt-get install ncftp
Dann lokal in das Verzeichnis
cd /usr/src
wechseln, hier sollten die originalen Sourcen abgelegt werden.
Dann die neuen Sourcen herunterladen. Mit
ncftp ftp.kernel.org
einloggen und z.B. in das Verzeichnis
cd /pub/linux/kernel/v2.6
wechseln und das gewünschte Paket herunterladen.
get linux-2.6.13.3-tar-gz
Mit exit wieder aus dem ncftp aussteigen.
2. Sourcen entpacken
In dem Verzeichnis /usr/src liegt nun die komplette Kernelsource für den gewünschten Kernel. Diese Source muß ausgepackt werden
tar xvzf linux-2.6.13.3.tar.gz
Es entsteht ein neues Unterverzeichnis linux-2.6.13.3
Darin liegen die entpackten Sourcen. Nun in diese Verzeichnis wechseln. Die Datei linux.kernel.tar.gz nicht löschen, es kann beim Kompilieren zu Fehlern kommen, dann können die Sourcen einfach erneut ausgepackt werden.
3. Kernel konfigurieren
Es müssen die folgenden Pakete installiert sein um fortzufahren:
- gcc
- libc-dev
- binutils
- make
- gawk
- gzip
- shellutils
- bin86
- libncurses5-dev
Unsicher? Folgender Befehl hilft weiter.
apt-get install gcc libc6-dev binutils make gawk gzip shellutils bin86 libncurses5-dev
Somit werden alle notwendigen Modlue installiert.
Im Verzeichnis /usr/scr/linux-2.6.13.3
make menuconfig
aufrufen. Jetzt kann der Kernel konfiguriert werden(*1). Die Konfiguration wird in die Datei .config im aktuellen Verzeichnis abgelegt.
4. Kernel kompilieren
Im Verzeichnis des gewünschten Kernels, die Compilierung anstossen.
make dep clean bzImage modules modules_install
Bei Kernel ab Ver. 5 kann deb weggelassen werden, ein Ausführen hier schadet aber nicht, da nichts passiert außer einem Hinweis das die DEP nicht benötigt werden.
dep -> Beziehungen neu ordnen (kleiner Kernel Ver.5)
clean -> alle Temps löschen
bzimage -> gepackten Kernel erstellen
modules / modules_install -> Module generieren und installieren
5. Den neuen Kernel einbinden
Achtung: Fehlermeldungen beachten und bei Bedarf den Kernel ändern und erneut Compilieren. Wir befinden uns jetzt immer noch im Verzeichnis /usr/src/linux-2.6.13.3
Den neu erzeugten Kernel mit
mv arch/i386/boot/bzImage /boot/vmlinuz-2.6.13.3
in das Verzeichnis /boot/ verschieben. Hierbei hat es sich als hilfreich herausgestellt alle Dateien die nun für den neuen Kernel erzeugt werden mit -2.6.13.3 (z.B.) enden zu lassen, damit sie einwandfrei identifiziert werden können.
Achtung: Keinen vorhandenen Kernel überschreiben. Ebenso die neuerzeugte System.map nach /boot/ kopieren mit
mv System.map /boot/System.map-2.6.13.3
Achtung: Keine vorhandene System.map überschreiben.
6. System auf den neuen Kernel vorbereiten
Da die Kernel ab Version 6 die Gerätenamen anders verwalten als die Kernel der Reihe 4 sollt nun der DEVFSD installiert werden. Er kümmert sich um die Verlinkung der alten mit den neuen Gerätenamen.
apt-get install devfsd
Bei der Installation mit GRUB werden RamDisks (initrd) für die Kernel angelegt. Für den neuen Kernel wird diese mit dem folgenden Befehl erzeugt.
mkinitrd -o /boot/initrd.img-2.6.13.3
7. GRUB den neuen Kernel mitteilen
Die Einträge in GRUB nach der Installation von Sarge sehen für den 2.4.27 Kernel wie folgt aus.
less /boot/grub/menu.1st
(Am Ende der Datei sind die folgenden Einträge zu finden)
title Debian GNU/Linux, kernel 2.4.27-2-386
root (hd0,0)
kernel /boot/vmlinuz-2.4.27-2-386 root=/dev/hda1 ro
initrd /boot/initrd.img-2.4.27-2-386
savedefault
boot
title Debian GNU/Linux, kernel 2.4.27-2-386 (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.4.27-2-386 root=/dev/hda1 ro single
initrd /boot/initrd.img-2.4.27-2-386
savedefault
boot
GRUB wird nun mit update-grub mitgeteilt das ein neuer Kernel bereitliegt der gebootet werden kann.
Die Ausgabe des update-grub sollte wie folgt aussehen.
Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Searching for splash image... none found, skipping...
Found kernel: /boot/vmlinuz-2.6.13.3
Found kernel: /boot/vmlinuz-2.4.27-2-386
Updating /boot/grub/menu.lst ... done
Es wurde also unser neuer Kernel gefunden und eingebunden.
Sieht man sich die Datei erneut mit
less /boot/grub/menu.1st
an, so ist der neue Kernel eingetragen:
1. ## End Default Options ##
title Debian GNU/Linux, kernel 2.6.13.3
root (hd0,0)
kernel /boot/vmlinuz-2.6.13.3 root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.13.3
savedefault
boot
title Debian GNU/Linux, kernel 2.6.13.3 (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.13.3 root=/dev/hda1 ro single
initrd /boot/initrd.img-2.6.13.3
savedefault
boot
title Debian GNU/Linux, kernel 2.4.27-2-386
root (hd0,0)
kernel /boot/vmlinuz-2.4.27-2-386 root=/dev/hda1 ro
initrd /boot/initrd.img-2.4.27-2-386
savedefault
boot
title Debian GNU/Linux, kernel 2.4.27-2-386 (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.4.27-2-386 root=/dev/hda1 ro single
initrd /boot/initrd.img-2.4.27-2-386
savedefault
boot
1. END DEBIAN AUTOMAGIC KERNELS LIST
.. und den neuen Kernel testen.
Das System rebooten und die erste Ausgabe von GRUB zeigt nun 4 Möglichkeiten an, wie das System gebootet werden kann. Es wird nun versucht den neuen Kernel zu booten, sollte das fehlschlagen muß der Kernel erneut angepasst werden.
ACHTUNG
Bei einer Kernelpanik bzgl. DEVFS sollte die GRUB Datei wie folgt erweitert werden:
title Debian GNU/Linux, kernel 2.6.13.5
root (hd0,0)
kernel /boot/vmlinuz-2.6.13.5 root=/dev/hda1 ro devfs=nomount
initrd /boot/initrd.img-2.6.13.5
savedefault
boot
title Debian GNU/Linux, kernel 2.6.13.5 (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.13.5 root=/dev/hda1 ro single devfs=nomount
initrd /boot/initrd.img-2.6.13.5
savedefault
boot
Der Kernel sollte dann problemlos durchbooten.
Das System kann im Fehlerfall resettet werden und erneut mit dem alten Kernel gestartet werden.
Mit 'cat /proc/version' wird die aktuelle Kernelversion des Systems zur Laufzeit angezeigt.
Viel Erfolg !!
Bugreport bitte an
heiko(at)lug-viersen(dot)de
30.12.2005 / 10.02.2006 / 06.06.2006 / 09.08.2006