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.
Certains paquets non compris dans LFS suggèrent d'installer GNU libiconv pour traduire les données d'un codage en un autre. La page d'accueil du projet (http://www.gnu.org/software/libiconv/) précise « Cette bibliothèque fournit une implémentation de iconv(), à utiliser sur les systèmes qui n'en disposent pas ou dont l'implémentation ne convertit pas l'Unicode. » Glibc fournit une implémentation d'iconv() et peut convertir de l'Unicode, du coup libiconv n'est pas requis sur un système LFS.
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 ../glibc-linuxthreads-2.3.4.tar.bz2
Dans de rares circonstances, Glibc peut générer une erreur de segmentation quand aucun répertoire de recherche standard n'existe. Le correctif suivant s'occupe de ce problème :
patch -Np1 -i ../glibc-2.3.4-rtld_search_dirs-1.patch
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
Appliquez le correctif suivant pour corriger un bogue dans Glibc qui peut empêcher certains programmes (comme OpenOffice.org) de fonctionner correctement :
patch -Np1 -i ../glibc-2.3.4-tls_assert-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 -v ../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 :
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 -k check >glibc-check-log 2>&1 grep Error glibc-check-log
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 tests 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 Section 2.4, « 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 trouve dans le fichier glibc-2.3.4/localedata/SUPPORTED) 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 -pv /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 en ce moment. Ceci s'applique aussi aux locales ja_JP et fa_IRelles 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 -v --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 :
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