7.3. Préparer les systèmes de fichiers virtuels du noyau

Les applications qui tournent en espace utilisateur utilisent différents systèmes de fichiers créés par le noyau pour communiquer avec le noyau lui-même. Ces systèmes de fichiers sont virtuels du fait qu'ils n’utilisent aucun espace disque. Le contenu de ces systèmes de fichiers réside en mémoire. Ces systèmes de fichiers doivent être montés dans l’arborescence de $LFS pour que les applications puissent les trouver dans l’environnement chroot.

Commencez par créer les répertoires dans lesquels les systèmes de fichiers seront montés :

mkdir -pv $LFS/{dev,proc,sys,run}

7.3.1. Monter et alimenter /dev

Lors d'un démarrage normal d'un système LFS, le noyau monte automatiquement le système de fichiers devtmpfs dans le répertoire /dev et crée des nœuds de périphériques sur ce système de fichiers virtuel pendant le processus de démarrage ou lorsqu’un périphérique est détecté ou qu'on tente d'y pour la première fois. Le démon udev permet de modifier le propriétaire, de gérer les permissions des nœuds de périphériques créés par le noyau, d’en créer de nouveaux ou de créer des liens symboliques afin de faciliter la tâche de maintenance de distribution ou d'administration système (voir le Section 9.3.2.2, « Création de nœuds de périphérique » pour plus de détails). Si le noyau hôte prend en charge devtmpfs, il est possible de monter un devtmpfs sous $LFS/dev et ainsi laisser le noyau le remplir.

Cependant, certains systèmes hôtes ne prennent pas en charge devtmpfs. Ces distributions hôtes utilisent plusieurs méthodes pour créer le contenu de /dev. La seule manière de remplir $LFS/dev indépendamment de l'hôte consiste à monter le répertoire /dev du système hôte avec l’option bind. Le montage avec --bind est un type spécial de montage qui vous permet de créer le miroir d'un répertoire ou d'un point de montage à un autre endroit. Pour ce faire, exécutez la commande suivante.

mount -v --bind /dev $LFS/dev

7.3.2. Monter les systèmes de fichiers virtuels du noyau

Montez maintenant les systèmes de fichiers virtuels du noyau restants :

mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

Voici la signification des options de montage pour devpts :

gid=5

Cela s'assure que tous les nœud de périphériques créés par devpts appartiennent au groupe 5. Il s'agit de l'identifiant qui sera utilisé plus tard pour le groupe tty. Nous utilisons l'identifiant du groupe au lieu d'un nom, car le système hôte pourrait utiliser un ID différent pour son groupe tty.

mode=0620

Cela s'assure que tous les nœuds de périphérique créés par devpts ont le mode 0620 (lisible et inscriptible par l'utilisateur, inscriptible par le groupe). Avec l'option précédente, cela s'assure que devpts créera des nœuds de périphérique qui respectent les prérequis de grantpt(), ce qui signifie que le binaire auxiliaire pt_chown Glibc (qui n'est pas installé par défaut) n'est pas nécessaire.

Dans certains systèmes hôtes, /dev/shm est un lien symbolique vers un répertoire, en général /run/shm. Le tmpfs /run a été monté plus tôt, donc, dans ce cas précis, vous aurez uniquement à créer un répertoire avec les bonnes permissions.

Sur d’autres systèmes hôtes, /dev/shm est un point de montage pour un tmpfs. Dans ce cas, le montage de /dev ci-dessus créera le répertoire /dev/shm dans l'environnement chroot. En parallèle, il faudra alors créer explicitement un tmpfs :

if [ -h $LFS/dev/shm ]; then
  install -v -d -m 1777 $LFS$(realpath /dev/shm)
else
  mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi