LinuxÉdu-Québec

Accueil À propos de nous Contact Plan du site
Accueil du site > Applications > Administration système > GNU Stow, cerbère de /usr/local/

Le jeudi 7 avril 2005, par Patrice Levesque

GNU Stow, cerbère de /usr/local/

L’utilisation d’un système de paquetage (rpm, deb, tgz, ...) constitue la méthode la plus éprouvée, simple et sûre de gérer l’installation et la désinstallation des applications d’un système GNU/Linux. Parfois, pour des besoins précis, on peut recourir à la compilation/installation manuelle à partir de sources. Cette façon de procéder comporte beaucoup de désavantages par rapport à l’utilisation du système de paquetages. L’un d’eux : le fouillis qui se construit dans /usr/local/.

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é.

Notes

[1] Il existe d’autres variantes, telles que XStow, stowES qui fonctionnent sous le même principe et qui se valent pour les besoins de cet article. Magasinez.

[2] Sinon, vérifiez les paramètres avec `stow —help`

[3] Petit rappel : il est toujours préférable de compiler une application en tant qu’utilisateur normal. C’est pourquoi on doit faire la commande su pour installer (make install) l’application compilée.


Applications | LinuxÉdu-Québec | Revue de presse | Projets | Événements - colloques | Réflexion et opinion | Système d’exploitation