Nächste: guix system
aufrufen, Vorige: Initiale RAM-Disk, Nach oben: Systemkonfiguration [Inhalt][Index]
Das Betriebssystem unterstützt mehrere Bootloader. Der gewünschte Bootloader
wird mit der bootloader-configuration
-Deklaration konfiguriert. Alle
Felder dieser Struktur sind für alle Bootloader gleich außer dem einen Feld
bootloader
, das angibt, welcher Bootloader konfiguriert und
installiert werden soll.
Manche der Bootloader setzen nicht alle Felder einer
bootloader-configuration
um. Zum Beispiel ignoriert der
extlinux-Bootloader das theme
-Feld, weil er keine eigenen Themen
unterstützt.
Der Typ der Deklaration einer Bootloader-Konfiguration.
bootloader
¶Der zu benutzende Bootloader als ein bootloader
-Objekt. Zurzeit
werden grub-bootloader
, grub-efi-bootloader
,
grub-efi-removable-bootloader
, grub-efi-netboot-bootloader
,
grub-efi-netboot-removable-bootloader
, extlinux-bootloader
und
u-boot-bootloader
unterstützt.
Verfügbare Bootloader werden in den Modulen (gnu bootloader …)
beschrieben. Insbesondere enthält (gnu bootloader u-boot)
Definitionen für eine Vielzahl von ARM- und AArch64-Systemen, die den
U-Boot-Bootloader benutzen.
Mit grub-bootloader
können Sie vor allem auf Intel-basierten
Maschinen im alten „Legacy“-BIOS-Modus booten.
grub-efi-bootloader
macht es möglich, auf modernen Systemen mit
Unified Extensible Firmware Interface (UEFI) zu booten. Sie sollten
das hier benutzen, wenn im Installationsabbild ein Verzeichnis
/sys/firmware/efi vorhanden ist, wenn Sie davon auf Ihrem System
booten.
Mit grub-efi-removable-bootloader
lässt sich Ihr System von
Wechseldatenträgern aus starten. Er platziert die GRUB-Datei an dem
Standardort, der im UEFI-Standard für solche Fälle vorgesehen ist, nämlich
in /EFI/BOOT/BOOTX64.efi innerhalb des Boot-Verzeichnisses, was
meistens /boot/efi ist. grub-efi-removable-bootloader
ist
außerdem geeignet, wenn Sie eine „vergessliche“ UEFI-Firmware haben, die es
nicht schafft, ihre Konfiguration im dafür gedachten nicht flüchtigen
Speicher zu erhalten. Genau wie bei grub-efi-bootloader
können Sie
grub-efi-removable-bootloader
nur benutzen, wenn das Verzeichnis
/sys/firmware/efi verfügbar ist.
Anmerkung: Für jedes andere Betriebssystem, das seine GRUB-Datei auch an diesem Standardort aus dem UEFI-Standard hat, wird diese hierbei überschrieben und das alte System kann nicht mehr gebootet werden.
Mit grub-efi-netboot-bootloader
können Sie Ihr System via TFTP
über das Netzwerk booten. Zusammen mit einem über NFS eingebundenen
Wurzeldateisystem können Sie damit ein Guix-System ohne Plattenlaufwerk
einrichten.
Bei der Installation des grub-efi-netboot-bootloader
wird der Inhalt
der bei targets
angegebenen TFTP-Wurzelverzeichnisse erzeugt (siehe
targets
), innerhalb eines
Unterverzeichnisses efi/Guix, so dass eines von einem TFTP-Server
bereitgestellt werden kann. Vielleicht möchten Sie dazu Ihre
TFTP-Serververzeichnisse zuvor als targets
einbinden, damit die
benötigten Dateien während der Installation direkt auf den TFTP-Server
aufgespielt werden.
Wenn Sie außerdem vorhaben, ein NFS-Wurzeldateisystem zu benutzen
(eigentlich auch, wenn Sie bloß den Store von einer NFS-Freigabe laden
möchten), dann muss der TFTP-Server auch die Datei
/boot/grub/grub.cfg und die anderen Dateien vom Store zur Verfügung
stellen, etwa GRUBs Hintergrundbild, den Kernel (siehe
kernel
) und auch die initrd (siehe
initrd
). Auf all diese
Store-Dateien greift GRUB via TFTP über ihren normalen Store-Pfad zu,
z.B. über tftp://tftp-server/gnu/store/…-initrd/initrd.cpio.gz.
Um das möglich zu machen, erzeugt Guix zwei symbolische Verknüpfungen. Für
jedes Ziel im Feld targets
ist die erste Verknüpfung
‘Ziel’/efi/Guix/boot/grub/grub.cfg, die auf
../../../boot/grub/grub.cfg zeigt, wobei das ‘Ziel’ dem Pfad
/boot entsprechen kann. In diesem Fall verlässt die Verknüpfung das
zugänglich gemachte TFTP-Wurzelverzeichnis nicht, in den anderen
Fällen schon. Die zweite Verknüpfung ist ‘Ziel’/gnu/store und
zeigt auf ../gnu/store. Diese Verknüpfung verlässt das zugänglich
gemachte TFTP-Wurzelverzeichnis.
Die Annahme hinter all dem ist, dass Sie einen NFS-Server haben, der das
Wurzelverzeichnis für Ihr Guix-System exportiert, und außerdem einen
TFTP-Server haben, der die als targets
angegebenen Verzeichnisse
liefert – normalerweise ist das ein einzelnes Verzeichnis
/boot –, was in demselben Wurzelverzeichnis Ihres Guix-Systems
gespeichert vorliegt. In dieser Konstellation werden die symbolischen
Verknüpfungen funktionieren.
Bei anderen Konstellationen werden Sie Ihre eigene
Bootloader-Installationsprozedur programmieren müssen, die sich darum
kümmert, die nötigen Dateien aus dem Store über TFTP zugänglich zu machen,
zum Beispiel, indem diese in das TFTP-Wurzeldateisystem unter jedem der
targets
kopiert werden.
Es ist wichtig, anzumerken, dass symbolische Verknüpfungen nach außerhalb des TFTP-Wurzelverzeichnisses vielleicht erst in der Konfiguration zugelassen werden müssen. Außerdem wird durch die Store-Verknüpfung der gesamte Store über TFTP offengelegt. Beides hat Auswirkungen auf die Informationssicherheit, welche Sie bedenken sollten. Auch sollten Sie alle Arten von TFTP-Schreibzugriff besser verbieten!
Beachten Sie: Mit diesem Bootloader werden keine Änderungen am „UEFI Boot Manager“ des Systems vorgenommen.
Abgesehen vom grub-efi-netboot-bootloader
und den bereits erwähnten
TFTP- und NFS-Servern brauchen Sie auch einen passend eingerichteten
DHCP-Server, der das Booten über das Netzwerk möglich macht. Derzeit können
wir Ihnen bei all dem nur empfehlen, Anleitungen über die PXE (Preboot eXecution Environment) ausfindig zu machen.
Für den Fall, dass eine lokale EFI-Systempartition (ESP) oder eine ähnliche
Partition mit einem FAT-Dateisystem in targets
eingebunden ist,
können symbolische Verknüpfungen dort nicht erzeugt werden. In diesem
Fall wird alles bereitgestellt, um vom lokalen Speicher zu booten, als wäre
grub-efi-bootloader
verwendet worden, mit dem Unterschied, dass
sämtliche GRUB-Binärdateien nach targets
kopiert werden, so dass
Booten über das Netzwerk möglich ist.
grub-efi-netboot-removable-bootloader
ist identisch mit
grub-efi-netboot-bootloader
, außer dass das Unterverzeichnis
efi/boot statt efi/Guix benutzt wird, entsprechend dem
UEFI-Standard bei Wechseldatenträgern.
Anmerkung: Für jedes andere Betriebssystem, das seine GRUB-Datei auch an diesem Standardort aus dem UEFI-Standard hat, wird diese hierbei überschrieben und das alte System kann nicht mehr gebootet werden.
targets
Eine Liste von Zeichenketten, die angibt, auf welche Ziele der Bootloader installiert werden soll.
Was targets
bedeutet, hängt vom jeweiligen Bootloader ab. Für
grub-bootloader
sollten hier zum Beispiel Gerätenamen angegeben
werden, die vom installer
-Befehl des Bootloaders verstanden
werden, etwa /dev/sda
oder (hd0)
(siehe Invoking
grub-install in GNU GRUB Manual). Für grub-efi-bootloader
und
grub-efi-removable-bootloader
sollten die Einhängepunkte des
EFI-Dateisystems angegeben werden, in der Regel /boot/efi. Für
grub-efi-netboot-bootloader
sollten targets
der oder die
Einhängepunkte sein, unter denen das TFTP-Wurzelverzeichnis Ihres
TFTP-Servers erreichbar ist.
menu-entries
(Vorgabe: '()
)Eine möglicherweise leere Liste von menu-entry
-Objekten (siehe
unten), die für Menüeinträge stehen, die im Bootloader-Menü auftauchen
sollen, zusätzlich zum aktuellen Systemeintrag und dem auf vorherige
Systemgenerationen verweisenden Eintrag.
default-entry
(Vorgabe: 0
)Die Position des standardmäßig ausgewählten Bootmenü-Eintrags. An Position 0 steht der Eintrag der aktuellen Systemgeneration.
timeout
(Vorgabe: 5
)Wie viele Sekunden lang im Menü auf eine Tastatureingabe gewartet wird, bevor gebootet wird. 0 steht für sofortiges Booten, für -1 wird ohne Zeitbeschränkung gewartet.
keyboard-layout
(Vorgabe: #f
)Wenn dies auf #f
gesetzt ist, verwendet das Menü des Bootloaders
(falls vorhanden) die Vorgabe-Tastaturbelegung, normalerweise
US English („qwerty“).
Andernfalls muss es ein keyboard-layout
-Objekt sein (siehe
Tastaturbelegung).
Anmerkung: Dieses Feld wird derzeit von Bootloadern außer
grub
undgrub-efi
ignoriert.
theme
(Vorgabe: #f)Ein Objekt für das im Bootloader anzuzeigende Thema. Wird kein Thema angegeben, benutzen manche Bootloader vielleicht ein voreingestelltes Thema; GRUB zumindest macht es so.
terminal-outputs
(Vorgabe: '(gfxterm)
)Die Ausgabeterminals, die für das Boot-Menü des Bootloaders benutzt werden,
als eine Liste von Symbolen. GRUB akzeptiert hier diese Werte:
console
, serial
, serial_{0–3}
, gfxterm
,
vga_text
, mda_text
, morse
und pkmodem
. Dieses
Feld entspricht der GRUB-Variablen GRUB_TERMINAL_OUTPUT
(siehe
Simple configuration in Handbuch von GNU GRUB).
terminal-inputs
(Vorgabe: '()
)Die Eingabeterminals, die für das Boot-Menü des Bootloaders benutzt werden,
als eine Liste von Symbolen. GRUB verwendet hier das zur Laufzeit bestimmte
Standardterminal. GRUB akzeptiert sonst diese Werte: console
,
serial
, serial_{0-3}
, at_keyboard
und
usb_keyboard
. Dieses Feld entspricht der GRUB-Variablen
GRUB_TERMINAL_INPUT
(siehe Simple configuration in Handbuch
von GNU GRUB).
serial-unit
(Vorgabe: #f
)Die serielle Einheit, die der Bootloader benutzt, als eine ganze Zahl zwischen 0 und 3, einschließlich. Für GRUB wird sie automatisch zur Laufzeit ausgewählt; derzeit wählt GRUB die 0 aus, die COM1 entspricht (siehe Serial terminal in Handbuch von GNU GRUB).
serial-speed
(Vorgabe: #f
)Die Geschwindigkeit der seriellen Schnittstelle als eine ganze Zahl. GRUB bestimmt den Wert standardmäßig zur Laufzeit; derzeit wählt GRUB 9600 bps (siehe Serial terminal in Handbuch von GNU GRUB).
device-tree-support?
(Vorgabe: #t
)Ob das Laden von Device-Tree-Dateien durch Linux stattfinden soll.
Diese Option ist standardmäßig aktiviert. In manchen Fällen, z.B. wenn
durch den u-boot
-Bootloader schon der Device Tree in den
Arbeitsspeicher geladen wird, kann es gewünscht sein, diese Option hier
abzuschalten, indem Sie sie auf #f
setzen.
extra-initrd
(Vorgabe: #f
)Ein Dateiname einer weiteren initrd, die beim Booten geladen werden soll. Sie kann im Store gespeichert sein, aber muss es nicht, und hauptsächlich ist dieses Feld dafür gedacht, dass Sie Dateien mit Geheimnissen außerhalb des Stores benutzen können.
Wenn Sie Schlüssel zum Entsperren eines LUKS-Geräts in einer Schlüsseldatei („key-file“) vorgeben möchten, ist die einzige Möglichkeit, sie in der initialen RAM-Disk zu hinterlegen. In der normalen initrd können Sie keine Geheimnisse hinterlegen, denn diese wird im Store abgelegt und jeder kann sich Dateien im Store anschauen, was wir nicht wollen, weil eine initrd mit solchen Schlüsseln geheim bleiben muss. Darum können Sie mit diesem Feld eine händisch angelegte initrd an GRUB geben, ohne sie im Store preiszugeben.
Wenn Sie allerdings etwas tun möchten, was nichts mit Geheimnissen zu tun
hat, sind Sie mit einer normalen initrd besser bedient (siehe
initrd
).
Ein für diesen Zweck geeignetes Abbild können Sie zum Beispiel so anlegen:
echo /key-file.bin | cpio -oH newc >/key-file.cpio chmod 0000 /key-file.cpio
Nachdem Sie es angelegt haben, können Sie es so benutzen:
;; Betriebssystem mit einer verschlüsselten Boot-Partition (operating-system … (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (targets '("/boot/efi")) ;; initrd mit Schlüsseln (extra-initrd "/key-file.cpio"))) (mapped-devices (list (mapped-device (source (uuid "12345678-1234-1234-1234-123456789abc")) (target "my-root") (type (luks-device-mapping-with-options ;; Mit ihnen entsperren wir die Wurzelpartition #:key-file "/key-file.bin"))))))
Passen Sie auf, wenn Sie diese Option einrichten, denn wenn die Datei, auf die Sie verweisen, von GRUB nicht gelesen werden kann, wird GRUB nicht in der Lage sein, das System zu booten, bis Sie die initrd-Zeile manuell mit einem Texteditor aus dem GRUB-Menü wieder entfernen.
Derzeit kann es nur zusammen mit GRUB benutzt werden.
Sollten Sie zusätzliche Bootmenü-Einträge über das oben beschriebene
menu-entries
-Feld hinzufügen möchten, müssen Sie diese mit der
menu-entry
-Form erzeugen. Stellen Sie sich zum Beispiel vor, Sie
wollten noch eine andere Distribution booten können (schwer vorstellbar!),
dann könnten Sie einen Menüeintrag wie den Folgenden definieren:
(menu-entry
(label "Die _andere_ Distribution")
(linux "/boot/old/vmlinux-2.6.32")
(linux-arguments '("root=/dev/sda2"))
(initrd "/boot/old/initrd"))
Details finden Sie unten.
Der Typ eines Eintrags im Bootloadermenü.
label
Die Beschriftung, die im Menü gezeigt werden soll – z.B.
"GNU"
.
linux
(Vorgabe: #f
)Das Linux-Kernel-Abbild, was gebootet werden soll, zum Beispiel:
(file-append linux-libre "/bzImage")
Für GRUB kann hier auch ein Gerät ausdrücklich zum Dateipfad angegeben werden, unter Verwendung von GRUBs Konventionen zur Gerätebenennung (siehe Naming convention in Handbuch von GNU GRUB), zum Beispiel:
"(hd0,msdos1)/boot/vmlinuz"
Wenn das Gerät auf diese Weise ausdrücklich angegeben wird, wird das
device
-Feld gänzlich ignoriert.
linux-arguments
(Vorgabe: '()
)Die Liste zusätzlicher Linux-Kernel-Befehlszeilenargumente – z.B.
'("console=ttyS0")
.
initrd
(Vorgabe: #f
)Ein G-Ausdruck oder eine Zeichenkette, die den Dateinamen der initialen RAM-Disk angibt, die benutzt werden soll (siehe G-Ausdrücke).
device
(Vorgabe: #f
)Das Gerät, auf dem Kernel und initrd zu finden sind – d.h. bei GRUB die Wurzel (root) dieses Menüeintrags (siehe root in Handbuch von GNU GRUB).
Dies kann eine Dateisystembezeichnung (als Zeichenkette), eine
Dateisystem-UUID (als Bytevektor, siehe Dateisysteme) oder #f
sein, im letzten Fall wird der Bootloader auf dem Gerät suchen, das die vom
linux
-Feld benannte Datei enthält (siehe search in Handbuch von GNU GRUB). Ein vom Betriebssystem vergebener Gerätename wie
/dev/sda1 ist aber nicht erlaubt.
multiboot-kernel
(Vorgabe: #f
)Der Kernel, der im Multiboot-Modus gebootet werden soll (siehe multiboot in GNU GRUB manual). Wenn dieses Feld gesetzt ist, wird ein Multiboot-Menüeintrag erzeugt. Zum Beispiel:
(file-append mach "/boot/gnumach")
multiboot-arguments
(Vorgabe: '()
)Liste zusätzlicher Befehlszeilenoptionen für den Multiboot-Kernel.
Zum Beispiel möchten Sie für ein Betriebssystem, das innerhalb von QEMU läuft, vielleicht eine textbasierte serielle Konsole verwenden (mit den Befehlszeilenoptionen --nographic --serial mon:stdio):
'("console=com0")
Um den neuen und noch experimentellen
auf Benutzerebene
laufenden rumpdisk-Treiber statt des in den Kernel GNU Mach
eingebauten IDE-Treibers zu verwenden, setzen Sie kernel-arguments
auf:
'("noide")
Selbstverständlich können Sie auch beide Optionen verwenden:
'("console=com0" "noide")
multiboot-modules
(Vorgabe: '()
)Die Liste der Befehle zum Laden von Multiboot-Modulen. Zum Beispiel:
(list (list (file-append hurd "/hurd/ext2fs.static") "ext2fs"
…)
(list (file-append libc "/lib/ld.so.1") "exec"
…))
chain-loader
(Vorgabe: #f
)Eine Zeichenkette, die von GRUBs chainloader
-Direktive akzeptiert
wird. Sie hat keine Auswirkungen, wenn auch die Felder linux
oder
multiboot-kernel
angegeben werden. Im folgenden Beispiel wird ein
anderes GNU/Linux-System per Chainloading gebootet.
(bootloader
(bootloader-configuration
;; …
(menu-entries
(list
(menu-entry
(label "GNU/Linux")
(device (uuid "1C31-A17C" 'fat))
(chain-loader "/EFI/GNULinux/grubx64.efi"))))))
Zurzeit lässt nur GRUB sein Aussehen durch Themen anpassen. GRUB-Themen
werden mit der grub-theme
-Form erzeugt, die hier noch nicht
vollständig dokumentiert ist.
Der Datentyp, der die Konfiguration des GRUB-Themas repräsentiert.
gfxmode
(Vorgabe: '("auto")
)Welcher gfxmode
für GRUB eingestellt werden soll (als eine Liste von
Zeichenketten mit Bildschirmauflösungen, siehe gfxmode in Handbuch von GNU GRUB).
Liefert das vorgegebene GRUB-Thema, das vom Betriebssystem benutzt wird,
wenn kein theme
-Feld im
bootloader-configuration
-Verbundsobjekt angegeben wurde.
Es wird von einem feschen Hintergrundbild begleitet, das die Logos von GNU und Guix zeigt.
Um zum Beispiel eine andere Auflösung als vorgegeben zu verwenden, würden Sie so etwas schreiben:
(bootloader
(bootloader-configuration
;; …
(theme (grub-theme
(inherit (grub-theme))
(gfxmode '("1024x786x32" "auto"))))))
Nächste: guix system
aufrufen, Vorige: Initiale RAM-Disk, Nach oben: Systemkonfiguration [Inhalt][Index]