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.
Temps de construction approximatif : 12,3 SBU Espace disque requis : 784 Mo
L'installation de Glibc dépend de Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
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. Nous ne pouvons pas ajuster specs et éditeur de liens 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.
Avant de commencer à construire Glibc, rappelez-vous de ré-initialiser toutes les variables d'environnements qui surchargent les options d'optimisation par défaut.
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
Maintenant, préparez la compilation de Glibc :
../glibc-2.3.3-lfs-5.1/configure --prefix=/usr \ --disable-profile --enable-add-ons=linuxthreads \ --libexecdir=/usr/lib --with-headers=/usr/include \ --without-cvs
Voici la signification des options de configure :
--libexecdir=/usr/lib : ceci modifie l'emplacement du programme pt_chown, dont la valeur par défaut est /usr/libexec, par /usr/lib. L'utilisation de libexec n'est pas considérée compatible avec le FHS parce que FHS ne le mentionne même pas.
--with-headers=/usr/include : ceci nous assure que les en-têtes du noyau situés dans /usr/include sont utilisés pour cette construction. Si vous ne passez pas cette option, alors les en-têtes provenant de /tools/include sont utilisés ce qui n'est pas idéal (bien qu'ils soient identiques). Utiliser cette option a l'avantage que vous serez immédiatement informé si vous avez oublié d'installer les en-têtes du noyau dans /usr/include.
Compilez le paquet :
make
La suite de tests de Glibc dans cette section est considérée comme critique. Notre conseil est de ne pas la laisser passer quelque soient les circonstances.
Testez les résultats :
make check
Les notes sur la suite de tests, disponibles sur la section intitulée « Glibc-2.3.3-lfs-5.1 », sont toujours appropriées ici. Assurez-vous de vous y référer si vous avez un doute.
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 petit message bien ennuyant avec :
touch /etc/ld.so.conf
Et, 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. Faites-le avec ceci :
make localedata/install-locales
Une alternative à la commande précédente est d'installer uniquement les locales que vous souhaitez. Ceci se fait en utilisant la commande localedef. Des informations là-dessus 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
Enfin, construisez les pages man de linuxthreads :
make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man
Et installez ces pages :
make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man install
Nous allons créer le fichier /etc/nsswitch.conf 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 avec le réseau. De plus, notre 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 trouver dans quel fuseau horaire vous vous trouvez, lancez le script suivant :
tzselect
Lorsque vous aurez répondu à quelques questions sur votre emplacement, le script affichera le nom de votre 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/Canada/Eastern /etc/localtime
Voici la signification de l'option :
--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.
Bien sur, au lieu de Canada/Eastern, placez le nom de votre fuseau horaire, celui que le script tzselect vous a donné.
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, vous avez besoin de les ajouter 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 nous ajoutons 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
Programmes installés : catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump et zic
Bibliothèques installées : ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so et libutil.[a,so]
catchsegv est utilisé pour créer une trace de la pile lorsqu'un programme s'arrête avec une erreur de segmentation.
gencat génère des catalogues de messages.
getconf affiche les valeurs de configuration du système pour les variables spécifiques du système de fichiers.
getent récupère les entrées à partir d'une base de données administrative.
glibcbug crée un rapport de bogue et l'envoie à l'adresse électronique bug.
iconv réalise une conversion de l'ensemble des caractères.
iconvconfig crée un fichier de configuration pour le module iconv fastloading.
ldconfig configure les liens du chargeur dynamique.
ldd indique les bibliothèques partagées requises pour chaque programme ou bibliothèque partagée.
lddlibc4 assiste ldd avec les fichiers objets.
locale est un programme Perl indiquant au compilateur d'activer ou de désactiver l'utilisation des locales POSIX pour les opérations internes.
localedef compile les spécifications de locale.
nscd est un démon pour les services de noms fournissant un cache pour les requêtes les plus communes.
nscd_nischeck vérifie si le mode sécurisé est nécessaire pour les recherches NIS+.
pcprofiledump affiche des informations générées par un profilage du PC.
pt_chown est un programme d'aide de grantpt pour initialiser les droits des propriétaires, groupes et autres d'un pseudo-terminal esclave.
rpcgen génère du code C pour implémenter le protocole RPC.
rpcinfo fait un appel RPC à un serveur RPC.
sln est utilisé pour créer des liens symboliques. Le programme est lié statiquement, donc il est utile pour créer des liens symboliques vers des bibliothèques dynamiques si le système de liens dynamiques n'est pas fonctionnel.
sprof lit et affiche les données de profilage des objets partagés.
tzselect demande à l'utilisateur l'emplacement géographique du système et donne la description du fuseau horaire correspondante.
xtrace trace l'exécution d'un programme en affichant la fonction en cours d'exécution.
zdump est un afficheur de zone horaire.
zic est le compilateur du fuseau horaire.
ld.so est le programme d'aide des bibliothèques partagées exécutables.
libBrokenLocale est utilisé par des programmes comme Mozilla pour résoudre les locales cassées.
libSegFault est un gestionnaire de signaux d'erreurs de segmentation. Il essaie de capturer ce type d'erreurs.
libanl est une bibliothèque asynchrone de recherche de noms.
libbsd-compat fournit la portabilité nécessaire pour faire fonctionner certains programmes BSD sous Linux.
libc est la principale bibliothèque C -- une collection des fonctions utilisées habituellement.
libcrypt est la bibliothèque de cryptographie.
libdl est la bibliothèque d'interface du chargeur dynamique.
libg est la bibliothèque d'exécution de g++.
libieee est la bibliothèque des nombres flottants IEEE.
libm est la bibliothèque mathématique.
libmcheck contient du code à lancer au démarrage.
libmemusage est utilisé par memusage pour collecter des informations sur l'utilisation mémoire d'un programme.
libnsl est la bibliothèque de services réseau.
libnss* sont les bibliothèques « Name Service Switch », contenant des fonctions de résolution de noms d'hôtes, de noms d'utilisateurs, de noms de groupes, d'alias, de services, de protocoles et ainsi de suite.
libpcprofile contient des fonctions de profilage utilisées pour tracer le temps CPU dépensé sur les lignes de code source.
libpthread est la bibliothèque threads POSIX.
libresolv contient des fonctions de création, d'envoi et d'interprétation de paquets pour les serveurs de noms de domaine Internet.
librpcsvc contient des fonctions apportant différents services RPC.
librt contient des fonctions fournissant la plupart des interfaces spécifiées par l'extension temps réel de POSIX.1b.
libthread_db contient des fonctions utiles pour contruire des débogueurs de programmes multi-threads.
libutil contient du code pour les fonctions "standards" utilisées par de nombreux outils Unix.