7. Comment recompiler ses applications

Si vous avez décidé malgré tout de recompiler une application ou une bibliothèque, voici quelques méthodes pour faire cela simplement et proprement. Cela ne marche pas à tous les coups, mais souvent quand même.

7.1. La compilation

  • Première chose à faire: cherchez un fichier README ou INSTALL ou équivalent. Il vous fournira les instructions pour recompiler et installer votre application, avec des détails spécifiques.

  • S'il y a un script configure, exécutez ./configure --help et lisez les options que vous pouvez ajouter, en fonction de ce que vous voulez faire. Puis exécutez ./configure --prefix=/usr/local <d'autres options ici>. Mettez autre chose que /usr/local si vous préférez compiler votre application pour l'installer ailleurs.

  • S'il n'y a pas de script configure, et qu'on vous propose de faire tout de suite make, cherchez un fichier Makefile, et lisez-le à la recherche d'un répertoire d'installation, souvent contenu dans la variable prefix. Modifiez le fichier Makefile en fonction de vos besoins.

  • Dans la plupart des cas, lancez ensuite make. Ceci est l'étape longue, et à moins de vouloir aller boire un café, ce qu'on conseille souvent lors de cette étape, je vous suggère de passer un moment à la culture des carottes ou à l'étude des galaxies lointaines. Si tout se passe sans problème, ce qui arrive souvent, mais pas 100% du temps, votre application est compilée. Il suffit de l'installer. S'il y a le moindre problème, vous allez devoir fouiller partout à la recherche du moindre renseignement pouvant vous aider à améliorer la situation. La plupart du temps, le problème est un prérequis manquant, tel une bibliothèque que vous n'avez pas installée, ou dont vous n'avez pas installé les fichiers de développement (paquets souvent nommés *-devel-* ou *-dev-*). Installez dans ce cas ce qu'il manque, et repartez à zéro en supprimant le répertoire des sources et en décompressant à nouveau les sources.

7.2. L'installation

Dans la plupart des cas, un simple make install suffit à installer l'application. Cependant, je voudrais attirer votre attention sur un logiciel sympathique malgré ses nombreux défauts, GNU Stow. En effet, s'il est assez conseillé d'installer vos logiciels dans /usr/local, ce qui les mélange entre eux, il est aussi de bon goût de les installer séparément, chacun dans son répertoire. Mais ces deux méthodes sont incompatibles. Pour les rendre compatibles, il faudrait installer vos applications dans des répertoires différents, puis créer des liens symboliques des fichiers réellement installés de votre application qui pointent sur les fichiers qui auraient dus être installés si vous aviez installé votre application dans /usr/local. Par exemple, si vous voulez installer l'éditeur nedit, il se trouve que cet éditeur n'est composé que du seul fichier binaire nedit (les autres fichiers ne sont pas nécessaires au bon fonctionnement de nedit). Installez le fichier binaire nedit dans le répertoire /opt/nedit/nedit-5.2/bin. Et créez un lien pointant vers /usr/local/bin/nedit: ln -s /opt/nedit/5.2/bin/nedit /usr/local/bin/nedit. Dans le cas de nedit, cela est simple. Dans d'autres cas, quand il y a trop de fichiers, GNU Stow vient à la rescousse. Voici simplement comment vous en servir, par exemple pour l'application machinchose version 1.2.3:

LINK /usr/local/share/locale/fr to ../../../../opt/machinchose/machinchose-1.2.3/share/locale/fr
LINK /usr/local/share/locale/fr/LC_MESSAGES to ../../../../../opt/machinchose/machinchose-1.2.3/share/locale/fr/LC_MESSAGES
  • Au lieu de faire make install, faites make install prefix=/opt/machinchose/machinchose-1.2.3. Notez que vous devriez quand même avoir fait ./configure --prefix=/usr/local dans ce cas, pour que le logiciel se croie malgré tout installé dans /usr/local.

  • Allez dans le répertoire /opt/machinchose. Vous exécutez stow -t /usr/local -n -v machinchose-1.2.3. Cela vous affichera ce que stow va effectuer. Avec l'option -n, rien n'est fait.

  • Un défaut de GNU Stow est de ne pas créer les répertoires nécessaires, mais de créer des liens entre répertoires. Avant de passer à l'action, je vous conseille donc de devenir root et de créer les répertoires qu'il faut, en fonction de ce que la commande précédente stow vous aura affiché. Refaites cette commande, toujours avec l'option -n, jusqu'à ce qu'elle vous indique qu'elle ne fera que des liens entre les fichiers, ou alors, que s'il y a des liens entre des répertoires, que ces répertoires soient spécifiques à l'application. Voici un extrait de la commande précédente:

  • Ceci est à éviter car d'autres applications sont susceptibles d'utiliser le répertoire /usr/local/share/locale/fr. Veuillez créer un répertoire /usr/local/share/locale/fr et recommencer. Cela donne:

  • Cela est encore à éviter car le répertoire fr, commme le répertoire LC_MESSAGES, ne sont pas spécifiques à notre application. Vous vous arrêtez de créer des répertoires lorsque la commande stow indique ne faire plus que des liens entre fichiers ou entre des répertoires spécifiques à votre application.

  • Lorsque l'arborescence est convenable, et en tant que root, vous exécutez stow -t /usr/local -v machinchose-1.2.3, sans le -n, afin que stow fasse effectivement les liens.

L'installation d'un logiciel tel que machinchose-1.2.3 dans l'arborescence /opt/machinchose/machinchose-1.2.3 a l'intérêt que toutes les versions de machinchose seront installées dans /opt/machinchose, et chacune dans un répertoire différent. Et si vous voulez supprimer toutes les versions de machinchose, il suffit de supprimer /opt/machinchose.

7.3. La désinstallation

Si vous voulez supprimer un logiciel que vous avez installé après l'avoir recompilé et installé vous-même, cela est risqué. En effet, vous pouvez briser des dépendances comme je l'ai écrit plus haut. Vous pouvez aussi, si vous avez installé votre logiciel dans /usr/local, supprimer un fichier de trop en vous trompant. Inversement, vous pouvez oublier de supprimer des fichiers, ce qui vous fera perdre de la place sur le disque. Installer une nouvelle version par dessus l'ancienne version du logiciel ne fera qu'écraser qu'une partie des fichiers de l'ancienne version. Certains fichiers obsolètes resteront encore là alors qu'on en n'a plus besoin. Il existe une méthode très peu utilisée et contraignante, mais souvent efficace: vous devez conserver le répertoire des sources tel qu'il était lors de la compilation du logiciel - cela vous oblige à réserver de la place disque pour cela alors que vous en aviez peut-être besoin pour autre chose? - et là où vous aviez lancé make install, essayez make uninstall. Au vu des contraintes de cettes méthodes, elle est quasiment jamais employée.

Si vous avez suivi ma méthode avec GNU Stow ci-dessus, on peut s'en sortir plus facilement et plus proprement. Allez dans le répertoire /opt/machinchose, et exécutez stow -t /usr/local -d -n -v machinchose-1.2.3. Cela devrait vous afficher ce qui va se passer lorsque vous aurez supprimé l'option -n. Si cela vous convient, lancez la même commande en tant que root, et sans l'option -n pour supprimer les liens symboliques, nettoyant ainsi proprement le répertoire /usr/local. Ensuite, il ne vous reste qu'à supprimer le répertoire machinchose-1.2.3 avec le très efficace rm -rf machinchose-1.2.3.

création est mise à disposition sous un contrat Creative Commons