Suivant: , Précédent: , Monter: Configuration du système   [Table des matières][Index]


12.13 Disque de RAM initial

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)))
Variable Scheme :%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 prend en compte 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

Indique le type du système de fichiers racine. Il remplace le champ type du système de fichiers racine spécifié dans la déclaration operating-system, s’il existe.

rootflags=options

Indique les options de montage du système de fichiers racine. Elles remplacent le champ options du système de fichiers racine spécifié dans la déclaration operating-system s’il existe.

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? de l’objet <file-system> pour la racine (voir Systèmes de fichiers) 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=système

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.

Procédure Scheme :raw-initrd file-systems [#:linux-modules '()] [#:pre-mount #t] [#:mapped-devices '()] [#:keyboard-layout #f] [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]

Renvoie une dérivation qui construit un initrd. file-systems est une liste de systèmes de fichiers à monter par l’initrd, éventuellement en plus du système de fichier racine spécifié sur la ligne de commande du noyau via root. linux-modules est une liste de modules du noyau à charger au démarrage. mapped-devices est une liste de correspondances de périphériques à réaliser avant que les file-systems ne soient montés (voir Périphériques mappés). helper-packages est une liste de paquets à copier dans l’initrd. Elle peut inclure e2fsck/static ou d’autres paquets requis par l’initrd pour vérifier le système de fichiers racine.

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.

Procédure Scheme :base-initrd file-systems [#:mapped-devices '()] [#:keyboard-layout #f] [#:qemu-networking? #f] [#:volatile-root? #f] [#:linux-modules '()]

Renvoie un objet simili-fichier contenant un initrd générique, avec les modules du noyau de linux. file-systems est une liste de systèmes de fichiers à monter par l’initrd, éventuellement en plus du système de fichiers racine spécifié sur la ligne de commande du noyau via root. mapped-devices est une liste de correspondances de périphériques à réaliser avant de monter les file-systems.

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.

Procédure Scheme :expression->initrd exp [#:guile %guile-static-stripped] [#:name "guile-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]