5.5. Glibc-2.39

Le paquet Glibc contient la bibliothèque du C principale. Cette bibliothèque fournit toutes les routines basiques pour allouer de la mémoire, chercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes, faire correspondre des modèles, faire des calculs et ainsi de suite.

Temps de construction approximatif: 1,5 SBU
Espace disque requis: 846 Mo

5.5.1. Installation de Glibc

Tout d'abord, créez un lien symbolique pour respecter le LSB. De plus, pour x86_64, créez un lien symbolique de compatibilité requis pour le bon fonctionnement du chargeur de bibliothèques dynamiques :

case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
    ;;
esac
[Note]

Note

La commande ci-dessus est correcte. La commande ln a plusieurs versions syntaxiques, donc assurez-vous de vérifier info coreutils ln et n(1) avant de signaler ce que vous pensez être une erreur.

Certains programmes de Glibc utilisent le répertoire /var/db qui ne respecte pas le FHS pour stocker leurs données d'exécution. Appliquez le correctif suivant pour que ces programmes stockent leurs données d'exécution aux emplacements indiqués par le FHS :

patch -Np1 -i ../glibc-2.39-fhs-1.patch

La documentation de Glibc recommande de construire Glibc dans un répertoire de construction dédié :

mkdir -v build
cd       build

Assurez-vous que les utilitaires ldconfig et sln sont installés dans /usr/sbin :

echo "rootsbindir=/usr/sbin" > configparms

Ensuite, préparez la compilation de Glibc :

../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=4.19               \
      --with-headers=$LFS/usr/include    \
      --disable-nscd                     \
      libc_cv_slibdir=/usr/lib

Voici la signification des options de configuration :

--host=$LFS_TGT, --build=$(../scripts/config.guess)

L'effet combiné de ces commutateurs est que le système de construction de Glibc se configure pour se compiler de manière croisée en utilisant l'éditeur de liens croisé et le compilateur croisé dans $LFS/tools.

--enable-kernel=4.19

Ceci indique à Glibc de compiler la bibliothèque en prenant en charge les noyaux 4.19 et les noyaux Linux ultérieurs. Les contournements pour des noyaux plus anciens ne sont pas activés.

--with-headers=$LFS/usr/include

jCeci dit à Glibc de se compiler contre les en-têtes récemment installés dans le répertoire $LFS/usr/include, afin qu'il connaisse exactement les fonctionnalités du noyau et puisse s'optimiser en conséquence.

libc_cv_slibdir=/usr/lib

Cette option s'assure que la bibliothèque est installée dans /usr/lib au lieu du répertoire /lib64 par défaut sur les machines 64 bits.

--disable-nscd

Ne pas construire le démon de cache de service de nom qui n'est plus utilisé.

Lors de cette étape, le message d'avertissement suivant peut apparaître :

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Le programme msgfmt, manquant ou incompatible, ne pose généralement pas de problème. Ce programme msgfmt fait partie du paquet Gettext que la distribution hôte devrait fournir.

[Note]

Note

Il a été rapporté que ce paquet pouvait ne pas fonctionner en construisant avec un « make parallèle ». Si cela arrive, relancez la commande make avec l'option -j1.

Compilez le paquet :

make

Installez le paquet :

[Avertissement]

Avertissement

Si LFS n'est pas correctement configurée, et si malgré les recommandations vous construisez en root, la commande suivante installera la Glibc nouvellement construite sur votre système hôte, ce qui le rendra presque sûrement inutilisable. Alors assurez-vous que l'environnement est correctement initialisé et que vous n'êtes pas root avant de lancer la commande suivante.

make DESTDIR=$LFS install

Voici la signification de l'option de make install ::

DESTDIR=$LFS

La variable make DESTDIR est utilisée par presque tous les paquets pour définir l'emplacement où le paquet sera installé. Si elle n'est pas configurée, elle renvoie par défaut à la racine (/). Ici, nous spécifions que le paquet doit être installé dans $LFS, qui deviendra la racine après le Section 7.4, « Entrer dans l'environnement chroot ».

Corrigez un chemin codé en dur vers le chargeur d'exécutable dans le script ldd :

sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
[Attention]

Attention

À ce stade, il est impératif de vous arrêter et de vous assurer que les fonctions de base (compilation et édition des liens) du nouvel ensemble d'outils fonctionnent comme prévu. Pour effectuer un test de propreté, lancez les commandes suivantes :

echo 'int main(){}' | gcc -xc -
readelf -l a.out | grep ld-linux

Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la dernière commande aura cette forme :

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Notez que pour les machines 32 bits, le nom de l'interpréteur sera /lib/ld-linux.so.2.

Si l'affichage diffère ou s'il n'y a aucun affichage, alors quelque chose ne fonctionne pas. Examinez et reconstituez vos étapes pour trouver d'où vient le problème et comment le corriger. Ce problème doit être corrigé avant de continuer.

Une fois que tout va bien, nettoyez le fichier de test :

rm -v a.out
[Note]

Note

La construction des paquets dans le prochain chapitre servira de test supplémentaire pour vérifier que l'ensemble d'outils a été construit correctement. Si la construction de certains paquets échoue, en particulier Binutils-pass2 ou GCC-pass2, c'est une indication que quelque chose s’est mal passé dans les installations précédentes de Binutils, GCC, ou Glibc.

Les détails sur ce paquet sont disponibles dans Section 8.5.3, « Contenu de Glibc. »