Sysresccd-manual-de Erstellen einer SystemRescueCd mit eigenem Kernel |
History |
Contents |
Überblick
Die SystemRescueCd verfügt über vier Kernel. Sie möchten vielleicht Ihren eigenen Linux-Kernel kompilieren, weil Sie evtl. einen anderen Treiber benötigen, aktuellere Quellen bevorzugen oder andere Kompilier-Optionen brauchen.
Diese Anleitung beschreibt, wie Sie Ihren eigenen Kernel direkt aus der SystemRescueCd kompilieren. Sie benötigen kein installiertes Linux-System. Alle Aufgaben für das Kompilieren können auch aus einem beliebigen anderen Linux-System heraus erledigt werden, solange Sie wissen, was Sie tun. Diese Anleitung basiert auf SystemRecueCd-1.1.0 weil es die erste Version war, welche die Entwicklungswerkzeuge beinhaltete (gcc, make, ...) die für die Kernel-Kompilierung notwendig sind. Versuchen Sie also nicht, diese Anleitung mit einer älteren version durchzuführen.
Nachdem die neuen Kernel-Quellen kompiliert sind, ist es notwendig eine angepasste SystemRescueCd mit dem kompilierten Kernel-Image und Modulen zu erstellen.
Vorbereiten des Systems
Diese Anleitung erklärt wie der Kernel von der SystemRescueCd aus kompiliert werden kann.
Booten Sie zuerst mit der SystemRescueCd-1.1.0 oder einer neueren Version.
Prüfen Sie die Voraussetzungen
Prüfen Sie die Version der SystemRescueCd und daß der gcc-Compiler installiert ist:
root@sysresccd /root % cat /root/version 1.1.0 root@sysresccd /root % gcc --version gcc (GCC) 4.2.4 (Gentoo 4.2.4 p1.0) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Bereiten Sie eine Partition mit etwas freiem Speicher vor
Sie benötigen mindestens 2GB freien Platz auf der Festplatte um die Quellen zu kompilieren und eine angepasste SysRescueCd zu erstellen. Sie können eine beliebige Partition mit Linux-dateisystem (ext3, reiserfs, reiser4, jfs, xfs, ...) verwenden. Diese braucht auch nicht leer zu sein.
Dieses beispiel benutzt die Partition /dev/sda6, eingehängt unter /mnt/custom:
mount /dev/sda6 /mnt/custom
Wir werden in /usr/src arbeiten. Erstellen Sie ein verzeichnis in dieser Partition und hängen Sie dieses unter /usr/src ein:
mkdir /mnt/custom/sources mount -o bind /mnt/custom/sources /usr/src
Das Skript erstellt uns zwei Verzeichnisse im Wurzelverzeichnis der Partition:
- /mnt/custom/sources: Arbeitsbereich zum Kompilieren des Kernels
- /mnt/custom/customcd: für die angepasste SysRescueCd
Herunterladen und vorbereiten der Quellen und Patches
Zuerst müssen die Vanilla-Quellen des Kernels heruntergeladen werden (linux-w.x.y.z.tar.bz2 wobei z=0)
cd /usr/src wget ftp://ftp.proxad.net/mirrors/ftp.kernel.org/linux/kernel/v2.6/linux-2.6.25.tar.bz2
Jetzt brauchen Sie die SysRescueCd Patches. Es gibt zwei Sets mit Patches:
- std-sources sind die Patches für das Kompilieren der Standard-Kernel (rescuecd und rescue64)
- alt-sources sind die Patches für das Kompilieren der alternativen Kernel (altker32 und altker64)
Sie müssen entscheiden, welche der Kernel-Quellen Sie nutzen wollen: entweder die Standard oder die alternativen.
Und so laden Sie die Patches herunter. Vergesen Sie nicht, die Versionsnummer in der URL durch die aktuellste zu ersetzen:
cd /usr/src wget -r http://kernel.sysresccd.org/sysresccd-1.1.0 -l1 -A bz2 --no-directories
Dann entpacken Sie die Hauptquellen:
tar xfjp linux-2.6.25.tar.bz2
Und Sie fügen die SystemRescueCd Patches in dieser Reihenfolge hinzu:
cd /usr/src/linux-2.6.25 bzcat ../std-sources-2.6.25.16_01-r16.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_02-nosquashfs.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_03-sqlzma-3.3.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_04-reiser4.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_05-aufs.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_06-loopaes.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_07-speakup.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_08-rtl8168.patch.bz2 | patch -p1 bzcat ../std-sources-2.6.25.xx_09-netdev-atl2.patch.bz2 | patch -p1
Die sysresccd Kernel Quellen bestehen aus verschiedenen Patches. Einige Patches sind notwendig, damit das System funktioniert, andere Patches sind nicht so wichtig. NAchfolgend die Patches die Sie behalten müssen, damit das System funktioniert:
- sqlzma: unterstützung für das squashfs Dateisystem mit lzma Komprimierung
- aufs: unterstützung für das aufs Dateisystem (ein weiteres unionfs)
Es steht Ihnen frei, weitere Patches hinzuzufügen, solange diese nicht in Konflikt mit anderen stehen oder die Quellen stören.
Konfigurieren Sie Ihren Kernel
Konfigurieren Sie die EXTRAVERSION
Wenn Sie uname -r eingeben, werden die Extra Version Informationen angezeigt:
root@sysresccd /root % uname -r 2.6.25.16-std110
Vielleicht wollen Sie die Standard EXTRAVERSION Werte anpassen. Das können Sie, indem das Haupt Makefile bearbeitet wird:
root@sysresccd /root % cd /usr/src/linux-2.6.25 root@sysresccd /usr/src/linux-2.6.25 % vi Makefile
Nachfolgend ein Beispiel von /usr/src/linux-2.6.25/Makefile
VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 25 EXTRAVERSION = .16-custom
Nutzen Sie die richtige Architektur
Sie wollen vielleicht einen 32bit-Kernel kompilieren, wenn Sie auf einem 64bit laufen, oder Sie wollen einen 64bit-Kernel kompilieren, selbst wenn Sie auf einem 32bit-Kernel laufen. In diesem Fall ist es wichtig, daß Sie den richtigen Wert für ARCH setzen bevor Sie einen make-Befehl ausführen. Als Beispiel nachfolgend was Sie tun müssen, wenn Sie auf einem 64bit-Kernel laufen (uname -m liefert x86_64) und Sie einen 32bit-Kernel kompilieren wollen:
cd /usr/src/linux-2.6.25 export ARCH=i386 sed -i -e '1i\ARCH=i386' Makefile
Einen 64bit-Kernel aus SystemRescueCd oder aus einem anderen 32bit-Linux zu erzeugen ist ein wenig schwieriger. Sie müssen zuerst crossdev installieren (starten Sie emerge crossdev in SystemRescueCd mit fertigem portage), und kompilieren Sie folgendermassen:
CROSS_COMPILE=x86_64-pc-linux-gnu- ARCH=x86_64 make
Danach wird die richtige Architektur verwendet wenn Sie die Optionen wählen und den Kernel kompilieren.
Wählen Sie die Kernel Kompilier-Optionen
Wenn Sie nicht alle Kernel Konfigurations-Optionen ausprobieren wollen, können Sie die offiziellen sysresccd-Optionen als Startpunkt wählen. Die Optionen des laufenden Kernels sind in /proc/config.gz verfügbar, sodaß Sie auf diese Weise eine Konfigurationsdatei erhalten:
cd /usr/src/linux-2.6.25 cat /proc/config.gz | gzip -d > myconfig
Wenn Sie im Grafikmodus arbeiten, können Sie die Optionen in einem grafischen Programm basierend auf GTK auswählen. Der Befehl make xconfig kann nicht benutzt werden, da das System nicht über die Qt-Bibliotheken verfügt. Also geben Sie einfach folgendes ein:
cd /usr/src/linux-2.6.25 make gconfig
Wenn Sie auf der Konsole arbeiten, können Sie stattdessen make menuconfig verwenden:
cd /usr/src/linux-2.6.25 make menuconfig
Wenn Sie die Kernel-Optionen auswählen, ist es sehr wichtig, daß Sie die folgenden Module aktivieren, diese müssen in den Kernel eingebunden werden, und nicht als Modul:
CONFIG_AUFS=y CONFIG_AUFS_FAKE_DM=y CONFIG_AUFS_BRANCH_MAX_127=y CONFIG_AUFS_RR_SQUASHFS=y CONFIG_AUFS_BR_XFS=y CONFIG_AUFS_WORKAROUND_FUSE=y CONFIG_AUFS_DEBUG=y CONFIG_AUFS_COMPAT=y CONFIG_SQUASHFS=y
Wenn Sie einen 64bit-Kernel kompilieren sollen (ARCH=x86_64), vergessen Sie nicht, die IA32-Unterstützung zu aktivieren (CONFIG_IA32_EMULATION=y), da Ihr Kernel ansonsten keine 32bit-Programme ausführt. Und die sysresccd besteht aus 32bit-Programmen.
Kompilieren und Installieren des Kernels
NAchdem die Optionen gewählt und in /usr/src/linux-2.6.25/.config gespeichert sind, können Sie die Quellen kompilieren:
make && make modules && make modules_install
Wenn der Kernel ohne Fehler kompiliert wurde, sollte ein komprimiertes Kernel-Image verfügbar sein:
root@sysresccd /root % find /usr/src -type f -name bzImage /usr/src/linux-2.6.25/arch/x86/boot/bzImage
Sie sollten auch neue Module entweder in /lib/modules oder /lib64/modules/ vorfinden.
Machen Sie einfach eine Sicherung dieser beiden Sachen (bzImage Datei und die neuen Module), die Sie in den nächsten Schritten benötigen werden.
Bauen Sie initramfs neu auf
Was ist ein initramfs
Ein initramfs (auch bekannt als init-ramdisk) ist ein komprimiertes cpio Archiv welches Dateien zur Initialisierung des Systems zur Startzeit beinhaltet. Diese Dateien werden vom Kernel genutzt, um das System zu initialisieren. Es werden grundlegende Dinge wie das Einhängen des Haupt root Dateisystems erledigt. Es ist nicht für alle Linux-Systeme notwendig, aber für komplexe Systeme schon, wenn sich z.B. das root-Dateisystem auf einem logischen LVM-Volume befindet. In vorherigen Kernelversionen waren die Ramdisks komprimierte loopback-Dateisysteme.
Die SystemRescueCd benötigt ein initramfs zum Booten, welches in isolinux auf der CDRom liegt. Alle Kernel nutzen das selbe initramfs um Platz zu sparen. Diese Datei beinhaltet die Module des Kernels der gebootet wird, sodaß es notwendig ist, die neuen Module in dieses initramfs zu kopieren.
Entpacken des aktuellen initramfs
Nachfolgend entpacken wir den Inhalt des alten initramfs mit cpio. Wenn Sie vom Netzwerk booten, müssen Sie eventuell initram.igz von Hand herunterladen.
mkdir /usr/src/initramfs cd /usr/src/initramfs zcat /mnt/cdrom/isolinux/initram.igz | cpio -id
Kopieren der neuen Module in das initramfs
Jetzt müssen Sie das Verzeichnis in dem die neuen Module gespeichert sind in das initramfs kopieren. Der Speicherort der Module kann entweder /lib/modules oder /lib64/modules sein:
cp -a /lib/modules/your-kernel-modules /usr/src/initramfs/lib/modules/
Neuaufbau des initramfs
Nachfolgend die Vorgehensweise für den Aufbau des neuen initramfs:
rm -f /usr/src/initram.igz cd /usr/src/initramfs find . | cpio -H newc -o | gzip -9 > /usr/src/initram.igz
Erstellen Sie eine angepasste CD mit dem neuen Kernel
Jetzt müssen Sie eine angepasste SystemRescueCd erstellen in welche Sie die neue initram.igz und die neuen Kernel-Module kopieren. Sie müssen sich an die detailierten Anweisungen im Kapitel Wie man die SystemRescueCd an eigene Bedürfnisse anpasst halten, ohne zu vergessen, die neuen Dateien zu kopieren. Nachfolgend eine zusammengefasste Vorgehensweise (Sie müssen die Dateipfade und Namen an Ihre Umgebung anpassen):
- Sie brauchen die Partition nicht wieder nach
/mnt/customeinzuhängen, da dies schon geschehen ist - Entpacken Sie die Datei aus dem squashfs Dateisystem:
/usr/sbin/sysresccd-custom extract
- Kopieren Sie die neuen Kernel-Module nach
/mnt/custom/customcd/files/lib/modulesoder/mnt/custom/customcd/files/lib64/modules:
cp -a /lib/modules/your-kernel-modules /mnt/custom/customcd/files/lib/modules
oder
cp -a /lib64/modules/your-kernel-modules /mnt/custom/customcd/files/lib64/modules
- Erzeugen Sie das neue komprimierte squashfs-Dateisystem:
/usr/sbin/sysresccd-custom squashfs
- Copy the new
initram.igz:
cp /usr/src/initram.igz /mnt/custom/customcd/isoroot/isolinux/initram.igz
- Kopieren Sie den neuen Kernel nach
/mnt/custom/customcd/isoroot/isolinux/. Sie müssen Ihrem Kernel-Image einen Namen geben. Beispielsweisevmlinuz, was ein üblicher Name für Kernel-Images ist, oder Sie können den offiziellen Kernel ersetzen und ihm den selben Namen geben:rescuecd.
cp /usr/src/linux-2.6.25/arch/x86/boot/bzImage /mnt/custom/customcd/isoroot/isolinux/vmlinuz
oder
cp /usr/src/linux-2.6.25/arch/x86/boot/bzImage /mnt/custom/customcd/isoroot/isolinux/rescuecd
Wenn Sie entschieden haben, dem Kernel-Image einen anderen Namen zu geben, müssen Sie die Dateien isolinux.cfg und syslinux.cfg aktualisieren, sodaß sie Boot-Einträge für den neuen Kernel enthalten. Nachfolgend sehen Sie, wie diese bearbeitet werden:
vim /mnt/custom/customcd/isoroot/isolinux/isolinux.cfg
Hier ein Beispiel für zwei Einträge, die Sie isolinux.cfg hinzufügen können. Der Erste hat keine Bootoptionen und der Zweite hat eine Option für das Setzen des Tastaturlayouts:
label mykernel kernel vmlinuz append initrd=initram.igz label mykernelfr kernel vmlinuz append initrd=initram.igz setkmap=de
Anders ausgedrückt müssen Sie entweder mykernel oder mykernelfr am allerersten Boot-Prompt eingeben, um die neue angepasste SystemRescueCd zu booten.
- Jetzt müssen Sie das ISO-Dateisystem erstellen:
/usr/sbin/sysresccd-custom isogen my_srcd
- Das fertige ISO-Abbild muss in
/mnt/custom/customcd/isofile/sysresccd-new.isogeschrieben worden sein. Kopieren Sie diese Datei wohin Sie wollen, oder brennen Sie sie direkt aus SystemRescueCd, falls Ihr Laufwerk nicht belegt ist. - Und dann hängen Sie die Partition sauber aus:
cd / ; umount /mnt/custom ; sync
