Glibc-2.3.4-20040701

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 et Texinfo

Installation de Glibc

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.

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-20040701/configure --prefix=/usr \
    --disable-profile --enable-add-ons=nptl --with-tls \
    --with-__thread --enable-kernel=2.6.0 --without-cvs \
    --libexecdir=/usr/lib/glibc \
    --with-headers=/tools/glibc-kernheaders

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
[Important]

Important

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.

  • Le test atime échoue parfois lorsque la partition LFS est montée avec l'option noatime.

  • Le test shm peut échouer quand le système hôte utilise le système de fichiers devfs mais n'a pas monté le système de fichiers tmpfs sur /dev/shm. Ceci survient à cause d'un manque de support de tmpfs dans le noyau.

  • 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 connait) 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

Some locales installed by the make localedata/install-locales command above are not properly supported by some applications that are in the LFS and BLFS books. Because of the various problems that arise due to application programmers making assumptions that break in such locales, LFS should not be used in locales that utilize multibyte character sets (including UTF-8) or right-to-left writing order. Numerous unofficial and unstable patches are required to fix these problems, and it has been decided by the LFS developers not to support such complex locales. This applies to the ja_JP and fa_IR locales as well—they have been installed only for GCC and Gettext tests to pass, and the watch program (part of the Procps package) does not work properly in them. Various attempts to circumvent these restrictions are documented in internationalization-related hints.

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-20040701/linuxthreads/man

Installez ces pages :

make -C ../glibc-2.3.4-20040701/linuxthreads/man
install

Configurer Glibc

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 avec le 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.

Configurer le chargeur dynamique

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

Contenu de Glibc

Programmes installés: catchsegv, gencat, getconf, getent, 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], 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]

Descriptions courtes

catchsegv

Peut être 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

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 des fichiers objets

locale

Indique au compilateur d'activer ou de désactiver l'utilisation des locales POSIX pour les opérations internes

localedef

Compile les spécifications des locales

mtrace

Lit et interprète un fichier de trace mémoire et affiche un résumé dans un format lisible par un humain

nscd

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

un programme d'aide pour que grantpt initialise 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 (Remote Procecure Call)

rpcinfo

Fait un appel RPC à un serveur RPC

sln

Un programme ln lié statiquement

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

Afficheur de fuseau horaire

zic

Compilateur de fuseau horaire

ld.so

Le programme d'aide des bibliothèques partagées exécutables

libBrokenLocale

Utilisé par des programmes comme Mozilla pour résoudre les locales cassées

libSegFault

Un gestionnaire de signaux d'erreurs de segmentation

libanl

Une bibliothèque asynchrone de recherche de noms

libbsd-compat

Fournit la portabilité nécessaire pour faire fonctionner certains programmes BSD sous Linux

libc

La principale bibliothèque C

libcrypt

La bibliothèque de cryptographie

libdl

La bibliothèque de l'interface du chargeur dynamique

libg

Une bibliothèque d'exécution pour g++

libieee

La bibliothèque des nombres flottants IEEE (Institute of Electrical and Electronic Engineers)

libm

La bibliothèque mathématique

libmcheck

Contient du code à lancer au démarrage

libmemusage

Utilisé par memusage pour collecter des informations sur l'utilisation mémoire d'un programme

libnsl

La bibliothèque de services réseau

libnss

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

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 « standard » utilisées par de nombreux outils Unix