Nächste: Bootloader-Konfiguration, Vorige: Name Service Switch, Nach oben: Systemkonfiguration [Inhalt][Index]
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)))
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:
gnu.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. Wird nichts angegeben, wird der Gerätename aus dem
Wurzeldateisystem der Betriebssystemdeklaration benutzt.
rootfstype=Typ
Den Dateisystemtyp für das Wurzeldateisystem festlegen. Der angegebene Typ
hat Vorrang vor dem type
-Feld, das für das Wurzeldateisystem in der
operating-system
-Deklaration angegeben wurde, falls vorhanden.
rootflags=Optionen
Die Einbinde-Optionen („mount options“) für das Wurzeldateisystem
festlegen. Diese haben Vorrang vor dem options-Feld, das für das
Wurzeldateisystem in der operating-system
-Deklaration angegeben
wurde, falls vorhanden.
fsck.mode=Modus
Ob das mit Wurzel bezeichnete Dateisystem vor dem Einbinden auf Fehler
geprüft werden soll. Als Modus geben Sie entweder skip
(nie
prüfen), force
(immer prüfen) oder auto
an. Bei auto
wird die check?
-Einstellung des Dateisystemobjekts für Wurzel
verwendet (siehe Dateisysteme) und eine Dateisystemüberprüfung nur
durchgeführt, wenn das Dateisystem nicht ordnungsgemäß heruntergefahren
wurde.
Die Voreinstellung ist auto
, wenn diese Option nicht angegeben wird
oder Modus keinem der genannten Werte entspricht.
fsck.repair=Stufe
Die Stufe gibt an, wie erkannte Fehler im Wurzeldateisystem Wurzel
automatisch repariert werden sollen. Stufe darf no
sein (nichts
an Wurzel ändern, wenn möglich), yes
(so viele Fehler wie
möglich beheben) oder preen
. Letzteres repariert solche Probleme, wo
die automatische Reparatur als unbedenklich eingeschätzt wird.
Wenn Sie diese Option weglassen oder als Stufe keine der genannten
angeben, wird als Voreinstellung so verfahren, als hätten Sie preen
angegeben.
gnu.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
.
gnu.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 Referenzhandbuch zu GNU Guile 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:
[#: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). pre-mount ist ein G-Ausdruck, der vor
Inkrafttreten der mapped-devices ausgewertet
wird. 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.
[#: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.
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: Bootloader-Konfiguration, Vorige: Name Service Switch, Nach oben: Systemkonfiguration [Inhalt][Index]