Introduction Cet article présente une manière élégante d'installer vos logiciels à partir des sources. Il est souvent pratique d'utiliser directement les packages précompilés pour sa distribution de Linux. Mais l'installation à partir des sources est indispensable si vous souhaitez bénéficier de la toute dernière version d'un logiciel. Dans un premier temps, nous allons rappeler la marche à suivre pour compiler et installer un logiciel à partir des sources. Ensuite, nous détaillerons les problèmes liés à la mise à jour et la désinstallation de tels logiciles. Enfin, nous présenterons la solution qu'offre le logiciel STOW. Installation à partir des sources (façon brutale) Le fichier de sources se présente sous la forme d'une archive compressée .tar.gz. La méthode usuelle pour installer le logiciel est la suivante: 1. Les sources sont distribuées sous formes d'archives compressées (: extension .tar.gz ou .tgz). Avant tout, il est nécessaire de les décompresser. L'exemple suivant effectue la decompression dans le répertoire temporaire /tmp. tar zxvf CHEMIN_VERS/archive.tar.gz -C /tmp 2. La phase de décompression a créé un sous-répertoire qui contient toutes les sources. Faites-en le répertoire courant avec la commande suivante. cd /tmp/archive 3. Une fois dans le répertoire adéquat, il faut vérifier que le fichier ``configure'' existe. C'est un exécutable qui prépare automatiquent les fichiers nécessaires à la compilation. S'il est absent, il vous faudra lire le README ou le INSTALL pour connaître la procédure à suivre pour la compilation. Pour vérifier la présence du fichier: ls ./configure 4. Nous supposerons que configure peut être lancé dans le répertoire courant. Vous allez le lancer avec l'option --prefix pour indiquer le répertoire cible de la compilation. Les fichiers générés seront donc configurés pour fonctionner dans le sous-répertoires de ce prefix ($prefix/bin, $prefix/lib ...). Sous Linux, ce répertoire est /usr/local (ou parfois /opt). La commande est donc la suivante. (Notez que le fichier configure accepte souvent d'autres options. Elles sont décrites dans le fichier README ou INSTALL). ./configure --prefix=/usr/local 5. L'outil utilisé pour automatiser la compilation est make. Si la phase précédente s'est déroulée correctement, il n'est pas nécessaire de rajouter d'otions sur la ligne de commande. make 6. L'outil make permet également d'automatiser la phase d'installation. De même que précedemment, aucune option n'est normalement nécessaire. make install Cette suite de commandes installe le logiciel dans /usr/local (répertoire cible). Les exécutables sont stockés dans le sous-répertoire bin du répertoire cible, les librairies dans le sous-répertoire lib du répertoire cible, etc. Limites de cette méthode Cette méthode fonctionne parfaitement, mais pose des problèmes de mise à jour ou de suppression d'un logiciel. Il est en effet impossible de situer tous les fichiers installés lors du processus de compilation/installation. On se retrouve très vite avec des centaine de fichiers, d'origines diverses, dans le répertoire /usr/local. Et la lumière fut... Cet état de fait n'a pas échappé aux hackers d'Internet. Ceux-ci se sont attelés à trouver un moyen de ranger cette pagaille que devenait leur répertoire /usr/local. Cet article présente la solution proposée par Bob Glickstein: le logiciel STOW. Stow est un petit script (500 lignes) écrit en langage PERL, sous licence GPL. Debian le fournit en standard, et la RedHat dans le répertoire Contribs. Installation à partir des sources (façon fine) Le principe est d'effectuer la phase d'installation avec un répertoire cible différent de /usr/local, et spécifique pour chaque logiciel. L'exemple que nous choisissons est d'installer la librairie glib 1.2.3. Plutôt que de l'installer dans /usr/local et ses sous-répertoires, l'installation sera faite dans "/usr/local/stow/glib_1.2.3" et ses sous-répertoires. Cela ne change rien aux étapes 1 à 5. Seule la phase 6 est différente. * Dans cette phase, on force l'outil make à faire l'installation du logiciel avec le prefix donné. make 'prefix=/usr/local/stow/glib_1.2.3' install Les librairies glib se trouveront alors dans le sous-répertoire lib de /usr/local/stow/glib_1.2.3. Les fichiers include se trouveront eux dans le sous-répertoire include. Et ainsi de suite pour tous les répertoires habituels (bin, man, share, etc, sbin, doc ...) Pour le moment, ça ne marche guère Une fois le logiciel installé avec cette petite astuce, vous allez utiliser Stow. La commande suivante est à lancer dans le répertoire /usr/local/stow: stow glib_1.2.3 Le script va alors mettre en place des liens symboliques pour que chaque fichier de /usr/local/stow/glib_1.2.3 soit egalement visible dans /usr/local, à la même place. Les fichiers et répertoires de /usr/local/stow/glib_1.2.3/lib sont ainsi visibles dans /usr/local/lib. Et de même pour les répertoires bin, man, share, etc, sbin, doc ... On obtient donc un logiciel configuré pour fonctionner dans /usr/local (phase 4), installé dans un répertoire spécifique (phase 6). Et le tout fonctionne de façon transparente, grâce aux liens symboliques générés par Stow. Bien mais peut mieux faire De même que Stow sait répliquer une arborescense dans /usr/local, Stow sait aussi la faire disparaitre. Pour reprendre notre exemple, Stow est capable de défaire les liens qu'il a créé dans /usr/local. Pour cela, utilisez la commande suivante depuis le répertoire /usr/local/stow: stow -D glib_1.2.3 On se retrouve alors avec un /usr/local ``propre'', dans lequel ne subsiste plus aucun lien pointant vers le répertoire /usr/local/stow/glib_1.2.3. On vient donc d'effectuer une désinstallation de la librairie glib, et ceci en douceur. Un exemple d'application Cette technique est particulièrement intéressante pour tester une nouvelle version d'un logiciel tout en gardant en réserve une version stable. Rien ne vous empeche d'installer les versions 1.2.1, 1.2.2 et 1.2.3 de glib dans divers répertoires, et d'utiliser Stow pour choisir la version visible depuis /usr/local. Conclusion Stow se révèle vite indispensable lorsqu'on a à gérer un nombre important de logiciels dans /usr/local. C'est un outil petit, stable et qui a fait ses preuves. Une lecture de la documentation fournie peut se révéler un plus pour utiliser certaines options de cet utilitaire.