Le problème
La grande majorité des applications distribuées sous forme de code source emploient autoconf pour automatiser la compilation et l’installation ; typiquement, lors de l’installation à partir des sources, on procède ainsi :
tar xvfj application-version.tar.bz2
cd application-version
./configure
make
su -c "make install"
L’application est alors installée dans /usr/local/ ; les binaires dans /usr/local/bin/, les pages de manuel dans /usr/local/share/man, ainsi de suite.
Si dans quelques mois, on voulait désinstaller cette application, comment procèderait-on ? Peut-être aurions-nous conservé les sources originales et pourrions lancer un `make uninstall`. Cependant, ce ne sont pas toutes les applications qui fournissent un tel mécanisme.
Après la compilation/installation de plusieurs sources, nous nous retrouvons donc avec un répertoire /usr/local/bin/ rempli de fichiers desquels nous ne connaissons pas l’origine et difficiles à gérer.
GNU Stow à la rescousse
GNU Stow est fourni par la plupart des distributions GNU/Linux (par exemple, pour Mandriva-autrefois-appelé-Mandrake, vous installerez Stow directement avec la commande "urpmi stow"). Vous pouvez aussi le trouver en code source sur le site de gnu.org [1]
L’idée derrière GNU Stow brille de simplicité : au lieu d’installer directement un logiciel compilé dans /usr/local/, on l’installe dans un répertoire unique pour l’application, et ensuite GNU Stow crée des liens symboliques vers /usr/local/. Ainsi pour chaque logiciel existe un et un seul répertoire contenant tous ses fichiers.
Utilisation de GNU Stow
En tout premier lieu, un répertoire devra être créé pour héberger les logiciels à installer. Dans cet article, on utilisera /usr/local/stow/. N’importe quel répertoire pourrait être choisi, - avec le nom que vous voulez -, mais pour des raisons pratiques, il vaut mieux qu’il se trouve directement sous /usr/local/ [2].
Une fois ce répertoire créé, l’installation d’une application à partir du code source ressemble à :
tar xvfj application-version.tar.bz2
cd application-version
./configure --prefix=/usr/local/stow/application-version/
make
su -c "make install" [3]
Vous remarquerez l’ajout de l’option —prefix à la commande ./configure qui indique à celui-ci de ne pas installer les fichiers dans /usr/local/ mais bien dans /usr/local/stow/application-version/. Cette option fonctionne avec virtuellement tous les programmes à compiler. Suffixez le nom de l’application avec son numéro de version, vous vous féliciterez plus tard. Pour donner un exemple, si vous installiez la version 2.01 du logiciel foobar, cela donnerait --prefix=/usr/local/stow/foobar-2.01/
Une fois ces étapes franchies, le logiciel a donc été installé dans /usr/local/stow/application-version/. Pour le lier à /usr/local/ (et qu’ainsi on puisse le retrouver dans son $PATH), il suffit de taper :
cd /usr/local/stow/
su -c "stow application-version"
# Reconstruire la base de données des librairies, IMPORTANT!
su -c "ldconfig"
Vous trouverez maintenant sous /usr/local/ des liens symboliques pointant vers le répertoire original d’installation.
ls -l /usr/local/bin/application
/usr/local/bin/application -> ../stow/application-version/bin/application
Désinstallation d’une application
On veut maintenant désinstaller l’application ? rien de plus simple :
cd /usr/local/stow/
# stow -D n'efface PAS l'application, il ne retire que les liens symboliques
su -c "stow -D application-version"
# véritable effacement du disque de l'application
su -c "rm -rf application-version"
voilà !
Autres bonis
GNU Stow vérifie avant de créer des liens symboliques qu’aucun fichier ne sera écrasé. Aucun danger de briser quoi que ce soit par inadvertance.
Avec la méthode GNU Stow, facile de savoir quelle version d’une application compilée est installée : suffit de regarder le nom du répertoire (vous avez bien mis le numéro de version dans le nom du répertoire comme suggéré, n’est-ce pas ?).
À quel logiciel appartient /usr/local/bin/xyz ? regardez vers où pointe ce lien symbolique, aisé et intuitif.
Facile aussi de tester une version parallèle d’un logiciel. Supposons que la version 1 est installée déjà via GNU Stow et que vous voulez tester la version 2. Vous compilez/installez la version 2, et avant de faire `stow`, vous faites :
cd /usr/local/stow/
su -c "stow -D application-version1"
su -c "stow application-version2"
su -c "ldconfig"
La version 2 ne fonctionne pas bien ? vite ! revenons à la version 1 !
cd /usr/local/stow/
su -c "stow -D application-version2"
su -c "stow application-version1"
su -c "ldconfig"
Limites
GNU Stow fonctionne d’après mon expérience avec 90% des logiciels avec la méthode ci-haut. Les sources n’utilisant pas autoconf demandent un peu plus d’effort pour spécifier le répertoire d’installation - directement dans le Makefile bien souvent.
Nonobstant ces problèmes non-fréquents, les avantages surpassent largement les désavantages et GNU Stow deviendra rapidement votre allié.


