| Linux From Scratch: Version 20020806 | ||
|---|---|---|
| Prev | Chapter 6. Installation des logiciels de base du système | Next |
Estimation du temps de construction: 46 minutes Estimation de l'espace disque requis: 350 Mo |
Ce package nécessite que son patch lui soit appliqué vant de pouvoir l'installer. Soyez sûr qu'il a été déballé avant de lancer les commandes d'installation.
Avant d'installer glibc, vous devez vous positionner dans le répertoire glibc-2.2.5 et y déballer glibc-linuxthreads, et non pas dans /usr/src comme vous le feriez normalement.
Ce package est connu pour avoir un mauvais fonctionnement si vous avez changé ses paramètres d'optimisation par défaut (incluant les options -march et mcpu). Glibc se comporte mieux sans. Donc, si vous avez défini des variables d'environnement qui écrasent les optimisations par défaut, comme CFLAGS et CXXFLAGS, nous vous recommendons de les annuler ou de les modifier lors de la construction de Glibc. Vous avez été prévenu.
De même, ne donnez pas l'option --enable-kernel au script de configuration. C'est connu pour générer des segmentation faults lorsque des packages comme fileutils, make et tar sont liés avec lui.
Généralement, compiler Glibc de n'importe quel autre façon que ce que suggère ce livre, impose un risque très important sur votre système.
Installez Glibc en lançant les commandes suivantes:
patch -Np1 -i ../glibc-2.2.5.patch && touch /etc/ld.so.conf && mkdir ../glibc-build && cd ../glibc-build && ../glibc-2.2.5/configure --prefix=/usr --disable-profile \ --enable-add-ons --libexecdir=/usr/bin && echo "cross-compiling = no" > configparms && make && make install && make localedata/install-locales && exec /static/bin/bash --login |
Une alternative à l'exécution de make localedata/install-locales est de n'installer que les locales dont vous avez besoin ou que vous voulez. Cela se fait en exécutant la commande localdef. Vous trouverez des informations à ce sujet dans le fichier INSTALL de l'arborescence de glibc-2.2.5. Le programme localedef assume que le répertoire /usr/lib/locale existe, donc vous avez besoin de le créer auparavant.
Durant l'étape de configuration vous allez voir ces avertissements:
configure: warning: *** These auxiliary programs are missing or too old: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions.
Le msgfmt manquant (du package gettext que nous installerons plus tard dans ce chapitre) ne gêne en rien. msgfmt est utilisé pour générer les fichiers de traductions binaires qui sont utilisés pour que votre système parle dans un langage différent. Parce que ces fichiers ont déjà été généré pour vous, nous n'avons pas besoin de msgfmt. Vous en aurez seulement besoin si vous faites des changements dans les fichiers sources (les fichiers *.po situés dans le répertoire po) qui vous imposeraient de recompiler les binaires.
patch -Np1 -i ../glibc-2.2.5.patch: Ce patch convertit toutes les occurences de $(PERL) en /usr/bin/perl dans le fichier malloc/Makefile. Ceci est fait parce que Glibc ne peut pas détecter automatiquement l'emplacement de perl, celui-ci n'ayant pas encore été installé. Ce patch remplace aussi toutes les occurences du mot root par 0 dans le fichier login/Makefile. Ceci est fait parce que Glibc lui-même n'est pas encore installé et donc, on ne peut pas résoudre l'identifiant d'un utilisateur grâce à son nom. Un chown root file échouerait, mais cela fonctionnera en utilisant directement les numéros d'identifiant.
touch /etc/ld.so.conf: Une des étapes finales de l'installation de Glibc lance ldconfig pour mettre à jour le cache duchargeur dynamique. Si ce fichier n'existe pas, l'installation s'interrompera avec une erreur de lecture du fichier, donc nous créons un fichier vide (le fichier vide contiendra les valeurs par défaut pour Glibc en utilisant /lib et /usr/lib, ce qui est suffisant).
--disable-profile: Ceci désactive la construction des bibliothèques avec des informations de performance. Cette commande peut être oubliée si vous souhaitez travailler sur les performances.
--enable-add-ons: Permet l'utilisation des linuxthreads que nous installons avec Glibc.
--libexecdir=/usr/bin: Cela force l'installation du programme pt_chown dans /usr/bin directory.
echo "cross-compiling = no" > configparms: Nous faisons ceci parce que nous créons seulement notre propre système. La cross-compilation est utilisée pour construire un package pour un Apple Power PC sur un système Intel. La raison pour laquelle Glibc pense que nous faisons de la cross-compilation est qu'il ne peut compiler un programme de test pour s'en apercevoir, donc il est par défaut en cross-compilation. Compiler le programme de test échoue car Glibc n'a pas encore été installé.
exec /bin/bash: Cette commande va démarrer un nouveau shell bash qui va remplacer l'actuel. Cela supprime le message "I have no name!" de l'invite de commande qui est dû à l'incapacité de bash à faire correspondre un id utilisateur avec un nom utilisateur (qui est dû au fait que Glibc n'est pas installé).
Dernière vérification effectuée auprès de la version 2.2.5.
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
catchsegv peut être utilisé pour créer une trace de la pile lorsqu'un programme s'interrompt avec une erreur 'segmentation fault'.
gencat génère des catalogues de messages.
getconf affiche les valeurs de configuration du système pour les variables spécifiques aux systèmes de fichiers.
getent récupère des entrées d'une base de données administrative.
glibcbug crée un rapport de bug sur glibc et l'envoie par courrier électronique à l'adresse email pour les bugs.
iconv réalise des conversions de jeux de caractères.
iconvconfig crée un fichier de configuration chargé rapidement pour le module iconv.
ldconfig crée un cache des bibliothèques dynamiques pour l'éditeur de liens dynamiques.
ldd affiche les bibliothèques partagées requis par chaque programme ou bibliothèque partagée spécifié sur la ligne de commande.
lddlibc4 assiste ldd avec les fichiers objets.
locale est un programme Perl indiquant au compilateur d'autoriser (ou non) l'utilisation des variables locales POSIX pour les opérations intégrées.
localedef compile les spécifications pour locale.
mtrace affiche les chemin 'multicast' d'une source à un récepteur (une requête des traces IP).
nscd est un démon procurant un cache pour les requêtes DNS les plus courantes.
nscd_nischeck vérifie si un mode de sécurité est nécessaire pour les recherches NIS+.
pcprofiledump affiche l'information générée par 'PC profiling'.
pt_chown indique l'utilisateur, le groupe et les permissions d'accès au terminal du pseudo terminal esclave correspondant au pseudo terminal maître passé sur le descripteur de fichier 3. C'est le programme d'aide pour la fonction 'grantpt'. Il n'a pas été conçu pour être lancé directement en ligne de commande.
rpcgen génère le code C pour implémenter le protocole RPC.
rpcinfo fait un appel RPC vers un serveur RPC.
sln crée le lien symbolique entre une source et sa destination. C'est lié statiquement, sans nécessiter de lien dynamique. Donc sln est utilé pour créer des liens symboliques avec des bibliothèques dynamiques si, pour quelque raison que ce soit, le système de liens dynamiques n'était pas fonctionnel.
sprof lit et affiche les données d'objets partagés profilés.
tzselect questionne l'utilisateur sur sa position géographique courante et affiche la description de fuseau horaire résultante sur la sortie standard.
xtrace trace l'exécution de programmes en affichant la fonction actuellement exécutée.
zdump est le dumper du fuseau horaire.
zic est le compilateur de fuseau horaire.
ld.so, libBrokenLocale.[a,so], libBrokenLocale_p.a, libSegFault.so, libanl.[a,so], libanl_p.a, libbsd-compat.a, libc.[a,so], libc_nonshared.a, libc_p.a, libcrypt.[a,so], libcrypt_p.a, libdl.[a,so], libdl_p.a, libg.a, libieee.a, libm.[a,so], libm_p.a, libmcheck.a, libmemusage.so, libnsl.a, libnsl_p.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libpthread_p.a, libresolv.[a,so], libresolv_p.a, librpcsvc.a, librpcsvc_p.a, librt.[a,so], librt_p.a, libthread_db.so, libutil.[a,so] et libutil_p.a
ld.so est le programme d'aide pour les exécutables utilisant des librairies partagées.
Utilisé par des logiciels, tels que Mozilla, pour résoudres les locales manquantes.
libSegFault est un gestionnaire pour le signal 'segmentation fault'. Il essaie de capturer ces signaux.
libanl est une bibliothèque de recherche de 'asynchronous name'.
libbsd-compat procure une portabilité nécessaire pour lancer certains programmes sous Linux.
Ces fichiers constituent la principale bibliothèque C. Celle-ci est une collection de fonctions couramment utilisées dans les programmes. Cela évite au développeur d'écrire ses propres fonctions pour toutes sortes de tâches. Les plus communes telles que l'affichage d'une chaîne de caractères à l'écran sont déjà présentes et à disposition du programmeur.
La bibliothèque C (comme presque toutes les bibliothèques) est disponible en deux versions : dynamique et statique. En résumé lorsqu'un programme utilise une bibliothèque C statique, le code de cette bibliothèque est copié dans l'exécutable. Lorsqu'un programme utilise une bibliothèque dynamique, cet exécutable ne contient pas le code de la bibliothèque, mais une routine qui charge la fonction de la bibliothèque au moment où le programme l'utilise. Cela réduit d'une façon significative la taille du programme. La documentation fourni avec la bibliothèque C décrit ce mécanisme plus en détails, il est trop compliqué de l'expliquer ici en une ou deux lignes.
libcrypt est la bibliothèque de cryptographie.
libdl est la bibliothèque d'interface pour le chargeur dynamique de liens.
libg est une bibliothèque de lancement pour g++.
libieee est la bibliothèque des nombres flottants IEEE.
libm est la bibliothèque de mathématiques.
libmcheck contient du code exécuté au démarrage.
libmemusage est utilisé par memusage pour aider à récupérer des informations sur l'utilisation de la mémoire par un programme.
libnsl est la bibliothèques des services réseau.
L'idée principale est de mettre l'implémentation des différents services offerts pour accéder aux bases de données dans des modules séparés. Ceci a un certain nombre d'avantages:
les contributeurs peuvent ajouter de nouveaux services sans les ajouter à la bibliothèque GNU C.
les modules peuvent être mis à jour séparement.
l'image de la bibliothèque C est plus petite.
Code utilisé par le noyau pour surveiller le temps CPU passé dans les fonctions, les lignes de codes sources et les instructions.
La bibliothèques POSIX des threads.
Les fonctions de cette bibliothèque permettent la création, l'envoi et l'interprétation des paquets des serveurs de noms Internet.
Les fonctions de cette bibliothèques apportent différents services RPC.
Les fonctions de cette bibliothèque apportent la plupart des interfaces spécifiées par l'extension temps réel POSIX.1b.
Les fonctions de cette bibliothèque sont utiles pour construire des debuggers pour les programmes multi-tâches.
Contient du code pour les fonctions standards utilisé pour les différents utilitaires Unix.
Dernière vérification effectuée auprès de la version 2.2.5.
Bash: sh
Binutils: ar, as, ld, ranlib, readelf
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mknod, mv, mkdir, rm, touch
Gcc: cc, cc1, collect2, cpp, gcc
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: gawk
Sed: sed
Sh-utils: date, expr, hostname, pwd, uname
Texinfo: install-info, makeinfo
Textutils: cat, cut, sort, tr