8.3.1. Installation du noyau
        
        
          Construire le noyau implique un certain nombre d'étapes
          — configuration, compilation et installation. Pour connaître
          les autres méthodes que celle employée par ce livre pour configurer
          le noyau, lisez le fichier README
          contenu dans les sources du noyau.
        
        
          Préparez la compilation en lançant la commande suivante :
        
        make mrproper
        
          Ceci nous assure que le répertoire du noyau est propre. L'équipe du
          noyau recommande le lancement de cette commande avant chaque
          compilation du noyau. Vous ne devez pas supposer que le répertoire
          des sources est propre juste après avoir été déballé.
        
        
          Configurez le noyau via l'interface par menu. Pour des informations
          d'ordre général sur la configuration du noyau, consultez 
          http://www.fr.linuxfromscratch.org/view/astuces/kernel-configuration-fr.txt.
          BLFS offre aussi quelques informations complémentaires concernant
          les besoins particuliers de configuration pour les paquets en
          dehors de LFS : 
          http://www.fr.linuxfromscratch.org/view/blfs-7.10/longindex.html#kernel-config-index.
          Vous pouvez trouver des informations supplémentaires sur la
          configuration et la construction du noyau sur http://www.kroah.com/lkn/
        
        
          ![[Note]](../images/note.png) 
          
            Note
          
          
            Un bon point de départ pour effectuer la configuration du noyau
            est de lancer make
            defconfig. Cela opérera une configuration de base
            de bonne qualité en prenant en compte l'architecture actuelle de
            votre système.
          
          
            Soyez sûr d'activer ou désactiver les fonctionnalités suivantes
            ou le système ne démarrera pas correctement dans les deux
            cas :
          
          
General setup -->
   [ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
   [ ] Enable deprecated sysfs features by default [CONFIG_SYSFS_DEPRECATED_V2]
   [*] open by fhandle syscalls [CONFIG_FHANDLE]
   [ ] Auditing support [CONFIG_AUDIT]
   [*] Control Group support [CONFIG_CGROUPS]
Processor type and features  --->
   [*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
Networking support  --->
  Networking options  --->
   <*> The IPv6 protocol [CONFIG_IPV6]
Device Drivers  --->
  Generic Driver Options  --->
   [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
   [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
   [ ] Fallback user-helper invocation for firmware loading [CONFIG_FW_LOADER_USER_HELPER]
Firmware Drivers  --->
   [*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
File systems  --->
   [*] Inotify support for userspace [CONFIG_INOTIFY_USER]
   <*> Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]
  Pseudo filesystems  --->
   [*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
   [*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]
         
        
          ![[Note]](../images/note.png) 
          
            Note
          
          
            Même si "Le Protocole IPv6" n'est pas strictement nécéssaire, il
            est fortement recommandé par les dévelopeurs de systemd.
          
         
        
          
            Voici pourquoi on vise les éléments de configuration
            ci-dessus :
          
          
            - 
              Support for
              uevent helper
- 
              
                L'activation de cette option peut interférer avec la gestion
                de périphériques quand on utilise Udev/Eudev.
               
- 
              Maintain a
              devtmpfs
- 
              
                Ceci créera des nœuds de périphérique automatiquement,
                générés par le noyau même sans Udev. Udev fonctionne alors
                sur cette base pour gérer les droits et l'ajout de liens
                symboliques. Cet élément de configuration est nécessaire pour
                tous les utilisateurs d'udev/eudev.
               
 
        make menuconfig
        
          
            Voici la signification des variables d’environnement
            facultatives de make :
          
          
            - 
              LANG=<valeur_LANG_de_l_hote>
              LC_ALL=
- 
              
                Ceci rend identique les paramétrages régionaux à ceux
                utilisés sur l'hôte. C'est indispensable pour que l’interface
                ncurses de menuconfig soit correctement dessinée sur la
                console texte de Linux en UTF-8.
               
                Assurez-vous si besoin de remplacer <valeur_LANG_de_l_hote>par la valeur de la variable$LANGde votre hôte. Vous pouvez utiliser à la place les valeurs$LC_ALLou$LC_CTYPEde l'hôte.
 
 
        
          Sinon, make oldconfig
          peut être plus approprié dans certaines situations. Voir le fichier
          README pour plus d'informations.
        
        
          Si vous le désirez, vous pouvez sauter la configuration du noyau en
          copiant le fichier de configuration, .config, du système hôte (en supposant qu'il est
          disponible) dans le répertoire linux-4.7.2 tout juste déballé. Néanmoins, nous
          ne recommandons pas cette option. Il est souvent meilleur
          d'explorer tous les menus de configuration et de créer la
          configuration du noyau à partir de zéro.
        
        
          Compilez l'image du noyau et les modules :
        
        make
        
          Si vous utilisez des modules du noyau, il peut être nécessaire de
          les configurer dans le fichier /etc/modprobe.d. Des informations au sujet de la
          configuration du noyau et des modules se trouvent à la Section 7.3,
          « Manipulation des périphériques et modules » et dans
          le répertoire linux-4.7.2/Documentation de la documentation du
          noyau. Enfin, modprobe.d(5) pourrait
          aussi être intéressant.
        
        
          Installez les modules si la configuration du noyau les
          utilise :
        
        make modules_install
        
          Une fois la compilation du noyau terminée, des étapes
          supplémentaires sont encore nécessaires pour terminer
          l'installation. Certains fichiers ont besoin d'être copiés dans le
          répertoire /boot.
        
        
          ![[Attention]](../images/caution.png) 
          
            Attention
          
          
            Si le système hôte a une partition /boot séparée, les fichiers
            copiés ci-dessous doivent aller là. La manière la plus simple de
            procéder est de lier /boot sur l’hôte à /mnt/lfs/boot avant de
            continuer :
          
          mount --bind /boot /mnt/lfs/boot
         
        
          Le chemin vers l'image du noyau pourrait varier suivant la
          plateforme utilisée. Vous pouvez changer le nom du fichier
          ci-dessous selon votre goût, mais la nomenclature du nom de fichier
          devrait ressembler à vmlinuz
          pour être compatible avec le paramétrage automatique du processus
          de démarrage décrit dans la section à venir. La commande suivante
          présuppose une architecture x86 :
        
        cp -v arch/x86/boot/bzImage /boot/vmlinuz-4.7.2-lfs-7.10-systemd
        
          System.map est un fichier de symboles
          pour le noyau. Il cartographie les points d'entrée de chaque
          fonction dans l'API du noyau, ainsi que les adresses de ses
          structures de données pendant l'exécution. Il sert de référence
          lors des investigations sur les problèmes de noyau. Lancez la
          commande suivante pour installer le fichier de symboles :
        
        cp -v System.map /boot/System.map-4.7.2
        
          Le fichier de configuration du noyau .config produit à l'étape make menuconfig ci-dessus
          contient toutes les options de configuration choisies pour le noyau
          qui vient d'être compilé. Conserver ce fichier est une bonne idée
          pour pouvoir s'y référer plus tard :
        
        cp -v .config /boot/config-4.7.2
        
          Installez la documentation du noyau Linux :
        
        install -d /usr/share/doc/linux-4.7.2
cp -r Documentation/* /usr/share/doc/linux-4.7.2
        
          Il est important de noter que les fichiers dans le répertoire des
          sources du noyau n'appartiennent pas à root. Chaque fois qu'un paquet est
          déballé par l'utilisateur root (comme on a fait dans chroot), les
          fichiers ont les ID de l'utilisateur et du groupe de l'empaqueteur
          sur son système hôte. En principe ce n'est pas un problème car
          l'arborescence des sources est supprimée après l'installation. En
          revanche, l'arborescence de Linux est souvent conservée longtemps.
          Du coup, il y a des chances que tout ce que l'ID de l'utilisateur
          ayant déballé le paquet a utilisé ne soit affecté à quelqu'un
          d'autre sur la machine. Cette personne pourrait alors avoir un
          droit d'écriture sur les sources du noyau.
        
        
          ![[Note]](../images/note.png) 
          
            Note
          
          
            Dans de nombreux cas, la configuration du noyau aura besoin
            d'être mise à jour pour les paquets qui serojnt installés plutard
            dans BLFS. Contrairement aux autres paquets, il n'est pas
            nécessaire de supprimer les sources du noyau après l'installation
            du noyau nouvellement construit.
          
          
            Si vous conservez l'arborescence des sources du noyau, lancez
            chown -R 0:0 sur le
            répertoire linux-4.7.2 pour vous
            assurer que tous les fichiers appartiennent à root.
          
         
        
          ![[Avertissement]](../images/warning.png) 
          
            Avertissement
          
          
            Certaines documentations du noyau recommandent de créer un lien
            symbolique à partir de /usr/src/linux pointant vers le répertoire des
            sources du noyau. Ceci est spécifique aux noyaux antérieurs à la
            série 2.6 et ne doit pas
            être réalisé sur un système LFS car il peut poser des problèmes
            pour les paquets que vous souhaitez construire une fois votre
            système LFS de base complet.
          
         
        
          ![[Avertissement]](../images/warning.png) 
          
            Avertissement
          
          
            Les en-têtes du répertoire système include (/usr/include) devraient toujours être celles avec lesquelles
            Glibc a été compilé, à savoir, les en-têtes de santé installées
            au Section 6.7,
            « Linux-4.7.2 API Headers ». Donc, elles ne
            devraient jamais être
            remplacées par les en-têtes du noyau brut ou par d'autres
            en-têtes de santé expurgées du noyau.
          
         
       
      
        
          8.3.2. Configuration
          de l'ordre de chargement des modules Linux
        
        
          La plupart du temps, les modules Linux sont chargés
          automatiquement, mais il faut parfois des directives
          supplémentaires. Le programme qui charge les modules, modprobe ou insmod, utilise /etc/modprobe.d/usb.conf à cette fin. Il faut
          créer ce fichier afin que, si les pilotes USB (ehci_hcd, ohci_hcd
          et uhci_hcd) ont été construits en module, ils soient chargés dans
          le bon ordre ; ehci_hcd doit être chargé avant ohci_hcd et
          uhci_hcd afin d'éviter un avertissement au moment du démarrage.
        
        
          Créez un nouveau /etc/modprobe.d/usb.conf en lançant ce qui
          suit :
        
        install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Début de /etc/modprobe.d/usb.conf
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
# Fin de /etc/modprobe.d/usb.conf
EOF