Suivant: Configuration du chargeur d’amorçage, Précédent: Name Service Switch, Monter: Configuration du système [Table des matières][Index]
Pour l’amorçage, 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
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.
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 à l’amorçage. 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.
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 à l’amorçage 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]