Guide d'installation et de configuration de Linux | ||
---|---|---|
Précédent | Annexe B. Compilation et mise à jour des principaux composants du système | Suivant |
La bibliothèque C constitue l'ensemble des bibliothèques de fonctions que tous les programmes écrits en C utilisent pour accéder aux système. Il s'agit donc d'un composant essentiel dans le système (qui, rappelons-le, est lui-même écrit en C). Recompiler la bibliothèque C est donc une opération très sensible. Vous pouvez donc casser complètement votre système en effectuant cette mise à jour. De plus, certaines distributions fournissent des versions personnalisées du noyau, de GCC et de la bibliothèque C et recompiler les versions officielles de ces composants est certainement le meilleur moyen pour ne plus pouvoir lancer le moindre programme avec ces distributions. Vous êtes prévenus.
La compilation de la bibliothèque C est une opération fastidieuse à plus d'un titre. Elle nécessite souvent de recompiler certains outils, et elle est longue et consomme énormément de ressources. Enfin, il faut parfois recompiler certaines parties du système après son installation, afin de résoudre des conflits de versions dus à la migration. La dernière version de la bibliothèque C GNU est la 2.3.6, elle peut être récupérée sur le site projet du GNU.
Les prérequis sont les suivants :
les sources du noyau Linux 2.6 doivent être disponibles dans le répertoire /usr/src/linux/ ;
le compilateur GCC (version 3.4.6 ou plus) doit avoir été compilé et installé ;
les outils de manipulation des fichiers binaires (binutils 2.17 ou plus) doivent avoir été compilés et installés ;
le programme make utilisé doit être de version récente (3.80 ou plus).
Le processus de compilation est ensuite assez classique. Il suffit de :
extraire les fichiers sources de leur archive dans un répertoire source srcdir ;
créer un répertoire pour les objets en dehors du répertoire des sources de la bibliothèque et s'y placer ;
taper :
CFLAGS=-O2 ../srcdir/configure --prefix=/usr --enable-shared \ --enable-add-ons=libidn,nptl --with-tls
Les options de la commande de configuration permettent l'emploi des bibliothèques dynamiques et la compilation des modules additionnels pour le support du multithreading de nouvelle génération. Le répertoire d'installation sera /usr/lib/ pour les bibliothèques, et /usr/include/ pour les fichiers d'en-têtes.
La compilation peut ensuite être lancée avec la simple commande suivante :
make
Une fois la compilation effectuée, vous pouvez tester la nouvelle bibliothèque avant de l'installer. Pour cela, tapez la commande suivante :
make checkIl est vivement recommandé d'effectuer ce test. Si la moindre erreur apparaît pendant l'exécution du test, n'installez surtout pas la bibliothèque, vous détruiriez sans aucun doute votre système.
Note : En général, un échec de ce test provient souvent d'une mauvaise génération de la bibliothèque due à l'utilisation de programmes trop vieux sur votre système. Il est donc parfois nécessaire de mettre à jour d'autres programmes avant d'effectuer la mise à jour de la bibliothèque C. Par exemple, votre version de make peut être obsolète, ainsi que celle de GCC ou encore celle des outils GNU binutils (assembleur, éditeur de liens, archiveur, etc.). Les sources de tous ces programmes peuvent être trouvées sur le site du GNU.
La compilation de la bibliothèque C, ainsi que celle des autres composants « lourds » du système comme le noyau, GCC, XWindow, Gnome ou KDE, peuvent stresser votre système d'une manière qu'il n'a jamais connu. Les calculs intensifs peuvent durer plusieurs heures, ce qui fait chauffer les composants de votre ordinateur. Il n'est pas rare de voire certains de ces composants défaillir dans ces circonstances, alors qu'ils se sont toujours comportés apparemment normalement jusqu'à présent. En particulier, vous pouvez avoir des problèmes de surchauffe du processeur et des corruptions de données dans les barettes de mémoire. Les symptômes sont en général l'apparition d'une erreur de type « SIG 11 » (erreur de segmentation) sur des programmes très fiables, comme gcc ou le shell. Dans ce cas, il faut identifier et remplacer les composants défecteux (ce n'est pas une blague, ce problème m'est personnellement arrivé avec trois barettes mémoires et un processeur en moins d'un an, et il est arrivé à bien d'autres personnes dans le monde). Il est facile de penser que, avec la baisse du prix des barettes mémoires que l'on a vécu ces derniers temps, les fabricant sont tentés d'être un peu plus laxistes au niveau du contrôle qualité des composants en fin de chaîne. Le phénomène risque donc de devenir courant, et il peut parfaitement vous arriver. Bien entendu, il va de soi qu'il ne faut pas overclocker sa machine lorsqu'on se lance dans des opérations telles que celles-ci. L'overclocking est de toutes manières une technique douteuse dont le but n'est que d'arriver plus vite à avoir des problèmes curieux, surtout sous Linux. Vous êtes avertis.
L'installation se fera enfin avec les deux commande suivantes :
make install
Note : ATTENTION ! La technique utilisée par le fichier Makefile pour l'installation de la bibliothèque C ne permet pas de remplacer la bibliothèque C du système en cours d'exécution de manière fiable. En pratique, cette commande ne fonctionnera que pour une mise à jour ou une installation de bibliothèque C compatible avec celle en cours d'exécution (c'est-à-dire compilée avec les mêmes options). Le remplacement de la bibliothèque en cours d'exécution par une bibliothèque compilée de même version mais incompatible échouera et laissera le système dans un état pitoyable. Il est recommandé, dans ce cas, de générer un paquetage pour votre distribution et d'utiliser les scripts d'installation fournis avec elle.
La commande suivante doit être ensuite utilisée pour installer l'ensemble des locales prises en charge par la bibliothèque C :
make localedata/install-localesLa compilation des paramètres internationaux pour la France se fera alors avec la commande suivante :
Cette commande permet de compiler les fichiers des paramètres d'affichage des monnaies et des dates, ainsi que le jeu de caractères utilisé pour comparer et trier les chaînes de caractères. Dans l'exemple donné ci-dessus, la langue choisie est le français (« fr ») tel qu'il est parlé en France (« FR »), avec le jeu de caractères ISO-8859-15. Les fichiers compilés sont placés dans le répertoire /usr/lib/locale/, à raison d'un sous-répertoire pour chaque locale configurée. Si ce répertoire n'existe pas sur votre machine, vous devrez le créer manuellement, car la commande localedef ne le fait pas automatiquement.
Une fois la bibliothèque C installée, il est nécessaire de mettre à jour les fichiers d'en-tête du noyau utilisés pour la compilation des autres programmes. En effet, les fichiers d'en-tête du noyau utilisés pour la compilation de la bibliothèque C ne sont peut-être pas les mêmes que ceux de l'ancienne bibliothèque, et il est nécessaire de les remplacer pour que la compilation des autres programmes avec la nouvelle bibliothèque se fasse de manière cohérente. Ces fichiers d'en-têtes sont normalement placés dans les répertoires /usr/src/linux/include/linux/, /usr/src/linux/include/asm/ et /usr/src/linux/include/asm-generic/. Ces deux derniers sont des liens symboliques vers les fichiers d'en-tête de la plate-forme matérielle cible du noyau (généralement, /usr/src/linux/include/asm-i386/ et /usr/src/linux/include/asm-generic/). Ils doivent donc être recopiés dans le répertoire des en-têtes du système, à savoir le répertoire /usr/include/. Cela pourra être réalisé avec les commandes suivantes :
cd /usr/include rm -rf linux asm* ( cd /usr/src/linux/include ; tar cf - linux/* asm/* asm-generic/* ; ) | tar xvf -
Note : Vous aurez peut-être à recompiler GCC après installation de la nouvelle bibliothèque C, ainsi qu'un certain nombre d'autres programmes, car la compatibilité binaire d'une version à l'autre de la bibliothèque C est très relative. Si la version que vous utilisez est un simple correctif de bug cependant, la compatibilité sera sans doute totale, mais il faut savoir qu'à chaque version majeure un certain nombre de fonctionnalités sont modifiées et peuvent nécessiter des mises à jour en cascade.
À partir de la version 2.3 de la bibliothèque C et de la version 2.13 des binutils, une amélioration dans le chargement des bibliothèques dynamiques a été apportée. Cette amélioration permet de « précharger » ces bibliothèques et donc de gagner du temps au démarrage des programmes. Pour pouvoir bénéficier de ces améliorations, il faut installer un outil complémentaire nommé « prelink ». Les sources de cet outil pourront être trouvés sur le compte de son auteur, à l'adresse ftp://people.redhat.com/jakub/prelink/. Sa compilation requiert que la bibliothèque libelf, permettant de manipuler les fichiers binaires, soit installée. Les sources de cette bibliothèque peut également être récupérés sur Internet, à l'adresse http://www.stud.uni-hannover.de/~michael/software/libelf-0.8.2.tar.gz. L'installation de cette bibliothèque et de prelink se fait simplement à l'aide des commandes suivantes :
./configure --prefix=/usr make make install
Note : Pour pouvoir utiliser correctement prelink, vous devez créer un fichier /etc/prelink.conf contenant la liste de tous les répertoires des bibliothèques de votre système, à raison d'une ligne par répertoire. Le contenu de ce fichier est donc typiquement le suivant :
De plus, sachez que le préchargement des bibliothèques ne peut fonctionner que si toutes les bibliothèques dont dépend un programme, directement ou indirectement (c'est-à-dire par l'intermédiaire d'éventuelles autres bibliothèques) ont été générées avec les binutils 2.13 ou plus. Cela implique qu'un certain nombre de composants systèmes (pour ne pas dire tous) devront être recompilés au préalable. Une mise à jour de votre distribution semble donc être la solution la plus simple à ce stade.
Précédent | Sommaire | Suivant |
Compilation des binutils 2.17.0 | Niveau supérieur | Compilation de OpenSSL |