2. Choses spéciales à faire

Comme vous vous préparez à remplacer la bibliothèque de base sur laquelle de nombreux programmes reposent, vous pouvez aisément imaginer que divers problèmes peuvent survenir.

Dans mon cas, tout fonctionnait jusqu'au moment où j'ai tapé make install. A la moitié du processus d'installation, j'ai reçu un message d'erreur m'indiquant que la commande rm ne pouvait fonctionner, et j'ai découvert que toutes les commandes comme cp, ls, mv, ln, tar, etc ne fonctionnaient plus ; toutes me répondaient qu'elles ne trouvaient plus les parties de la bibliothèque qui leur étaient nécessaires (NDT : j'ai eu aussi ce petit soucis, toutefois dans un cas plus trivial ;-)).

Mais il existe une solution. Vous pouvez, lors de la compilation d'un programme, forcer l'inclusion des fonctions de la bibliothèque à l'intérieur du programme, de telle sorte qu'il n'ait plus à les rechercher à l'intérieur.

Pour cette raison, dans ce chapitre, nous allons compiler des versions statiques de tous les utilitaires dont nous avons besoin.

  1. Chargez la toute dernière version depuis ftp.gnu.org/gnu/binutils ; à la date de rédaction de ce guide, le numéro de la version la plus récente était 2.14.

  2. Ouvrez le paquetage :

    tar xIvf
    binutils-2.14.tar.bz2

    .

  3. Changez de répertoire :

    cd binutils-2.14

    .

  4. Configurez les makefiles :

    ./configure

    .

  5. Compilez :

    make

    .

  6. Installez avec :

    make install

    .

Si quelque chose se déroule mal durant la compilation de binutils, en rapport avec gettext (indiqué par des erreurs comme : « référence à lib_intl non déclarée » ou quelque chose d'approchant) installez la nouvelle version, disponible à ftp.gnu.org/gnu/gettext.

Si cela ne suffit pas, essayez de désactiver le support du langage natif en utilisant :

./configure
--no-nls

.

Il n'est pas nécessaire de compiler une version statique de binutils, bien que cela ne cause aucun problème, mais j'ai rencontré de nombreux systèmes fonctionnant avec de très vieilles versions et eu des erreurs presque à chaque fois aussi je pense qu'il est utile de le mentionner ici.

La commande make règle l'ensemble de la compilation des sources, appelant gcc et tous les autres programmes nécessaire à la compilation. Comme il est possible que vous soyez contraint à compiler quelque chose si une erreur survient avec votre nouvelle glibc, c'est une bonne idée que make soit compilé de manière statique ; dans le cas contraire, il pourrait ne pas fonctionner si une erreur survient.

  1. Téléchargez les sources depuis : ftp.gnu.org/gnu/make/ ; à la date de rédaction, la version est 3.80.

  2. Déballez les sources :

    tar xIvf make-3.80.tar.bz2

    .

  3. Changez de répertoire :

    cd make-3.80

    .

  4. Prenez garde à compiler de manière statique :

    export CFLAGS="-static -O2 -g"

    .

  5. Lancez le script de configuration :

    ./configure
  6. Compilez :

    make

    .

  7. Installez les binaires:

    make install

    .

  8. Vérifiez :

    make -v

    Vous devez maintenant voir la dernière version installée. Sinon, recherchez les anciens fichiers binaires et remplacez les par des liens symboliques vers les nouvelles versions.

Félicitations ! Vous avez compilé un autre programme statique.

core-utils contient des commandes comme : cp, rm, ln, mv, etc. En cas d'erreur durant l'installation, c'est une nécessité absolue pour pouvoir espérer remonter le système, aussi des binaires statiques sont vraiment nécessaires ici.

  1. De nouveau, téléchargez les sources depuis ftp.gnu.org/gnu/coreutils/ ; au moment de la rédaction, la version courante est la 5.0.

  2. Dépaquetez les sources :

    tar xIvf
    coreutils-5.0.tar.bz2
  3. Changez de répertoire :

    cd
    coreutils-5.0
  4. Prenez garde au fait que les binaires doivent être liés statiquement :

    export CFLAGS="-static -O2 -g"
  5. Configurez le paquetage :

    ./configure
  6. Compilez les binaires :

    make
  7. Et installez les :

    make
    install
  8. Vérifiez que la bonne version de core-utils est utilisée :

    cp --version

    . Vous devez obtenir un numéro de version correct, dans le cas contraire, supprimez les anciens binaires et remplacez les par des liens symboliques vers les nouveaux.

Maintenant que les binaires de ces outils de base sont des versions statiques, vous êtes sûr qu'il fonctionneront en cas de besoin.

Vous avez déjà utilisé GNU tar pour dépaqueter les programmes compilés et installés. Mais vous avez besoin de compiler un programme requis par glibc après un crash et, dans cette situation (expérience vécue) il est particulièrement utile de disposer d'un tar opérationnel pour dépaqueter les programmes manquants. Il nous faut également, avec tar, prendre garde à la compression bz2, qui n'est pas incluse dans la distribution normale des sources de tar.

  1. Récupérez les sources de GNU tar sur ftp.gnu.org/gnu/tar ; à la date de rédaction, la dernière version est la 1.13.

  2. Comme de multiples archives tar sont compressées avec bzip2, nous préférerons disposer du support intégré, plutôt que de devoir travailler avec des pipes ; il nous faut donc récupérer le patch à ftp://infogroep.be/pub/linux/lfs/lfs-packages/4.1/tar-1.13.patch.

  3. Dépaquetez les sources :

    tar xzvf tar-1.13.tar.gz
  4. Copiez le patch dans le répertoire contenant les sources de tar

    cp tar-1.13.patch tar-1.13/
  5. Appliquez le :

    patch -Np1 -i tar-1.13.patch
  6. Posez les options du compilateur pour obtenir un binaire statique :

    export CFLAGS="-static -O2 -g"
  7. Nous sommes maintenant prêt pour la configuration :

    ./configure
  8. La compilation :

    make
  9. Et enfin l'installation :

    make
    install
  10. Faites une dernière vérification pour vous assurer que la nouvelle version sera utilisée à partir de maintenant :

    tar
    --version

    . La version que vous venez d'installer doit apparaître, sinon, remplacez les anciens binaires par des liens symboliques vers les nouveaux.

Si vous avez des problèmes dans l'exécution de la commande make, essayez de désactiver le support du langage natif (nls : native-language support). Pour ce faire, utilisez la commande configure avec l'option

--disable-nls

Note : dans la nouvelle version de tar, vous devez utiliser l'option -j pour décompresser les fichiers .bzip2, aussi plutôt que

tar xIvf
anyfile.tar.bz2

vous devez maintenant utiliser

tar
xjvf anyfile.tar.bz2

. J'ignore les raisons de ce changement, mais ça fonctionne bien.

Je préfère utiliser le shell bash ; si vous en utilisez un différent, assurez-vous d'avoir installé une version statique de celui-ci avant d'installer glibc.

  1. Récupérez bash à : ftp.gnu.org/gnu/bash/. Téléchargez la version la plus récente que vous trouverez ; à la date de rédaction, celle-ci est la 2.05b.

  2. Dépaquetez les sources :

    tar xzvf
    bash-2.05b.tar.gz

    créera un répertoire nommé bash-2.05b contenant toutes les sources.

  3. Déplacez-vous dans ce répertoire :

    cd
    bash-2.05a
  4. Configurez pour obtenir une version statique :

    export CFLAGS="-static -O2 -g"
  5. Configurez le makefile :

    ./configure

    . Si vous désirez que votre bash possède certaine fonctionnalités spéciales, reportez-vous à la commande

    ./configure --help

    pour la liste des options.

  6. Compilez le tout :

    make
  7. Installez les binaires :

    make
    install

    . Ils seront installés dans le répertoire /usr/local/bin/.

  8. Vérifiez qu'une autre version ne reste pas tapie quelque part (comme dans ma Suse : /bin/), en copiant le fichier :

    cp /usr/local/bin/bash
    /bin/

    . Nous n'utilisons pas ici de lien symbolique car, tant lors du démarrage de la machine qu'au lancement de bash, des problèmes peuvent survenir avec les liens symboliques.

Vous avez maintenant installé une version statique de bash. C'est pour cette raison que le binaire est beaucoup plus volumineux qu'à l'accoutumée, mais il fonctionnera quelles que soient les circonstances.

Si vous préférez utiliser un autre shell, vous êtes libre de le faire, mais assurez-vous qu'il s'agit d'une version liée statiquement. N'hésitez pas à me communiquer la méthode pour construire une version statique du shell de votre choix ; il y a de grandes chances qu'elle soit reprise dans la prochaine révision de ce document.