Recherche de site Web

Installer et gérer des logiciels à partir du source en utilisant GNU Stow sous Linux


Lorsque vous installez un logiciel à partir du code source, il finit souvent dans différents répertoires de votre système (comme /usr/local/bin, /usr/local/lib, etc.).

Avec le temps, gérer ces fichiers peut devenir une corvée, surtout si vous souhaitez supprimer ou mettre à jour un paquet. GNU Stow résout ce problème en organisant les installations de logiciels de manière propre et maintenable.

Dans ce tutoriel détaillé, nous allons expliquer ce qu'est GNU Stow et comment utiliser GNU Stow pour installer et gérer des logiciels à partir du code source de manière efficace et organisée sous Linux.

Qu'est-ce que GNU Stow ?

GNU Stow est un gestionnaire de ferme de liens symboliques qui aide à gérer l'installation de paquets logiciels sur les systèmes Linux et de type Unix. Il utilise des liens symboliques pour simplifier la gestion des logiciels installés à partir du code source.

Le but principal de GNU Stow est d'aider à organiser les fichiers et les répertoires d'une manière qui permet une gestion et un entretien faciles.

Il fonctionne en créant des liens symboliques dans un répertoire parent vers les fichiers et répertoires des paquets installés.

Cette approche permet à plusieurs packages de coexister dans le même répertoire sans interférer les uns avec les autres, car les fichiers de chaque package sont conservés séparément et sont reliés en place selon les besoins.

GNU Stow est particulièrement populaire parmi les utilisateurs qui préfèrent gérer eux-mêmes leurs installations et configurations logicielles, car il offre un moyen propre et efficace de tout garder organisé.

Il est également couramment utilisé en conjonction avec des systèmes de contrôle de version pour gérer les fichiers de configuration et d'autres ressources qui doivent être partagés entre différentes machines ou environnements.

GNU Stow est un outil libre et open-source, et fait partie du projet GNU.

Comment fonctionne GNU Stow

Stow suppose que chaque paquet logiciel est stocké dans son propre répertoire. Par exemple, vous pourriez avoir /usr/local/stow/package1 et /usr/local/stow/package2.

Lorsque vous "rangez" un paquet, Stow crée des liens symboliques depuis le répertoire du paquet vers les emplacements appropriés dans votre système de fichiers. Par exemple, il pourrait lier /usr/local/stow/package1/bin/program à /usr/local/bin/program.

Pour installer un paquet, vous naviguez vers le répertoire contenant les répertoires gérés par stow et exécutez stow package1. Cela crée les liens symboliques nécessaires. Pour désinstaller, vous exécutez stow -D package1, ce qui supprime les liens.

Fonctionnalités de GNU Stow

Les fonctionnalités clés de GNU Stow incluent :

  1. Liens symboliques : Stow crée des liens symboliques vers les fichiers et répertoires de chaque paquet, pointant vers leurs emplacements réels. Cela garantit que les fichiers semblent être au bon endroit sans y être réellement, ce qui aide à éviter les conflits entre différents paquets.
  2. Gestion des paquets : Il est utile pour gérer les logiciels installés dans des répertoires spécifiques à l'utilisateur ou dans tout le système, en particulier lorsqu'il s'agit de fichiers de configuration ou de scripts qui doivent se trouver à des emplacements spécifiques.
  3. Mises à niveau et suppressions faciles : Mettre à niveau ou supprimer un paquet géré par Stow est simple, car cela implique simplement de mettre à jour ou de supprimer le répertoire du paquet. Stow met automatiquement à jour ou supprime les liens symboliques correspondants.
  4. Configuration flexible : Les utilisateurs peuvent configurer Stow selon leurs besoins, y compris en spécifiant le répertoire cible pour les liens et en gérant différents types de fichiers.

Avantages

Utiliser GNU Stow dans votre flux de travail apporte les trois principaux avantages suivants :

1. Simplifie la gestion des paquets:

Vous pouvez facilement installer, mettre à jour et supprimer des paquets logiciels. Vous pouvez même installer plusieurs versions du même paquet à partir du source.

2. Évite les conflits:

Puisque chaque paquet se trouve dans son propre répertoire, il y a moins de risques de conflits de fichiers.

3. Reproductibilité:

Facilite la reproduction et la documentation de l'environnement logiciel.

Cas d'utilisation

GNU Stow est utile pour les développeurs qui compilent et installent régulièrement des logiciels à partir du code source. Il est également pratique pour gérer les fichiers de configuration (dotfiles), car il peut maintenir une configuration cohérente sur différents systèmes.

Usage général

Pour installer un paquet :

cd /usr/local/stow
stow package1

Pour désinstaller un paquet :

cd /usr/local/stow
stow -D package1

En utilisant GNU Stow, vous pouvez garder votre système organisé et réduire la complexité de la gestion des installations de logiciels.

Installer un logiciel à partir du code source en utilisant GNU Stow

À des fins de démonstration, nous verrons comment installer la dernière version de curl en utilisant GNU Stow sur un système Linux.

1. Mettez à jour votre système:

Assurez-vous que la base de données des paquets de votre système est à jour.

sudo apt update   # For Debian/Ubuntu-based systems
sudo yum update   # For CentOS/RHEL systems
sudo dnf update   # For Fedora systems
sudo pacman -Syu  # For Arch Linux systems

2. Installer les outils de développement requis:

Installez les outils de développement nécessaires s'ils ne sont pas déjà installés.

sudo apt install build-essential   # Debian/Ubuntu
sudo yum groupinstall "Development Tools"   # CentOS/RHEL
sudo dnf groupinstall "Development Tools"   # Fedora
sudo pacman -S base-devel   # Arch Linux

Vous devrez également installer les bibliothèques de développement OpenSSL si vous souhaitez compiler curl avec le backend OpenSSL. Par exemple, sur les systèmes basés sur Debian, vous pouvez installer les bibliothèques de développement OpenSSL en utilisant la commande :

sudo apt install libssl-dev

Si vous voulez compiler curl avec le backend GnuTLS, installez ce qui suit sur un système basé sur Debian :

sudo apt install libgnutls28-dev libgnutls30

3. Installer GNU Stow:

Assurez-vous que GNU Stow est installé.

sudo pacman -S stow     # Arch Linux
sudo apt install stow   # Debian/Ubuntu
sudo yum install stow   # Older CentOS/RHEL
sudo dnf install stow   # Latest Fedora/RHEL/AlmaLinux/Rocky Linux

4. Télécharger et extraire le code source de curl :

Téléchargez le dernier code source de Curl depuis sa page officielle des releases et extrayez-le.

wget https://github.com/curl/curl/releases/download/curl-8_8_0/curl-8.8.0.tar.gz
tar xvf curl-8.8.0.tar.gz

5. Configurez la construction avec le préfixe:

Cd dans le répertoire extrait :

cd curl-8.8.0

Configurez la construction avec le backend TLS et le répertoire d'installation à gérer par GNU Stow.

./configure --with-ssl --prefix=/usr/local/stow/curl-8.8.0

Si vous voulez configurer Curl avec GnuTLS, utilisez plutôt cette commande :

./configure --with-gnutls --prefix=/usr/local/stow/curl-8.8.0

6. Compiler le logiciel:

make

7. Installer le logiciel:

sudo make install

8. Utilisez GNU Stow pour gérer l'installation:

Changez pour le répertoire stow et utilisez stow pour gérer l'installation.

cd /usr/local/stow
sudo stow curl-8.8.0

9. Vérifiez l'installation:

Vérifiez que Curl est correctement installé et accessible.

curl --version

Exemple de sortie :

curl 8.8.0 (x86_64-pc-linux-gnu) libcurl/8.8.0 OpenSSL/1.1.1w zlib/1.2.11
Release-Date: 2024-05-22
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IPv6 Largefile libz NTLM SSL threadsafe TLS-SRP UnixSockets

Vérifier la version de Curl

En suivant ces étapes, vous aurez installé la dernière version de curl en utilisant GNU Stow, garantissant une installation propre et organisée.

Mettre à jour le logiciel à partir d'une version plus ancienne

Pour mettre à jour d'une version antérieure de Curl (par exemple, 8.7.1) vers la dernière version (par exemple, 8.8.0) en utilisant GNU Stow, vous pouvez suivre ces étapes :

1. Désinstaller l'ancienne version :

Tout d'abord, vous devez désinstaller l'ancienne version de Curl. Comme vous l'avez installé en utilisant GNU Stow, vous pouvez simplement le désinstaller avec Stow.

cd /usr/local/stow
sudo stow -D curl-8.7.1

Puis, retournez dans votre répertoire personnel :

cd

2. Téléchargez et extrayez le code source le plus récent de Curl :

Téléchargez la dernière version de Curl et extrayez-la.

wget https://github.com/curl/curl/releases/download/curl-8_8_0/curl-8.8.0.tar.gz
tar -xzf curl-8.8.0.tar.gz
cd curl-8.8.0

3. Configurer et compiler la dernière version de Curl :

Configurez l'environnement de build et compilez la dernière version de Curl.

./configure --with-ssl --prefix=/usr/local/stow/curl-8.8.0
[or]
./configure --with-gnutls --prefix=/usr/local/stow/curl-8.8.0
make
sudo make install

4. Utilisez GNU Stow pour gérer la nouvelle installation :

cd /usr/local/stow
sudo stow curl-8.8.0

5. Vérifiez la mise à jour :

Vérifiez que la dernière version de Curl est correctement installée et accessible.

curl --version

6. Supprimez l'ancienne version (facultatif):

Alors que GNU Stow va désassocier l'ancienne version, il ne supprimera pas l'ancien répertoire. Pour supprimer complètement l'ancienne version de Curl après l'installation de la nouvelle :

sudo rm -rf /usr/local/stow/curl-8.7.1

Ce processus garantit que vous pouvez facilement gérer et mettre à jour plusieurs versions de Curl en utilisant GNU Stow, ce qui rend pratique le passage d'une version à une autre si nécessaire.

Utilisation avancée de GNU Stow

GNU Stow offre plusieurs options et fonctionnalités avancées qui peuvent améliorer son utilité et sa flexibilité. En voici quelques-unes :

1. Packages Relocables:

Stow vous permet de créer des packages qui peuvent être déplacés sans en changer le contenu. Cela signifie que le même package peut être placé à différents endroits sans modifier les fichiers.

Vous pouvez utiliser les options --dir et --target pour spécifier le répertoire source des paquets et le répertoire cible où les liens symboliques doivent être créés.

Exemple:

stow --dir=/path/to/packages --target=/usr/local package_name

2. Simulation des opérations de stockage:

Avant d'apporter des changements réels, vous pouvez simuler des opérations de stockage pour voir ce qui se passerait. Cela aide à éviter les erreurs.

Nous pouvons utiliser l'option -n ou --no pour effectuer une simulation à sec.

Exemple:

stow -n package_name

3. Sortie Verbeuse:

Obtenez des informations détaillées sur ce que fait stow. Cela peut être utile pour le débogage ou pour comprendre les actions effectuées.

Utilisez l'option -v ou --verbose pour afficher des informations détaillées.

Exemple:

stow -v package_name

4. Ignorer les fichiers et les répertoires:

Vous pouvez dire à Stow d'ignorer certains fichiers ou répertoires dans le paquet.

Créez un fichier .stow-local-ignore dans le répertoire du paquet en listant les fichiers ou répertoires à ignorer.

Exemple:

Créez un fichier .stow-local-ignore avec le contenu suivant :

.git
README.md

5. Remettre en place et déstower:

Restow : Cette opération commence par déstocker le paquet, puis le stocke de nouveau. Elle est utile pour actualiser les liens symboliques après avoir modifié le contenu du paquet.

Utilisation:

stow -R package_name

Destow : Cette opération supprime les liens symboliques créés par stow.

Utilisation:

stow -D package_name

6. Adoption de Fichiers Préexistants:

Stow peut adopter des fichiers qui existent déjà dans le répertoire cible. Cela est utile pour mettre des fichiers existants sous la gestion de stow sans avoir à les déplacer manuellement.

Utilisez l'option --adopt.

Exemple:

stow --adopt package_name

7. Gestion des conflits:

Stow peut détecter et gérer les conflits entre les paquets.

Utilisez l'option --override pour écraser de force les fichiers existants.

Exemple:

stow --override package_name

8. Répertoires de stockage personnalisés:

Vous pouvez spécifier des répertoires personnalisés pour stocker les paquets, ce qui permet une plus grande flexibilité dans l'organisation de votre logiciel.

Utilisez l'option --dir pour spécifier le répertoire source et --target pour spécifier le répertoire cible.

Exemple:

stow --dir=/custom/source --target=/custom/target package_name

Pour une liste complète des options, vous pouvez vous référer à la page de manuel stow :

man stow

Exemple : Utilisation de plusieurs options

Voici un exemple qui combine plusieurs options avancées :

stow --dir=/path/to/packages --target=/usr/local --verbose --no --adopt --override package_name

Voici une répartition de chaque option :

  • --dir : Spécifie le répertoire source du paquet.
  • --target : Spécifie le répertoire cible pour les liens symboliques.
  • --verbose : Fournit une sortie détaillée de l'opération.
  • --no : Effectue une exécution à blanc pour simuler l'opération.
  • --adopt : Adopte les fichiers préexistants dans le répertoire cible.
  • --override : Écrase de force les fichiers existants.

Fiche de référence GNU Stow

1. Ranger un colis:

stow package_name

Crée des liens symboliques pour package_name dans le répertoire parent.

2. Déballer un colis:

stow -D package_name

Supprime les liens symboliques pour package_name.

3. Replacer un paquet:

stow -R package_name

Déplace puis remet en place package_name.

4. Spécifiez le répertoire source:

stow --dir=/path/to/packages package_name

Définit le répertoire source où se trouvent les packages.

5. Spécifiez le répertoire cible:

stow --target=/path/to/target package_name

Définit le répertoire cible où les liens symboliques doivent être créés.

6. Simuler l'opération (exécution à blanc):

stow -n package_name

Effectue une simulation sans apporter de modifications.

7. Sortie verbeuse:

stow -v package_name

Fournit une sortie détaillée de l'opération.

8. Adopter des fichiers préexistants:

stow --adopt package_name

Adopte les fichiers existants dans le répertoire cible.

9. Forcer le remplacement des conflits :

stow --override package_name

Remplace les fichiers existants dans le répertoire cible.

10. Ignorer des fichiers ou des répertoires spécifiques:

Créez un fichier .stow-local-ignore dans le répertoire du paquet avec les fichiers ou répertoires à ignorer.

Exemple de contenu .stow-local-ignore :

.git
README.md

11. Stocker un paquet depuis un répertoire personnalisé vers une cible personnalisée:

stow --dir=/path/to/packages --target=/path/to/target package_name

12. Déstower un paquet et supprimer son répertoire:

stow -D package_name
sudo rm -rf /usr/local/stow/package_name

13. Réenregistrer un paquet avec sortie détaillée:

stow -Rv package_name

14. Adopter des fichiers existants dans la gestion Stow:

stow --adopt package_name

15. Exécution à blanc pour vérifier ce qui se passerait:

stow -n package_name

Résumé des options

  • -D/--delete : Défait l'installation d'un paquet en supprimant ses liens symboliques.
  • -R/--restow : Défait et refait le rangement d'un paquet.
  • -n/--no : Exécution à sec (simuler l'opération).
  • -v/--verbose : Sortie détaillée.
  • --dir : Spécifiez le répertoire source.
  • --target : Spécifiez le répertoire cible.
  • --adopt : Adopter des fichiers préexistants.
  • --override : Forcer l'écrasement des fichiers existants.

Exemple de flux de travail

1. Ranger un nouveau colis :

cd /usr/local/stow
sudo stow package_name

2. Déstower un ancien paquet et supprimer son répertoire:

sudo stow -D old_package_name
sudo rm -rf /usr/local/stow/old_package_name

3. Replacer un colis après avoir effectué des modifications:

cd /usr/local/stow
sudo stow -R package_name

4. Adopter les fichiers existants dans le répertoire cible:

cd /usr/local/stow
sudo stow --adopt package_name

5. Simuler le rangement d'un colis pour vérifier les erreurs:

cd /usr/local/stow
stow -n package_name

Questions Fréquemment Posées

Q : Qu'est-ce que GNU Stow ?

A : GNU Stow est un outil pratique pour Linux qui vous aide à gérer les logiciels que vous compilez à partir du code source. Au lieu d'installer directement le logiciel dans des répertoires système comme /usr/local, Stow permet de garder les choses organisées en :

  • Stocker le logiciel dans son propre répertoire : Cela empêche les conflits avec d'autres programmes et garde votre système propre.
  • Créer des liens symboliques : Ces liens agissent comme des raccourcis, pointant vers les fichiers de programme réels dans leurs répertoires séparés. De votre point de vue, le logiciel semble installé normalement, mais Stow gère les liens en arrière-plan.

Q : Comment installer GNU Stow ?

A : GNU Stow peut généralement être installé via le gestionnaire de paquets de votre distribution. Par exemple, sur les systèmes basés sur Debian, vous pouvez l'installer en utilisant :

sudo apt-get install stow

Sur les systèmes basés sur Red Hat, vous pouvez utiliser :

sudo dnf install stow

Q : Comment utiliser GNU Stow pour gérer des paquets ?

A : Pour utiliser GNU Stow, vous devez d'abord installer votre logiciel dans une structure de répertoires que Stow peut gérer. Par exemple, si vous avez un paquet dans /usr/local/stow/mypackage, vous pouvez le faire apparaître dans /usr/local en exécutant :

cd /usr/local/stow
sudo stow mypackage

Q : Comment puis-je gérer plusieurs versions du même logiciel avec GNU Stow ?

A : Vous pouvez installer chaque version du logiciel dans son propre répertoire sous le répertoire Stow (par exemple, /usr/local/stow/mypackage-1.0 et /usr/local/stow/mypackage-2.0). Pour passer d'une version à l'autre, il suffit de désinstaller la version actuelle et d'installer la version souhaitée :

cd /usr/local/stow
sudo stow -D mypackage-1.0  # Unstow version 1.0
sudo stow mypackage-2.0     # Stow version 2.0

Q : Que se passe-t-il en cas de conflits ou de chevauchements entre les packages ?

A : GNU Stow vous avertira s'il y a des conflits ou des chevauchements entre les paquets que vous essayez de stower. Vous pouvez résoudre ces conflits en ajustant manuellement la structure des répertoires ou en utilisant l'option --adopt pour permettre à Stow de prendre la propriété des fichiers en conflit.

Q : Comment désinstaller un paquet géré par GNU Stow ?

A : Pour désinstaller un paquet, vous devez simplement le désinstaller :

cd /usr/local/stow
sudo stow -D mypackage

Cela supprimera les liens symboliques créés par Stow, désinstallant effectivement le paquet.

Q : Puis-je utiliser un répertoire différent pour Stow ?

A : Oui, vous pouvez spécifier un répertoire différent pour Stow en utilisant l'option -d. Par exemple, si vous voulez utiliser /opt/stow comme répertoire Stow, vous pouvez exécuter :

sudo stow -d /opt/stow mypackage

Q : Existe-t-il des options ou fonctionnalités avancées dans GNU Stow ?

A : Oui, GNU Stow possède plusieurs options avancées, notamment :

  • --ignore=PATTERN : Ignorer les fichiers correspondant à un motif spécifique.
  • --defer=PATTERN : Reporter le traitement des fichiers correspondant à un certain motif.
  • --adopt : Adopter des fichiers existants dans le paquet Stow.
  • --no-folding : Désactiver le pliage des répertoires.

Q : Que dois-je faire si GNU Stow ne fonctionne pas comme prévu ?

A : Si vous rencontrez des problèmes, vous pouvez vérifier ce qui suit :

  • Assurez-vous que les répertoires que vous gérez avec Stow sont correctement structurés.
  • Vérifiez qu'il n'y a pas de problèmes de permissions en exécutant Stow avec des privilèges élevés (sudo).
  • Vérifiez la sortie de Stow pour détecter tout avertissement ou erreur.
  • Consultez la page de manuel stow ou la documentation GNU Stow pour obtenir des conseils supplémentaires.

Points clés

GNU Stow est un outil utile pour gérer les installations et les configurations de logiciels.

  • GNU Stow est un gestionnaire de fermes de liens symboliques gratuit et open source.
  • Il est principalement utilisé pour gérer l'installation des paquets logiciels, en les gardant organisés dans des répertoires séparés.
  • Stow crée des liens symboliques à partir d'un répertoire central (généralement /usr/local/stow) vers les emplacements appropriés dans l'arborescence des répertoires du système.
  • C'est particulièrement utile pour gérer les fichiers de configuration et suivre les installations de logiciels personnalisés.
  • Stow permet une gestion facile des paquets, l'installation et la suppression sans mélanger les fichiers de différents paquets.

Conclusion

GNU Stow fournit une solution conviviale pour gérer les logiciels que vous compilez vous-même sous Linux. Il élimine les tracas liés aux fichiers dispersés et simplifie le processus de mise à jour et de suppression.

En créant des liens symboliques, Stow garde votre système organisé et vous permet de passer d'une version de logiciel à une autre sans effort. Stow est très utile pour les développeurs et les testeurs qui installent souvent des logiciels depuis la source sous Linux.

Si vous cherchez un moyen de rationaliser votre flux de travail avec des programmes construits à partir du source, GNU Stow est un outil précieux à ajouter à votre boîte à outils Linux.

Ressources :

  • Site Web de GNU Stow
  • Documentation de GNU Stow

Lecture suggérée :

  • Comment supprimer des programmes installés depuis la source en utilisant GNU Stow sous Linux
  • Comment trouver et supprimer les paquets inutilisés sous Linux

Image mise en avant par GrumpyBeere de Pixabay.