| 20.4.2006 | Das Kernel |
|
|
|
Hier steht nicht, wie man ein Kernel kompiliert. Das haben andere schon viel besser und ausführlicher geschrieben:
Hier steht das Drumherum: Wie man den Source-Tarball herunterlädt, wie man die PGP-Signatur prüft, wie man sein Kernel auf eine höhere Version hochpatcht, wo man nachsieht, ob man für das neuere Kernel auch neuere Tools und Utilities braucht, wo man sie herbekommt, wie man ihre Signaturen prüft, und was man machen muß, um das neue Kernel zu booten. Das steht zwar - im Prinzip - auch schon woanders, aber verstreut Kernel herunterladenWenn man seinen Internetzugang in Deutschland hat, nimmt man http://www.kernel.org/ nur, um sich die Informationen anzusehen, zum Download empfiehlt sich dann aber http://www.kernel.org/mirrors/countries/html/DE.html (Links: /pub/linux). Von dort lädt man das Kernel und seine Signatur herunter, z.B.:
Nimmt man .tar.gz oder .tar.bz2
Wenn man bzip2/bunzip2 hat, sollte man die .tar.bz2 Archive nehmen, weil sie deutlich kleiner sind. Kernel Updates herunterladenWenn man bereits ein Kernel hat, z.B. Version 2.6.0 und man möchte auf Version 2.6.7 updaten, dann muß man nicht noch einmal viele Megabytes an Traffic erzeugen (die irgendein freundlicher Sponsor ja schließlich bezahlen muß), sondern man lädt sich patch-2.6.1.bz2 bis patch-2.6.7.bz2 (und ihre Signaturen) herunter (Kernel patchen, siehe weiter unten). Kernel Archive Verification Key herunterladen:Die Dateien zum Herunterladen sind (endlich) alle signiert. Es ist notwendig, diese Signaturen zu prüfen, auch und gerade dann, wenn man eigentlich zu faul ist. Wenn einem nämlich eine geänderte Datei untergeschoben wird, die irgend etwas Böses tut, z.B. Paßworte ausspionieren, dann wird das Reparieren des Schadens sehr viel mehr Arbeit machen als das Prüfen der Signatur gewesen wäre. Für das Kernel ist eine Anleitung auf http://www.kernel.org/signature.html Ein Keyserver ist z.B. wwwkeys.pgp.net. Es gibt mehrere Möglichkeiten, z.B.:
0x517D0F0E ist die "Identity" des aktuellen "Kernel Archive Verification Key". Soweit ich es verstanden habe, ist die Identity ein Hash-Value (eine Art Quersumme), der aus dem Key berechnet wird. Den Key importierenWie man den heruntergeladenen Key in sein Schlüsselbund (pubring.gpg) übernimmt, steht auf http://kai.iks-jena.de/pgp/gpg/gpg4.html#a3 Ich mache es bei mir so:
Alles einmal neu importieren:
Signatur prüfen
Kernel entpacken
(Die letzte Möglichkeit muß man dann nehmen, wenn man zwar bzip2 hat, aber wenn tar nicht dafür gepatcht ist, bzip2 zu benutzen.) Kernel updaten / Kernel patchenAngenommen, man hat Kernel 2.6.0 und die Patches 2.6.1 bis 2.6.7. Dann kann man sich daraus Kernel 2.6.7 generieren. Dabei sollte man am besten die vorhandenen Kernel-Sourcen (/usr/src/linux-2.6.0) in Ruhe lassen und nur in einem neuen Directory /usr/src/linux-2.6.7 arbeiten. Man entpackt den vorhandenen Tarball noch einmal "ganz frisch" z.B. in /tmp/ und verschiebt dann /tmp/linux-2.6.0/ nach /usr/src/linux-2.6.7/
Zum Patchen benutzt man das Skript linux-2.6.7/scripts/patch-kernel (man beachte die Pünktchen in der letzten Zeile, die gehören zum Befehl mit dazu):
Oder wenn man die Patches lieber einzeln von Hand anwenden möchte:Die normalen Versions-Patches sind alle so gemacht, daß man zwei Kernel-Trees hatte, z.B. 2.6.11 und 2.6.11.5 und dann z.B. aufgerufen hat: diff -Naur linux-2.6.11/ linux-2.6.11.5/ > patch-2.6.11.5 Dann stehen in der Patchdatei ganz oben diese beiden Directory-Trees drin, und dann wendet man den Patch normalerweise so an, daß man in das oberste Kernel-Directory wechselt, also z.B. cd /usr/src/linux-2.6.11 und dann dem Patch beim Aufruf sagt, daß man jetzt eine Ebene tiefer drin ist, und er den ersten Pfadanteil (also "linux-2.6.11/") weglassen soll: patch -Np1 -i ../patch-2.6.11.5 (Wenn man den Patch später rückgängig machen will, muß es statt "-N" heißen: "-R".) Wie kommt man von 2.6.16.7 nach 2.6.16.9Downloadadressen: http://www.kernel.org/mirrors/countries/html/DE.html dort jeweils z.B.: /pub/linux/kernel/v2.6/patch-2.6.16.7 und /pub/linux/kernel/v2.6/patch-2.6.16.9 nach: /usr/src/ Kernel-Tree sei: /usr/src/linux-2.6.16/ Kommandos: cd /usr/src/linux-2.6.16 Man patcht also von 2.6.16.7 zurück nach 2.6.16 und dann nach 2.6.16.9 Das Kernel kompilierenDas ist sehr häufig und sehr ausführlich beschrieben worden, z.B.:
Nur ganz kurz:
Hinterher läßt man sich den Returncode ausgeben: echo $? Da muß 0 angezeigt werden, dann sind keine Fehler aufgetreten. Das Kernel bootfähig machenMan kopiert 3 Dinge aus dem Kernel-Source-Tree heraus:
(.config ist zwar zum Booten nicht nötig, aber es ist praktisch, zu jedem Kernel auch seine Konfiguration aufzubewahren.) Dann schreibt man eine Strophe in /etc/lilo.conf für das neue Kernel: image=/boot/vmlinuz-2.6.7 und ruft /sbin/lilo auf. Wenn die Kiste nicht mehr bootetManchmal hat man eben Pech. Im Kernel-Howto steht, wie man dann eine Bootdiskette macht. Meistens geht es aber einfacher. Mir ist es z.B. schon ein paarmal passiert, daß ich den Lilo-Aufruf vergessen hatte, und daß dann aber auch das alte Kernel nicht mehr gebootet hat, weil die neuen Module in das gleiche Verzeichnis installiert wurden wie die alten, aber bei den neuen fehlte leider eins, weil ich es diesmal fest einkompiliert hatte. Und schon bleibt die Kiste beim Booten irgendwo hängen. Es gibt noch mehr solche Möglichkeiten, wo man dann nur den Lilo-Aufruf nachholen muß. Meistens reicht es dann, wenn man ein Rettungssystem von Diskette bootet, und dann (angenommen, die Rootpartition ist hda3):
und neu booten. Zur Not kann man das "exit" auch noch weglassen, dann funktioniert umount nicht: "device busy" wegen des noch aktiven chroot. Dann prüft er das Dateisystem beim nächsten Booten, kein Beinbruch. Also nur drei Worte:
Fertig. Die Befehle, um eine Bootdiskette zu machen, mit "rdev" usw., wer kann sich sowas schon auswendig merken, und in der Situation, wenn die Kiste nicht bootet, kann man immer so schlecht nachsehen. Man sollte sich übrigens angewöhnen, alle Kernels in lilo.conf als "optional" einzutragen, so daß man bei solchen Rettungsversuchen - unter Streß - nicht erst noch alles Mögliche mounten muß, sondern daß nur das eine, wichtige Hauptkernel gefunden werden muß. Als Rettungssystem kann man z.B. "Toms Root Boot" nehmen: http://www.toms.net/rb/ , oder auch die Installationsdisketten bzw. die CD der Distribution, oder auch "Knoppix": http://www.knopper.net/knoppix/ Anmerkungen zu Kernel 2.6.xIm Kernel-Source-Tree, in Documentation/Changes findet man eine Liste von Tools und Utilities mit den benötigten Versionsnummern, und mit den Kommandos, um die vorhandenen Versionsnummern zu ermitteln. Zur Zeit sieht die Liste so aus:
|
| abatz.de | Jörn Abatz - Technische Software | Impressum |