Suivant: Configuration du chargeur d'amorçage, Précédent: Name Service Switch, Monter: Configuration du système [Table des matières][Index]
Pour le démarrage, on passe au noyau Linux-Libre un disque de RAM initial ou initrd. Un initrd contient un système de fichier racine temporaire ainsi qu’un script d’initialisation. Ce dernier est responsable du montage du vrai système de fichier racine et du chargement des modules du noyau qui peuvent être nécessaires à cette tâche.
Le champ initrd-modules
d’une déclaration operating-system
vous permet de spécifier les modules du noyau Linux-Libre qui doivent être
disponibles dans l’initrd. En particulier, c’est là où vous devez lister
les modules requis pour effectivement piloter le disque dur où se trouve la
partition racine — bien que la valeur par défaut de initrd-modules
couvre la plupart des cas. Par exemple, en supposant que vous ayez besoin
du module megaraid_sas
en plus des modules par défaut pour accéder à
votre système de fichiers racine, vous écririez :
(operating-system
;; …
(initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
C’est la liste des modules du noyau inclus dans l’initrd par défaut.
En plus, si vous avez besoin de paramétrages plus bas niveau, le champ
initrd
d’une déclaration operating-system
vous permet de
spécifier quel initrd vous voudriez utiliser. Le module (gnu system
linux-initrd)
fournit trois manières de construire un initrd : la procédure
base-initrd
de haut niveau et les procédures raw-initrd
et
expression->initrd
de bas niveau.
La procédure base-initrd
est conçue pour couvrir la plupart des
usages courants. Par exemple, si vous voulez ajouter des modules du noyau à
charger au démarrage, vous pouvez définir le champ initrd
de votre
déclaration de système d’exploitation ainsi :
(initrd (lambda (file-systems . rest)
;; Crée un initrd standard mais paramètre le réseau
;; avec les paramètres que QEMU attend par défaut.
(apply base-initrd file-systems
#:qemu-networking? #t
rest)))
La procédure base-initrd
gère aussi les cas d’utilisation courants
qui concernent l’utilisation du système comme client QEMU, ou comme un
système « live » avec un système de fichier racine volatile.
La procédure base-initrd
est construite à partir de la procédure
raw-initrd
. Contrairement à base-initrd
, raw-initrd
ne
fait rien à haut-niveau, comme essayer de deviner les modules du noyau et
les paquets qui devraient être inclus dans l’initrd. Un exemple
d’utilisation de raw-initrd
serait si un utilisateur a une
configuration personnalisée du noyau Linux et que les modules du noyau
inclus par défaut par base-initrd
ne sont pas disponibles.
Le disque de RAM initial produit par base-initrd
ou raw-initrd
honore plusieurs options passées par la ligne de commande du noyau Linux
(c’est-à-dire les arguments passés via la commande linux
de GRUB ou
l’option -append
de QEMU), notamment :
gnu.load=boot
Dit au disque de RAM initial de charger boot, un fichier contenant un programme Scheme, une fois qu’il a monté le système de fichier racine.
Guix utilise cette option pour donner le contrôle à un programme de démarrage qui lance les programmes d’activation de services puis démarre le GNU Shepherd, le système d’initialisation.
root=root
Monte root comme système de fichier racine. root peut être un
nom de périphérique comme /dev/sda1
, une étiquette de système de
fichiers ou un UUID de système de fichiers. Lorsque ce n’est pas spécifié,
le nom de périphérique du système de fichier racine de la déclaration de
système d’exploitation est utilisé.
rootfstype=type
Set the type of the root file system. It overrides the type
field of
the root file system specified via the operating-system
declaration,
if any.
rootflags=options
Set the mount options of the root file system. It overrides the
options
field of the root file system specified via the
operating-system
declaration, if any.
fsck.mode=mode
Contrôle s’il faut vérifier ou pas le système de fichier root avant de
le monter. mode peut valoir skip
(ne jamais vérifier),
force
(toujours vérifier), ou auto
pour respecter le réglage
check?
du système de fichier racine et n’exécuter une analyse
complète que si le système de fichier n’a pas été éteint proprement.
auto
est la valeur par défaut si cette option n’est pas renseignée ou
si mode n’a pas l’une des valeurs ci-dessus.
fsck.repair=niveau
Le niveau de réparation à effectuer automatiquement si des erreurs sont
détectées dans le système de fichier root. level prend les
valeurs no
(ne pas écrire du tout sur root si possible),
yes
(réparer autant que possible), ou preen
pour réparer les
problèmes considérés réparables automatiquement sans risque.
preen
est la valeur par défaut si cette option n’est pas renseignée
ou si level n’est pas l’une des valeurs ci-dessus.
gnu.system=system
S’assure que /run/booted-system et /run/current-system pointent vers system.
modprobe.blacklist=modules…
Dit au disque de RAM initial ainsi qu’à la commande modprobe
(du
paquet kmod) de refuser de charger modules. modules doit être
une liste de noms de modules séparés par des virgules — p. ex.
usbkbd,9pnet
.
gnu.repl
Démarre une boucle lecture-évaluation-affichage (REPL) depuis le disque de RAM initial avant qu’il n’essaye de charger les modules du noyau et de monter le système de fichiers racine. Notre équipe commerciale appelle cela boot-to-Guile. Le Schemeur en vous va adorer. Voir Using Guile Interactively dans GNU Guile Reference Manual, pour plus d’information sur le REPL de Guile.
Maintenant que vous connaissez toutes les fonctionnalités des disques de RAM
initiaux produits par base-initrd
et raw-initrd
, voici comment
l’utiliser le personnalisé plus avant.
a derivation that builds a raw initrd. file-systems is a list of file
systems to be mounted by the initrd, possibly in addition to the root file
system specified on the kernel command line via root.
linux-modules is a list of kernel modules to be loaded at boot time.
mapped-devices is a list of device mappings to realize before
file-systems are mounted (voir Périphériques mappés).
helper-packages is a list of packages to be copied in the initrd. It
may include e2fsck/static
or other packages needed by the initrd to
check the root file system.
Lorsque la valeur est vraie, keyboard-layout est un enregistrement
<keyboard-layout>
dénotant la disposition du clavier désirée pour la
console. Cela est effectuée avant que les mapped-devices ne soient
créés et avant que les file-systems ne soient montés, de sorte que, si
l’utilisateur au besoin de saisir une phrase de passe ou d’utiliser le REPL,
cela arrive avec la disposition du clavier voulue.
Lorsque qemu-networking? est vrai, paramètre le réseau avec les paramètres QEMU standards. Lorsque virtio? est vrai, charge des modules supplémentaires pour que l’initrd puisse être utilisé comme client QEMU avec les pilotes I/O para-virtualisés.
Lorsque volatile-root? est vrai, le système de fichier racine est inscriptible mais tous les changements seront perdus.
[#:volatile-root? #f] [#:linux-modules ’()] Return as a file-like object a generic initrd, with kernel modules taken from linux. file-systems is a list of file-systems to be mounted by the initrd, possibly in addition to the root file system specified on the kernel command line via root. mapped-devices is a list of device mappings to realize before file-systems are mounted.
Lorsque la valeur est vraie, keyboard-layout est un enregistrement
<keyboard-layout>
dénotant la disposition du clavier désirée pour la
console. Cela est effectuée avant que les mapped-devices ne soient
créés et avant que les file-systems ne soient montés, de sorte que, si
l’utilisateur au besoin de saisir une phrase de passe ou d’utiliser le REPL,
cela arrive avec la disposition du clavier voulue.
qemu-networking? et volatile-root? se comportent comme pour
raw-initrd
.
L’initrd est automatiquement remplie avec tous les modules du noyau requis pour file-systems et pour les options données. On peut lister des modules supplémentaires dans linux-modules. Ils seront ajoutés à l’initrd et chargés au démarrage dans l’ordre dans lequel ils apparaissent.
Inutile de le dire, les initrds que nous produisons et utilisons incluent
une version de Guile liée statiquement, et le programme d’initialisation est
un programme Guile. Cela donne beaucoup de flexibilité. La procédure
expression->initrd
construit un tel initrd, étant donné le programme
à lancer dans cet initrd.
Renvoie un objet simili-fichier contenant un initrd Linux (une archive cpio compressée avec gzip) contenant guile et qui évalue exp, une G-expression, au démarrage. Toutes les dérivations référencées par exp sont automatiquement copiées dans l’initrd.
Suivant: Configuration du chargeur d'amorçage, Précédent: Name Service Switch, Monter: Configuration du système [Table des matières][Index]