Gentoo Logo

Haftungsausschluss: Dieses Dokument ist nicht gültig und wird nicht mehr gepflegt.


Gentoo Linux Genkernel Leitfaden

Inhalt:

1.  Einleitung

Grundprinzip

Genkernel ist ein Hilfsprogramm, welches Benutzern, die sich nicht mit der Kompilierung eines Kernels auskennen, hilft, indem es diesen Prozess automatisiert. Es kann Ihnen helfen einen Kernel zu erstellen, der ähnlich denen auf der Gentoo Installations-CD ist, welche dafür vorgesehen sind, die Hardware-Konfiguration Ihres Systems automatisch zu erkennen. Einige Benutzer könnten auch daran interessiert sein, genkernel für Hardware, welche Initalisierung und einen funktionierenden Kernel benötigt, bevor das System hochfährt, zu benutzen. Da genkernel automatisch Ihre Kernelmodule kompiliert, können Sie Hardware benutzen, welche bestimmte Modulparameter benötigt, um ordnungsgemäß zu funktionieren.

Zielgruppe

Wenn Sie sich nicht mit der Kompilierung eines Kernels auskennen oder einfach Ihre Hardware-Konfiguration nicht kennen, ist genkernel ein sehr nützliches Werkzeug. Es wurde hergestellt, um Ihnen die Qual der Kernelkompilierung abzunehmen, und unterstützt standardmäßig die meiste Hardware.

Wenn Sie jedoch wissen, welche Treiber Ihr System benötigt, können Sie weiterhin die Zeit, die für die Kernelkompilation benötigt wird, reduzieren. Dies ist möglich, da Sie genkernel anweisen können, nur Treiber, die für Ihre Hardware relevant sind, zu erstellen. In den meisten Fällen ist die Anzahl der erforderlichen Treiber kleiner (ebenso die Zeit zur Kompilation des Kernels) als die, die die standardmäßige Konfiguration anbietet.

Genkernel installieren

Um genkernel zu erhalten, führen Sie emerge genkernel auf einer Kommandozeile aus. Falls Sie die Gentoo Reference Platform (GRP) benutzen, vergessen Sie nicht binäre Pakete durch Übergabe des -k Parameters an emerge zu installieren. Da die GRP eine ältere Version von genkernel besitzt, können die Flags unterschiedlich sein. Konsultieren Sie genkernel --help in diesem Falle, um Hilfe zu erhalten, wie die Version von genkernel auf Ihrem System zu benutzen ist.

2.  Mit genkernel arbeiten

Wie genkernel zu benutzen ist

Obwohl es mehrere Wege gibt, genkernel auszuführen, wird die einfachste Methode durch genkernel all. Hier wird eine generelle Konfiguration, welche für für die meisten Systeme gut funktioniert, verwendet. Wie bereits erwähnt ist diese Methode nicht ohne Nachteile; die meisten Module, die erstellt werden, sind für den durchschnittlichen Benutzer nutzlos und erhöhen die Kompilierzeit. Es folgt ein effizienterer Ansatz, der durch das Überreichen bestimmter Flags and genkernel als root zu erhalten ist:

Befehlsauflistung 2.1: Ausführen von genkernel (mit Flags)

# genkernel --splash --no-install --no-clean --menuconfig all

Der obige Befehl bewirkt, dass genkernel einen Kernel mit aktiviertem Framebuffersplash (--splash), der manuell installiert werden muss (--no-install), erzeugt. Während der Kernel-Quellbaum vorbereitet wird, wird genkernel es unterlassen, jegliche bereits bestehende Objektdateien im Quellbaum zu entfernen (--no-clean). Ein menü-betriebenes Konfigurationswerkzeug wird dargestellt, welches dem Benutzer ermöglicht, die Module auszuwählen, welche für das System gebaut werden sollen (--menuconfig).

Es gibt noch andere Flags, welche das Verhalten von genkernel beeinflussen. Zum Beispiel bewirkt das Ersetzen von --no-install durch --install eine automatische Installation des Kernels im /boot Verzeichnis. Durch Benutzen des --mountboot Flags wird es genkernel erlaubt, die /boot Partition automatisch zu mounten, falls dies erforderlich ist.

Nicht vergessen, genkernel wurde erstellt, um die Kernelkompilation leicht und stressfrei zu machen. Aus diesem Grund bietet genkernel einige Flags an, welche diesen Vorgang erleichtern. Zum Beispiel gibt es Flags, welche bei der Kernelkonfiguration helfen, während andere die eigentliche Kompilation beeinflussen. Einige Flags helfen sogar den Kompilationsprozess zu debuggen. Für diejenigen, die an weiterer Optimierung interessiert sind, gibt es Flags, welche das Zusammenbauen, Verpacken und sogar die Kernel-Initialisierung betreffen.

Der Rest dieses Kapitels untersucht die Funktionalität verschiedener Flags und vorhandener Aktionen für genkernel. Einige der Flags haben Varianten, welche die gegenteilige Operation durchführen. Diese tragen das Prefix no- und deren Effekte stehen in eckigen Klammern, [].

Konfigurationsflags

Die folgenden Konfigurationsflags helfen Ihnen vor der Kompilation zu entscheiden, welche Funktionen im Kernel aktiviert oder deaktiviert werden sollen. Sie können sogar entscheiden, ob die Konfigurationsdatei, die während dieses Prozesses erstellt wird, gespeichert werden soll oder nicht. Dies sind die primären Konfigurationsflags:

  • --no-menuconfig: Aktiviert [oder deaktiviert] den Befehl make menuconfig (welcher ein interaktives, menübasiertes Kernelkonfigurationswerkzeug aufruft) bevor der Kernel gebaut wird.
  • --gconfig: Stellt ein Kernelkonfigurationswerkzeug bereit, welches von den GTK+ Bibliotheken abhängt. Der Vorteil dieser Option ist der, dass die meisten Benutzer es einfacher und klarer finden, den Kernel mit diesem Werkzeug zu konfigurieren, da es auf dem X-windowing-System beruht. Der Nachteil dieser Option ist der, dass Sie das X-windowing-System benötigen, um sie zu benutzen. Sie wird nicht auf der Kommandozeile funktionieren.
  • --xconfig: Stellt ein Kernelkonfigurationswerkzeug bereit, welches von den QT-Bibliotheken abhängt. Der Vorteil dieser Option ist der, dass die meisten Benutzer es einfacher und klarer finden, den Kernel mit diesem Werkzeug zu konfigurieren, da es auf dem X-windowing-System beruht. Der Nachteil dieser Option ist der, dass Sie das X-windowing-System benötigen, um sie zu benutzen. Sie wird nicht auf der Kommandozeile funktionieren.
  • --no-save-config: Speichert die Kernelkonfiguration [nicht] in eine Datei im Verzeichnis /etc/kernels/ für späteren Gebrauch.

Kompilationsflags

Die folgenden Flags beeinflussen die eigentliche Kompilation:

  • --kerneldir=/pfad/zu/quellen/: Gibt einen alternativen Pfad zu den Kernelquellen an. Dieser ist standardmäßig /usr/src/linux/.
  • --kernel-config=/pfad/zu/konfigurationsdatei: Gibt eine alternative Konfigurationsdatei an. Diese ist standardmäßig /pfad/zu/quellen/.config.
  • --module-prefix=/pfad/zu/verzeichnis-preifx/: Gibt ein Prefix zu dem Verzeichnis an, in dem die Kernelmodule installiert werden. Dieser ist standardmäßig /lib/modules/.
  • --no-clean: Aktiviert [oder deaktivert] den Befehl make clean bevor der Kernel kompiliert wird. Der make clean Befehl entfernt alle Objektdateien und Abhängigkeiten vom Kernel-Quellbaum.
  • --no-mrproper: Aktiviert [oder deaktiviert] den Befehl make mrproper bevor der Kernel kompiliert wird. make mrproper entfernt, wie make clean, alle Objektdateien und Abhängigkeiten vom Kernel-Quellbaum. Jedoch werden auch alle bereits bestehenden Konfigurationsdateien (in /pfad/zu/quellen/.config oder /pfad/zu/quellen/.config.old) vom Kernel-Quellbaum entfernt.
  • --oldconfig: Führt den Befehl make oldconfig aus, welcher versucht, Konfigurationsinformationen für die Systemarchitektur von einem generischen Skript in /usr/share/genkernel/ zu sammeln. Dies ist ein nicht-interaktives Skript; es werden keine Benutzereingaben erwartet. Wenn --oldconfig in Verbindung mit --clean benutzt wird, wird das letztere Flag negiert. Dies resultiert in der Aktivierung des --no-clean Flags.
  • --callback="echo hello": Ruft die angegebenen Argumente (in diesem Fall echo hello) auf, nachdem der Kernel und die relevanten Module gebaut worden sind, aber bevor das initrd-Abbild erstellt wird. Dies kann nützlich sein, wenn Sie ein externes Modul in das initrd-Abbild einfügen wollen, indem Sie die relevanten Objekte mit Hilfe der Callback-Funktion emergen und dann eine Modulgruppe genkernel neu definieren.
  • --no-install: Aktiviert [oder deaktiviert] den Befehl make install, welcher Ihren neuen Kernel, die Konfigurationsdatei, das initrd-Abbild und die Systemmap auf Ihre gemountete Boot-Partition installieren wird. Jegliche kompilierte Module werden ebenfalls installiert.
  • --no-initrdmodules: Unterlässt es jegliche Module in das von genkernel erstellte initrd-Abbild zu kopieren. Dieses Flag ist eine Aussnahme bezüglich des no- Präfixes; das Weglassen dieses Präfixes erstellt ein ungültiges genkernel-Flag.
  • --genzimage: Erstellt das initrd-Abbild vor dem Kernel-Abbild. (Dieser Hack gilt momentan nur für PPC Pegasos Systeme.)

Compiler-Flags

Die folgenden Flags werden von genkernel unterstützt und werden während der Kernel gebaut wird an die passenden Applikationen übergeben. Diese Flags betreffen den Compiler, der für den Kernelkompilationsprozess genutzt wird, wenn auch auf einer viel tieferen Ebene.

  • --kernel-cc=someCompiler: Dies spezifiziert den Compiler, welcher während des Kernelkompilationsprozesses tätig ist.
  • --kernel-ld=someLinker: Dies spezifiziert den Linker, welcher während des Kernelkompilationsprozesses tätig ist.
  • --kernel-as=someAssembler: Dies spezifiziert den Assembler, welcher während des Kernelkompilationsprozesses tätig ist.
  • --kernel-make=someMake: Dies spezifiziert eine Alternative zum Werkzeug GNU make, welche während des Kernelkompilationsprozesses tätig ist.
  • --utils-cc=someCompiler: Dies spezifiziert den Compiler, welcher während des Kernelkompilationsprozesses tätig ist.
  • --utils-ld=someLinker: Dies spezifiziert den Linker, welcher während des Kernelkompilationsprozesses tätig ist.
  • --utils-as=someAssembler: Dies spezifiziert den Assembler, welcher während des Kernelkompilationsprozesses tätig ist.
  • --utils-make=someMake: Dies spezifiziert eine Alternative zum Werkzeug GNU make, welche während des Kernelkompilationsprozesses tätig ist.
  • --makeopts=-jX: Gibt die Anzahl gleichzeitiger Prozesse an, die das Werkzeug make implementieren kann, während der Kernel (und andere Dinge) kompiliert werden. Die Variable 'X ist eine Zahl, die man durch Addition von 1 zur Anzahl der vom System verwendeten CPUs erhält. Für ein System mit einer CPU ist das entsprechende Flag -j2; ein System mit zwei CPUs verwendet -j3 und so weiter. (Ein System mit einem Prozessor, welcher die Hyper-Threading™ (HT) Technologie unterstützt, kann das Flag -j3 verwenden, sofern Unterstützung für Symmetric Multi-Processing (SMP) im Kernel aktiviert ist.)

Flags zur Fehlersuche

Die Benutzung von Flags zur Fehlersuche während des Kernelkompilationsprozesses kontrolliert die Menge der Informationen, die ausgegeben werden, als auch die Präsentation dieser Daten.

  • --debuglevel=verblevel: Kontrolliert die Intensität der Informationen, die vom Kernel geliefert werden. Die Variable verblevel ist eine Zahl zwischen 0 und 5. Eine '0' bedeutet minimale Ausgabe, während '5' so viel Informationen über genkernels Aktivitäten wie möglich anbietet.
  • --debugfile=/pfad/zu/ausgabedatei: Ignoriert den Wert, der durch das Argument --debuglevel gesetzt wurde, und schickt alle von genkernel produzierten Daten zur Fehlersuche an die angegebene Ausgabedatei, welche standardmäßig unter /var/log/genkernel.log zu finden ist.
  • --no-color: Aktiviert [oder deaktiviert] die gefärbte Ausgabe der Informationen, indem es Escapesequenzen verwendet.

Initialisierungsflags

Die folgenden Flags werden benutzt, um bestimmte Effekte während des Hochfahrens des Systems zu erreichen. Einige dieser Flags sind vor allem für kunstvolle Leute, während andere erforderlich sind, um bestimmte Funktionen auf dem System zu aktivieren.

  • --no-splash: Aktiviert [oder deaktiviert] Framebuffer-Splash Unterstützung im initrd-Abbild, welches genkernel erstellt. Um das standardmäßige Theme, welches fbsplash benutzt, zu überschreiben, benutzen Sie --splash=BevorzugtesTheme (wobei BevorzugtesTheme der Titel eines Verzeichnisses im Verzeichnis /etc/splash/ ist).
  • --splash-res=BevorzugteAuflösung: Dieses Flag erlaubt Ihnen auszuwählen, welche Auflösungen des Splash-Screens in der initrd während des Hochfahrens des Systems unterstützt werden. Dies ist aus zwei Gründen nützlich: Zum einen können Sie nur die Auflösung(en), die für Ihr System relevant sind, auswählen. Zum anderen vermeiden Sie eine unnötige Erhöhung des Festplattenplatzes, der von der initrd benötigt wird (da die initrd die Auflösungen, die für Ihr System nicht relevant sind, nicht unterstützen muss). Jedoch kann es sein, dass Sie dieses Flag weglassen wollen, falls der Kernel für eine Installations-CD kompiliert wird; dies erlaubt Splash-Unterstützung für alle möglichen Auflösungen.
  • --do-keymap-auto: Erzwingen der Auswahl der Keymap während der Boot-Sequenz.
  • --lvm2: Fügt Unterstützung für Logical Volume Management (LVM2) aus statischen Binärdateien hinzu, falls dies für das System verfügbar ist. Relevante (statische) LVM2-Binärdateien werden kompiliert, wenn Sie nicht verfügbar sind. Stellen Sie sicher, dass Sie das Paket lvm2 mit emerge lvm2 installieren, bevor Sie dieses Flag aktivieren. Schauen Sie sich außerdem noch einmal die Gentoo LVM2 Installation an.
  • --evms2: Fügt Unterstützung für Enterprise Volume Management System (EVMS2) hinzu, falls dies für das System verfügbar ist. Stellen Sie sicher, dass Sie das Paket evms2 mit USE=static emerge evms2 installieren, bevor Sie dieses (genkernel-)Flag aktivieren. (Das Weglassen des USE=static Flags während der Installation des Paketes wird fehlschlagen die benötigten statischen Binärdateien einzubinden.)
  • --dmraid: Fügt Unterstützung für DMRAID hinzu; das Werkzeug, welches RAID-Mapping durch Benutzung des device-mapper Subsystems des Kernel erstellt. DMRAID entdeckt, aktiviert, deaktiviert und stellt Eigenschaften von Software-RAID-Sets (z.B. ATARAID) und enthaltenen DOS-Partitionen dar.
  • --luks: Fügt Unterstützung für Linux Unified Key Setup, oder kurz LUKS, hinzu. Dies ermöglicht Ihnen, ein durch LUKS verschlüsseltes Gerät zu benutzen, welches das Root-Dateisystem enthält. Am Bootloader setzen Sie dann das verschlüsselte Gerät als Wert von crypt_root (und real_root soll das unverschlüsselte Gerät sein, welches LUKS erstellt).
  • --linuxrc=/pfad/zu/Ihrer/linuxrc: Gibt eine vom Benutzer erstellte linuxrc an — ein Skript, welches während des Hochfahrens des Kernels und vor dem eigentlichen Boot-Prozess initialisiert wird. (Ein standardmäßiges Skript linuxrc sollte im Verzeichnis /usr/share/genkernel/ zu finden sein.) Dieses Skript erlaubt Ihnen, einen kleinen, modularisierten Kernel zu booten und die Treiber, die vom System (als Module) benötigt werden, zu laden.
  • --cachedir=/pfad/zu/alt/verzeichnis/: Überschreibt den standardmäßigen Ort des Caches, der während des Kompilierens des Kernels genutzt wird.
  • --tempdir=/pfad/zu/neuem/tempverzeichnis/: Gibt den Ort des temporären Verzeichnisses an, das von genkernel während des Kompilierens des Kernels genutzt wird.
  • --unionfs: Fügt Unterstützung für das Unification File System zum initrd-Abbild hinzu.

Verschiedene Flags

Die folgenden Flags werden von genkernel unterstützt, passen allerdings in keine der anderen Kategorien:

  • --mountboot: Erkennt, ob das Verzeichnis /boot auf einer separaten Partition gemountet werden muss. Es durchsucht das Skript /etc/fstab nach Anweisungen, wie die Boot-Partition in ein Dateisystem (falls nötig) gemountet wird.
  • --kernname=NickName: Erlaubt Ihnen, den Namen des Kernel- und initrd-Abbilds in /boot/ zu modifizieren, so dass die erstellten Abbilder kernel-NickName-version und initramfs-NickName-version heißen.

Mögliche Aktionen

Eine Aktion weist genkernel an, was es bauen soll. Zurzeit werden die folgenden Aktionen unterstützt:

  • initrd: Nur das initrd-Abbild erzeugen
  • bzImage: Nur das Kernel-Abbild erzeugen
  • kernel: Nur das Kernel-Abbild und die Module erzeugen
  • all: Erzeugt alles — das initrd-Abbild, das Kernel-Abbild und die Module.

Die letzte aktion, all, wird für die meisten Benutzer empfohlen, da sie alles, was für einen funktionieren Kernel benötigt wird, erstellt. Denken Sie dran, eine Aktion sagt genkernel nur, was es zu erstellen hat, nicht was es installieren soll.

Bootloader Konfiguration

Drei oder vier Veränderungen an Ihrer Bootloaderkonfigurationen sollten angewandt werden, damit genkernel mit Ihrem Bootloader funktioniert.

  1. Fügen Sie root=/dev/ram0 und init=/linuxrc zu den Kernelparametern, die an das Kernelabbild übergegeben werden, hinzu.
  2. Fügen Sie zum Beispiel real_root=/dev/hda3 zu den Kernelparametern, welche an das Kernelimage übergeben werden, hinzu, wenn /dev/hda3 Ihre Root Partition enthält.
  3. Wenn Sie splash verwenden, fügen Sie eine passende Moduszeile wie vga=0x317 zu den Kernelparametern, die an das Kernelimage übergeben werden, hinzu. Außerdem noch splash=verbose oder splash=silent, abhängig von der Detailreiche, die Sie von Ihrem Bootloader benötigen.
  4. Fügen Sie die Informationen zum initrd-Abbild hinzu, so wie Ihr Bootloader sie benötigt. Betrachten Sie das Kapitel über die Bootloader Konfiguration des Gentoo-Handbuchs für Detail, wie Sie Ihren Bootloader über die initrd in Kenntnis setzen.

3.  Konfigurationsoptionen

Bearbeiten von /etc/genkernel.conf

Das Überreichen von Flags an genkernel über die Kommandozeile kann mühsam sein, vor allem wenn Sie ein Dutzend Flags haben:

Befehlsauflistung 3.1: Ausführen von genkernel (überladen mit Flags)

# genkernel --debuglevel=5 --no-color --no-mrproper --clean --splash \
--kerneldir=/path/to/alternate/kernel/sources --install --menuconfig \
--kernel-config=/path/to/preferred/configfile --save-config --mountboot all

Zum Glück gibt es eine Konfigurationsdatei, in welcher die meisten grundlegenden Optionen gegebenenfalls gesetzt (oder geändert) werden können. Es folgt eine Auflistung der bedeutendsten Optionen:

  • MENUCONFIG=[yes|no]: Diese Option entspricht dem von genkernel genutzten Flag --menuconfig, welches den Befehl make menuconfig anwendet, um ein kommandozeilenbasierendes Konfigurationswerkzeug aufzurufen. Um dieses Werkzeug automatisch während der Kernelkonfiguration über dieses Skript aufzurufen, setzen Sie diese Option auf 'yes', ansonsten wählen Sie 'nein'.
  • CLEAN=[yes|no]: Diese Option auf 'yes' zu setzen ist gleichwertig zur Benutzung des Flags --clean und ruft den Befehl make clean auf, um Objektdateien und Abhängigkeiten aus dem Kernelquellbaum zu entfernen. Diese Option auf 'no' zu setzen, bewirkt das Gegenteil — es entspricht dem Flag --no-clean, welches den Befehl make clean deaktiviert und das Flag --no-mrproper impliziert — also den Befehl make mrproper aufhebt.
  • MRPROPER=[yes|no]: Diese Option auf 'yes' zu setzen ist gleichwertig zur Benutzung des Flags --mrproper und ruft den Befehl make mrproper auf, welcher den Kernelquellbaum von jeglichen Konfigurationsdateien befreit. 'no' zu wählen bewirkt das gleiche wie wie Benutzung von genkernels Flag --no-mrproper, welches den Befehl make mrproper deaktiviert.
  • MOUNTBOOT=[yes|no]: Diese Option auf 'yes' zu setzen ist gleichwertig zum Flag --mountboot und mountet (falls nötig) das Verzeichnis /boot/ zur Kompilierzeit automatisch. Falls das Verzeichnis /boot/ auf einer separaten Partition liegt, ziehen Sie es in Erwägung, diese Option zu aktivieren; so müssen Sie sich später einen (notwendigen) Schritt weniger merken.
  • SAVE_CONFIG=[yes|no]: Nachdem der Kernel konfiguriert worden ist, werden die ausgewählten Optionen als .config im Kernelquellbaum gespeichert. Dieses Skript kann während der nächsten Kernelkompilation überschrieben oder sogar aus dem Kernelquellbaum gelöscht werden. Hier 'yes' auszuwählen ist gleichwertig zur Benutzung des Flags --save-config und speichert alle während der Kernelkonfiguration gewählten Optionen als Skript in das Verzeichnis /etc/kernels/. 'no' behält den status quo bei.
  • USECOLOR=[yes|no]: Diese Option auf 'yes' zu setzen ist gleichwertig zum Flag --color, welches die Ausgabe von genkernel färbt, um die Fehlersuche (falls erforderlich) zu erleichtern.
  • DEBUGLEVEL=[0|1|2|3|4|5]: Durch diese Option lässt sich die Detailreiche der von genkernel erstellten Ausgabe regeln — diese Option mit --debuglevel=0 auf '0' zu setzen, unterdrückt jegliche Ausgabe von genkernel; --debuglevel=5 stellt dem Benutzer die vollständige Ausgabe von genkernel zur Verfügung.

Durch eine angemessene Auswahl der Flags in /etc/genkernel.conf können Sie die Anzahl der Flags, die Sie genkernel über die Kommandozeile übergeben, halbieren.

Befehlsauflistung 3.2: Ausführen von genkernel (mit Flags), nach Bearbeitung von genkernel.conf

# genkernel --splash --kerneldir=/pfad/zu/alternativen/kernel/quellen \
--kernel-config=/pfad/zu/bevorzugter/konfigurationsdatei --install all

Beide Vorgehensweisen erzeugen dasselbe Ergebnis, allerdings speichert die letztere die meisten Optionen in einem Skript, das zu einem späteren Zeitpunkt bearbeitet werden kann.

4.  Booten über das Netzwerk mit genkernel

Booten über das Netzwerk von einer Installations-CD

Das Werkzeug genkernel kann Kernel- und initrd-Abbilder erzeugen, die die Unterstützung für das Booten über ein Netzwerk (im folgenden netbooting genannt) unterstützen. Mit etwas Glück sollten Sie in der Lage sein, irgendeinen Computer in die von der Installations-CD bereitgestellte Umgebung netbooten zu können.

Der Trick liegt in genkernels Skript linuxrc: Es wird versuchen die Installations-CD mit Hilfe von NFS zu netmounten. Ab dann können die Init-Skripte der Installations-CD übernehmen, als wäre die CD lokal verfügbar.

Erstellen von Kernel und Initrd-Abbildern mit Unterstützung für Netbooting

Um die Unterstützung für Netbooting zu aktivieren, binden Sie die folgenden Optionen während der Kernelkonfiguration ein:

Warnung: Die Unterstützung für Netbooting mit genkernel ist experimentell und kann Fehler enthalten.

Zuerst muss der Kernel die Treiber für Ihre Netzwerkkarte (NIC) enthalten. Normalerweise werden die Treiber für solche Geräte als Module kompiliert. Für Netbooting müssen solche Treiber jedoch direkt in den Kernel einkompiliert (also nicht als Module) sein.

Befehlsauflistung 4.1: Konfigurieren eines 2.6.x Kernels um den NIC-Treiber zu unterstützen

Device Drivers --->
  Networking Support --->
  Ethernet (10 or 100Mbit)  --->
  [*] Ethernet (10 or 100Mbit)
  <*>   der Treiber für Ihre Netzwerkkarte
(Stellen Sie sicher <*> und nicht <M> auszuwählen)

Als nächstes schlagen wir vor, dass Sie die Optionen IP: kernel level autoconfiguration und IP: DHCP support aktivieren. Dies vermeidet einen nicht erforderlichen zusätzlichen Aufwand, da die IP-Adresse und der NFS-Pfad zu der Installations-CD auf einem DHCP-Server konfiguriert werden können. Dies bedeutet natürlich, dass die Kernelkommandozeile für jede Maschine konstant bleibt — was sehr wichtig für etherbooting ist.

Befehlsauflistung 4.2: Konfigurieren eines 2.6.x Kernels um DHCP zu unterstützen

Device Drivers --->
  Networking Support --->
    Networking options
      [*] TCP/IP networking--->
      [*]   IP: kernel level autoconfiguration
      [*]     IP: DHCP support
(Diese Optionen weisen den Kernel an, eine DHCP-Anfrage beim Hochfahren zu senden.)

Zusätzlich sollten sie noch SquashFS aktivieren, da die meisten modernen Gentoo-Installations-CDs dies benötigen. Die Unterstützung für SquashFS ist in den "normalen" Kernelquellbaum nicht eingebunden. Um SquashFS zu aktivieren, wenden Sie die benötigen Patche auf den "normalen" Kernelquellbaum an oder installieren Sie gentoo-sources.

Befehlsauflistung 4.3: Konfigurieren des Kernels um SquashFS zu unterstützen

File systems--->
  Miscellaneous filesystems --->
    [*] SquashFS 2.X - Squashed file system support

Sobald der Kompilationsprozess abgeschlossen ist, erstellen Sie einen komprimierten Tarball (tar.gz), der die Kernelmodule enthält. Dieser Schrittt ist nur erforderlich, wenn die Version Ihres Kernels nicht der Version des Kernel-Abbilds auf der Installations-CD entspricht.

Befehlsauflistung 4.4: Erstellen eines komprimierten Tarballs, der die Kernelmodule enthält

(Erstellen einer tar.gz, die alle Module enthält)
# cd
# tar -cf /tmp/modules-X.Y.Z.tar.gz /lib/modules/X.Y.Z/

Abhängig von Ihrem Bootmechanismus über das Netzwerk müssen Sie nun einige der folgenden Schritte durchführen:

Befehlsauflistung 4.5: Erstellen eines Boot-Abbilds

(Erstellen eines etherboot-Abbilds)
# emerge mknbi
# cd /boot
# mkelf-linux -params="root=/dev/ram0 init=/linuxrc ip=dhcp" kernel... initrd... > etherboot.img

(Erstellen eines OpenBoot / SPARC64 TFTP Abbilds)
# emerge sparc-utils
# cd /boot
# elftoaout kernel... -o kernel.aout
# piggyback64 kernel.aout System.map-... initrd-...
# mv kernel.aout openboot.img (Dies ist das boot-Abbild)

(PXE benötigt keine weiteren Schritte, der Kernel und die initrd können so wie sie sind benutzt werden)

Endlich können sie diesen Kernel auf ihren TFTP-Server kopieren. Die Details dazu sind von der Architektur abhängig und würden den Rahmen dieses Leitfadens sprengen. Ziehen Sie hierzu die Dokumentation zu Ihrer Plattform zu Rate.

NFS Setup

Um einen NFS-Share aufzusetzen, der die Installations-CD enthält, benutzen Sie das loop-Gerät, um das ISO-Abbild zu mounten und dann die Inhalte der CD in den NFS-Share zu kopieren. Als nettes Extra extrahieren genkernels initrd-Skripte alle tar.gz Dateien im Verzeichnis /nfs/livecd/add/. Alles, was Sie hier tun müssen, ist das Archiv modules-X.Y.Z.tar.gz in das Verzeichnis /nfs/livecd/add/ zu kopieren.

Befehlsauflistung 4.6: Vorbereiten des NFS-Shares

(Dies nimmt an, dass /nfs/livecd ein exportierter NFS Share ist)
# mount /tmp/gentoo-livecd.iso /mnt/cdrom -o loop
# cp -p /mnt/cdrom /nfs/livecd
# umount /mnt/cdrom

(Kopieren von modules.tar.gz nach /add)
# mkdir /nfs/livecd/add
# cp /tmp/modules-X.Y.Z.tar.gz /nfs/livecd/add

DHCP Setup

Die netboot-Abbilder werden Ihren DHCP-Server sowohl nach einer IP als auch nach einem root-path fragen. Beide können pro Host angegeben werden, indem man eine MAC-Adresse benutzt, um die Maschinen zu identifizieren:

Befehlsauflistung 4.7: Beispiel-Setup einer dhcpd.conf auf Client-Seite

...

host netbootableMachine {
hardware ethernet 11:22:33:44:55:66;
fixed-address 192.168.1.10;
option root-path "192.168.1.2:/nfs/livecd";
}
# 192.168.1.2 ist der NFS-Server
# Während 192.168.1.10 die IP-Adresse der netbooted Maschine sein wird
...

Netbooting Anweisungen

Netbooting selbst ist sehr plattform-spezifisch. Der wichtigste Teil ist die Parameter ip=dhcp und init=/linuxrc auf der Kernelkommandozeile anzugeben, da diese die Netzwerkschnittstelle aktivieren und das initrd-Skript anweisen, die Installations-CD über NFS zu mounten. Hier sind einige plattform-spezifische Tipps:

Befehlsauflistung 4.8: Netbooting Anweisungen

# Etherboot - legen Sie die etherboot-Disk in das Gerät ein und rebooten Sie
# Die Kernelkommandozeile wurde angegeben, während das Abbild erstellt wurde

# Sparc64 - Tippen Sie Stop-A am Boot-Prompt
ok boot net ip=dhcp init=/linuxrc

# PXE - Setzen Sie pxelinux (Teil von syslinux) auf,
erstellen Sie dann eine pxelinux.cfg/default mit den Zeilen:

DEFAULT gentoo
TIMEOUT 40
PROMPT 1

LABEL gentoo
KERNEL kernel-X.Y.Z
APPEND initrd=initrd-X.Y.Z root=/dev/ram0 init=/linuxrc ip=dhcp

5.  Fazit

Automatisieren oder nicht automatisieren?

Der Sinn von genkernel ist es, einen (einfacheren) alternativen Weg zu der zeitaufwendigen Kernelkompilation anzubieten. Wie immer haben Sie die freie Wahl, ob Sie den Kernelkompilationsprozess automatisieren wollen oder nicht.



Drucken

Seite aktualisiert 22. Juni 2008

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieser Leitfaden versucht eine Referenz für alle Funktionen, die von genkernel unterstützt werden, zu liefern.

Tim Yamin
Autor

Jimi Ayodele
Mitarbeiter

Thomas Seiler
NFS Support

Joshua Saddler
Bearbeiter

Jan Hendrik Grahl
Übersetzer

Tobias Heinlein
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.