Le paquet Glibc contient la bibliothèque C principale. Cette bibliothèque fournit toutes les routines basiques pour allouer de la mémoire, rechercher des répertoires, ouvrir et fermer des fichiers, les lire et les écrire, gérer les chaînes, faire correspondre des modèles, faire de l'arithmétique et ainsi de suite.
Ce paquet est connu pour avoir des soucis quand les options
d'optimisation par défaut (en incluant les options
-march
et -mcpu
) sont modifiées.
Donc, si des variables d'environnement qui surchargent les optimisations par
défaut, telles que CFLAGS
et CXXFLAGS
, ont été
définies, supprimez cette initialisation pour la construction de GCC.
Le système de construction de la Glibc est très bien fait et s'installera
parfaitement, même si notre fichier specs pour le compilateur et l'éditeur de
liens pointent toujours vers /tools
. Les
specs et l'éditeur de liens ne peuvent pas être ajustés avant l'installation de
la Glibc parce que les tests d'autoconf de Glibc donneraient alors des
résultats faussés, défaussant ainsi notre but d'achever une construction
propre.
L'archive tar linuxthreads contient les pages man pour les bibliothèques de threading installées par Glibc. Déballez l'archive tar à l'intérieur du répertoire source Glibc :
tar -xjvf /sources/glibc-linuxthreads-2.3.4.tar.bz2
Glibc contient deux tests qui échoueront si le noyau en cours d'exécution est un 2.6.11.x. Le problème se situe sur les tests eux-même, pas avec la libc ou le noyau. Ce correctif corrige le problème :
patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch
La documentation de Glibc recommande de construire Glibc en dehors du répertoire des sources dans un répertoire de construction dédié :
mkdir ../glibc-build cd ../glibc-build
Préparez la compilation de Glibc :
../glibc-2.3.4/configure --prefix=/usr \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
Voici la signification des options de configure :
--libexecdir=/usr/lib/glibc
Ceci modifie l'emplacement du programme
pt_chown
, dont la valeur par défaut est /usr/libexec
, par /usr/lib/glibc
.
Compilez le paquet :
make
Dans cette section, la suite de tests de Glibc est considérée comme critique. Ne pas la laissez passer quelque soient les circonstances.
Testez les résultats :
make check
La suite de tests Glibc est grandement dépendante de certaines fonctions de l'hôte système, en particulier le noyau. En général, la suite de tests Glibc devrait toujours réussir. Néanmoins, dans certaines circonstances, quelques échecs sont inévitables. Voici une liste des problèmes les plus fréquents :
Les tes math échouent quelque fois lors de leur exécution sur des systèmes où le processeur n'est pas un Intel ou un AMD authentique. Certains paramétrages d'optimisation sont aussi un facteur connu pour ce type de problèmes.
Les tests gettext échouent quelque fois à cause de problèmes sur le système hôte, les raisons exactes n'étant pas encore claires.
Si vous avez monté la partition LFS avec l'option
noatime
, le test atime échouera.
Comme mentionné dans la section intitulée « Monter la nouvelle partition », n'utilisez pas l'option
noatime
lors de la construction de LFS.
Lors d'une exécution sur un matériel ancien et lent, quelques tests peuvent échouer à cause de délais excédés.
Bien que ce ne soit qu'un simple message, l'étape d'installation de
Glibc se plaindra de l'absence de /etc/ld.so.conf
.
Supprimez ce message d'avertissement avec :
touch /etc/ld.so.conf
Installez le paquet :
make install
Les locales qui permettent à votre système de répondre en une langue différente n'ont pas été installées avec la commande ci-dessus. Installez-les avec ceci :
make localedata/install-locales
Pour gagner du temps, une alternative à la commande précédente (qui
génère et installe toutes les locales qu'il connaît) est d'installer uniquement
les locales que vous souhaitez et dont vous avez besoin. Ceci se fait en
utilisant la commande localedef. Des informations sur cette
commande sont disponibles dans le fichier INSTALL
des
sources de Glibc. Néanmoins, il existe un certain nombre de locales
essentielles pour réussir les tests des paquets futurs, en particulier les
tests de libstdc++. Les instructions suivantes,
contrairement à la cible install-locales
ci-dessus,
installeront l'ensemble minimal des locales nécessaires pour que les tests se
passent dans de bonnes conditions :
mkdir -p /usr/lib/locale localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i it_IT -f ISO-8859-1 it_IT localedef -i ja_JP -f EUC-JP ja_JP
Certaines locales installées par la commande make localedata/install-locales ci-dessus ne sont pas supportées correctement par certaines applications comprises dans les livres LFS et BLFS. À cause des différents problèmes survenus parce que les développeurs des applications ont fait dex choix qui ont cassé ces locales, LFS ne devrait pas être utilisé avec des locales qui utilisent des ensembles de caractères à plusieurs octets (ceci incluant UTF-8) ou l'ordre d'écriture de droite à gauche. De nombreux correctifs officieux et instables sont requis pour corriger ces problèmes et il a été décidé par les développeurs de LFS que ces locales complexes ne seraient pas supportées. Ceci s'applique aussi aux locales ja_JP et fa_IR—elles ont été installés seulement pour que les tests de GCC et Gettext réussissent bien que le programme watch (un composant du paquetage Procps) ne fonctionne pas correctement avec elles. Différents essais pour contourner ces restrictions sont documentés dans les astuces relatives à l'internationalisation.
Construisez les pages man de linuxthreads qui sont une grande référence à l'API des threads (applicable aussi à NPTL) :
make -C ../glibc-2.3.4/linuxthreads/man
Installez ces pages :
make -C ../glibc-2.3.4/linuxthreads/man install
Le fichier /etc/nsswitch.conf
doit être créé
parce que, bien que Glibc en fournisse un par défaut lorsque ce fichier est
manquant ou corrompu, les valeurs par défaut de Glibc ne fonctionnent pas bien
dans un environnement en réseau. De plus, le fuseau horaire a besoin d'être
configuré.
Créez un nouveau fichier /etc/nsswitch.conf
en
lançant ce qui suit :
cat > /etc/nsswitch.conf << "EOF" # Début /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # Fin /etc/nsswitch.conf EOF
Pour déterminer dans quel fuseau horaire vous vous situez, lancez le script suivant :
tzselect
Lorsque avoir répondu à quelques questions sur votre emplacement, le
script affichera le nom du fuseau horaire (quelque chose comme
EST5EDT ou Canada/Eastern). Ensuite,
créez le fichier /etc/localtime
en lançant :
cp --remove-destination /usr/share/zoneinfo/[xxx] \ /etc/localtime
Remplacez [xxx]
avec le nom du fuseau horaire
que tzselect a fourni (c'est-à-dire Canada/Eastern).
Voici la signification de l'option de cp :
--remove-destination
Ceci est nécessaire pour forcer la suppression du lien
symbolique déjà existant. La raison pour laquelle nous copions plutôt que de
simplement créer un lien symbolique est de se couvrir de la situation où
/usr
serait une partition séparée. Ceci
pourrait arriver, par exemple, en démarrant en mode simple
utilisateur.
Par défaut, le chargeur dynamique (/lib/ld-linux.so.2
) cherche les bibliothèques
partagées, nécessaires aux programmes lors de leur exécution, dans /lib
et /usr/lib
. Néanmoins, s'il existe des bibliothèques
dans d'autres répertoires que /lib
et
/usr/lib
, leur emplacement doit être
ajouté dans le fichier /etc/ld.so.conf
pour que le
chargeur dynamique les trouve. /usr/local/lib
et /opt/lib
sont deux répertoires connus pour
contenir des bibliothèques supplémentaires, donc ajoutez ces deux
répertoires au chemin de recherche du chargeur dynamique.
Créez un nouveau fichier /etc/ld.so.conf
en lançant
ce qui suit :
cat > /etc/ld.so.conf << "EOF" # Début /etc/ld.so.conf /usr/local/lib /opt/lib # Fin /etc/ld.so.conf EOF