Nächste: , Vorige: , Nach oben: Systemkonfiguration   [Inhalt][Index]


8.12 Initiale RAM-Disk

Um ihn zu initialisieren (zu „bootstrappen“), wird für den Kernel Linux-Libre eine initiale RAM-Disk angegeben (kurz initrd). Eine initrd enthält ein temporäres Wurzeldateisystem sowie ein Skript zur Initialisierung. Letzteres ist dafür zuständig, das echte Wurzeldateisystem einzubinden und alle Kernel-Module zu laden, die dafür nötig sein könnten.

Mit dem Feld initrd-modules einer operating-system-Deklaration können Sie angeben, welche Kernel-Module für Linux-libre in der initrd verfügbar sein müssen. Insbesondere müssen hier die Module aufgeführt werden, um die Festplatte zu betreiben, auf der sich Ihre Wurzelpartition befindet — allerdings sollte der vorgegebene Wert der initrd-modules in dem meisten Fällen genügen. Wenn Sie aber zum Beispiel das Kernel-Modul megaraid_sas zusätzlich zu den vorgegebenen Modulen brauchen, um auf Ihr Wurzeldateisystem zugreifen zu können, würden Sie das so schreiben:

(operating-system
  ;; …
  (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
Scheme-Variable: %base-initrd-modules

Der Vorgabewert für die Liste der Kernel-Module, die in der initrd enthalten sein sollen.

Wenn Sie noch systemnähere Anpassungen durchführen wollen, können Sie im Feld initrd einer operating-system-Deklaration angeben, was für eine Art von initrd Sie benutzen möchten. Das Modul (gnu system linux-initrd) enthält drei Arten, eine initrd zu erstellen: die abstrakte Prozedur base-initrd und die systemnahen Prozeduren raw-initrd und expression->initrd.

Mit der Prozedur base-initrd sollten Sie die häufigsten Anwendungszwecke abdecken können. Wenn Sie zum Beispiel ein paar Kernel-Module zur Boot-Zeit laden lassen möchten, können Sie das initrd-Feld auf diese Art definieren:

(initrd (lambda (file-systems . rest)
          ;; Eine gewöhnliche initrd, aber das Netzwerk wird
          ;; mit den Parametern initialisiert, die QEMU
          ;; standardmäßig erwartet.
          (apply base-initrd file-systems
                 #:qemu-networking? #t
                 rest)))

Die Prozedur base-initrd kann auch mit üblichen Anwendungszwecken umgehen, um das System als QEMU-Gastsystem zu betreiben oder als ein „Live“-System ohne ein dauerhaft gespeichertes Wurzeldateisystem.

Die Prozedur base-initrd baut auf der Prozedur raw-initrd auf. Anders als base-initrd hat raw-initrd keinerlei Zusatzfunktionalitäten: Es wird kein Versuch unternommen, für die initrd notwendige Kernel-Module und Pakete automatisch hinzuzunehmen. raw-initrd kann zum Beispiel benutzt werden, wenn ein Nutzer eine eigene Konfiguration des Linux-Kernels verwendet und die Standard-Kernel-Module, die mit base-initrd hinzugenommen würden, nicht verfügbar sind.

Die initiale RAM-Disk, wie sie von base-initrd oder raw-initrd erzeugt wird, richtet sich nach verschiedenen Optionen, die auf der Kernel-Befehlszeile übergeben werden (also über GRUBs linux-Befehl oder die -append-Befehlszeilenoption von QEMU). Erwähnt werden sollten:

--load=boot

Die initiale RAM-Disk eine Datei boot, in der ein Scheme-Programm steht, laden lassen, nachdem das Wurzeldateisystem eingebunden wurde.

Guix übergibt mit dieser Befehlszeilenoption die Kontrolle an ein Boot-Programm, das die Dienstaktivierungsprogramme ausführt und anschließend den GNU Shepherd startet, das Initialisierungssystem („init“-System) von Guix System.

--root=Wurzel

Das mit Wurzel bezeichnete Dateisystem als Wurzeldateisystem einbinden. Wurzel kann ein Geratename wie /dev/sda1, eine Dateisystembezeichnung (d.h. ein Dateisystem-„Label“) oder eine Dateisystem-UUID sein.

--system=System

/run/booted-system und /run/current-system auf das System zeigen lassen.

modprobe.blacklist=Module

Die initiale RAM-Disk sowie den Befehl modprobe (aus dem kmod-Paket) anweisen, das Laden der angegebenen Module zu verweigern. Als Module muss eine kommagetrennte Liste von Kernel-Modul-Namen angegeben werden — z.B. usbkbd,9pnet.

--repl

Eine Lese-Auswerten-Schreiben-Schleife (englisch „Read-Eval-Print Loop“, kurz REPL) von der initialen RAM-Disk starten, bevor diese die Kernel-Module zu laden versucht und das Wurzeldateisystem einbindet. Unsere Marketingabteilung nennt das boot-to-Guile. Der Schemer in Ihnen wird das lieben. Siehe Using Guile Interactively in GNU Guile Reference Manual für mehr Informationen über die REPL von Guile.

Jetzt wo Sie wissen, was für Funktionalitäten eine durch base-initrd und raw-initrd erzeugte initiale RAM-Disk so haben kann, möchten Sie vielleicht auch wissen, wie man Sie benutzt und weiter anpasst:

Scheme-Prozedur: raw-initrd Dateisysteme [#:linux-modules '()] [#:mapped-devices '()]  [#:keyboard-layout #f] [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]

Liefert eine Ableitung, die eine rohe („raw“) initrd erstellt. Dateisysteme bezeichnet eine Liste von durch die initrd einzubindenden Dateisystemen, unter Umständen zusätzlich zum auf der Kernel-Befehlszeile mit --root angegebenen Wurzeldateisystem. linux-modules ist eine Liste von Kernel-Modulen, die zur Boot-Zeit geladen werden sollen. mapped-devices ist eine Liste von Gerätezuordnungen, die hergestellt sein müssen, bevor die unter file-systems aufgeführten Dateisysteme eingebunden werden (siehe Zugeordnete Geräte). helper-packages ist eine Liste von Paketen, die in die initrd kopiert werden. Darunter kann e2fsck/static oder andere Pakete aufgeführt werden, mit denen durch die initrd das Wurzeldateisystem auf Fehler hin geprüft werden kann.

Ist es auf einen wahren Wert gesetzt, dann muss keyboard-layout eine Tastaturbelegung als <keyboard-layout>-Verbundsobjekt angeben, die die gewünschte Tastaturbelegung für die Konsole bezeichnet. Sie wird verwendet, noch bevor die Gerätezuordnungen in mapped-devices hergestellt werden und bevor die Dateisysteme in file-systems eingebunden werden, damit der Anwender dabei die gewollte Tastaturbelegung beim Eingeben einer Passphrase und bei der Nutzung einer REPL verwenden kann.

Wenn qemu-networking? wahr ist, wird eine Netzwerkverbindung mit den Standard-QEMU-Parametern hergestellt. Wenn virtio? wahr ist, werden zusätzliche Kernel-Module geladen, damit die initrd als ein QEMU-Gast paravirtualisierte Ein-/Ausgabetreiber benutzen kann.

Wenn volatile-root? wahr ist, ist Schreiben auf das Wurzeldateisystem möglich, aber Änderungen daran bleiben nicht erhalten.

Scheme-Prozedur: base-initrd Dateisysteme [#:mapped-devices '()] [#:keyboard-layout #f]  [#:qemu-networking? #f]

[#:volatile-root? #f]  [#:linux-modules ’()] Liefert eine allgemein anwendbare, generische initrd als dateiartiges Objekt mit den Kernel-Modulen aus linux. Die file-systems sind eine Liste von durch die initrd einzubindenden Dateisystemen, unter Umständen zusätzlich zum Wurzeldateisystem, das auf der Kernel-Befehlszeile mit --root angegeben wurde. Die mapped-devices sind eine Liste von Gerätezuordnungen, die hergestellt sein müssen, bevor die file-systems eingebunden werden.

Ist es auf einen wahren Wert gesetzt, dann muss keyboard-layout eine Tastaturbelegung als <keyboard-layout>-Verbundsobjekt angeben, die die gewünschte Tastaturbelegung für die Konsole bezeichnet. Sie wird verwendet, noch bevor die Gerätezuordnungen in mapped-devices hergestellt werden und bevor die Dateisysteme in file-systems eingebunden werden, damit der Anwender dabei die gewollte Tastaturbelegung beim Eingeben einer Passphrase und bei der Nutzung einer REPL verwenden kann.

qemu-networking? und volatile-root? verhalten sich wie bei raw-initrd.

In die initrd werden automatisch alle Kernel-Module eingefügt, die für die unter file-systems angegebenen Dateisysteme und die angegebenen Optionen nötig sind. Zusätzliche Kernel-Module können unter den linux-modules aufgeführt werden. Diese werden zur initrd hinzugefügt und zur Boot-Zeit in der Reihenfolge geladen, in der sie angegeben wurden.

Selbstverständlich betten die hier erzeugten und benutzten initrds ein statisch gebundenes Guile ein und das Initialisierungsprogramm ist ein Guile-Programm. Dadurch haben wir viel Flexibilität. Die Prozedur expression->initrd erstellt eine solche initrd für ein an sie übergebenes Programm.

Scheme-Prozedur: expression->initrd G-Ausdruck [#:guile %guile-static-stripped] [#:name "guile-initrd"] Liefert eine

Linux-initrd (d.h. ein gzip-komprimiertes cpio-Archiv) als dateiartiges Objekt, in dem guile enthalten ist, womit der G-Ausdruck nach dem Booten ausgewertet wird. Alle vom G-Ausdruck referenzierten Ableitungen werden automatisch in die initrd kopiert.


Nächste: , Vorige: , Nach oben: Systemkonfiguration   [Inhalt][Index]