L’installation de logiciels sur Linux via des packages snap offre une solution aux problèmes de dépendances et aux conflits entre applications. Conçus initialement pour Ubuntu, les packages snap sont désormais accessibles sur une multitude de distributions Linux.
Qu’est-ce qu’un package Snap ?
Autrefois, l’installation d’applications sur Linux pouvait s’avérer complexe. Une installation pouvait aboutir à une application dysfonctionnelle, car une bibliothèque ou une dépendance était absente ou obsolète. La recherche et l’installation de la ressource manquante menaient parfois à un nouveau problème, une autre application dépendant de la version remplacée. Une véritable « course à l’échalote ».
Les systèmes de gestion de paquets, tels que apt, dnf, et Pac-Man ont amélioré la situation. Cependant, les difficultés persistent lorsque différentes versions d’une même application sont nécessaires, ou lorsque deux applications entrent en conflit à cause de dépendances à des versions spécifiques, mais différentes, d’une même bibliothèque.
Le conditionnement des applications et les systèmes de déploiement offrent une solution. Snappy, basé sur le système Click (rappelant l’initiative Ubuntu Touch), est l’un des plus populaires. AppImage et Flatpack sont d’autres alternatives.
Ces systèmes regroupent l’application, ses dépendances et exigences dans un unique fichier compressé. L’application s’exécute alors dans un environnement isolé, où elle est séparée des autres applications. Les bibliothèques et ressources dont elle a besoin ne sont accessibles qu’à elle.
N’étant pas installés de manière classique, ces packages n’entrent pas en conflit avec d’autres applications ayant des versions différentes des mêmes ressources. Il devient possible d’utiliser des applications nécessitant des versions de bibliothèques conflictuelles, car chacune fonctionne dans son propre espace isolé.
Comment ces packages sont-ils gérés? Le fichier unique est téléchargé, décompressé et monté comme un système de fichiers virtuel SquashFS, puis présenté comme un environnement virtuel. Ces opérations sont transparentes pour l’utilisateur, qui accède simplement à l’application.
Cependant, chaque package contenant toutes les ressources nécessaires à l’application, leur taille peut être importante. Il est aussi fréquent que certaines ressources, telles que MySQL ou Apache, soient dupliquées si plusieurs packages les requièrent.
Le compromis réside entre la simplicité d’installation et l’élimination des conflits de ressources.
Installation de snapd
Snappy est inclus depuis Ubuntu 16.04. Il était également présent sur notre Manjaro 18.04, mais nous avons dû l’installer sur Fedora 31.
‘Snap’ désigne à la fois les fichiers de package et la commande d’interaction avec eux. Le démon snapd est le nom du package à installer si Snappy n’est pas présent sur votre ordinateur.
Pour installer snapd sur Fedora, utilisez cette commande :
sudo dnf install snapd
Pour l’installer sur Manjaro, utilisez :
sudo pacman -Sy snapd
sudo systemctl enable --now snapd.socket
La commande `snap version` affiche les versions du client snap, du démon snapd, le numéro de série du logiciel, ainsi que le nom, la version de votre distribution Linux et la version du noyau.
Exécutez la commande :
snap version
Installer des packages snap
L’installation d’un package snap est simple. La commande snap permet de rechercher des packages, puis d’installer celui de votre choix.
Pour rechercher et installer l’éditeur d’image GIMP, saisissez :
snap find gimp
Snap recherche les correspondances avec le terme « gimp » et affiche ses résultats. Tous les éléments correspondant ou mentionnant le terme de recherche sont retournés.
Pour installer l’un de ces packages, utilisez la valeur de la colonne ‘Name’:
sudo snap install gimp
Pendant le téléchargement, une barre de progression indique l’avancement de l’installation. Une fois terminée, un message confirme l’installation du package.
La commande `df`, permet de vérifier la capacité et l’utilisation des systèmes de fichiers. En combinant la sortie de `df` avec la commande `grep` pour rechercher « gimp », il est possible d’isoler l’entrée du package installé.
Saisissez:
df | grep gimp
Le package snap est monté comme un système de fichiers, avec le point de montage `/snap/gimp/252`, où « 252 » est le numéro de version de GIMP.
Le système de fichiers est listé comme `/dev/loop18`. Les fichiers de périphérique en boucle permettent d’accéder à des fichiers normaux comme des périphériques de bloc, généralement pour monter des systèmes de fichiers dans des images disque. Ici, ils montent le système de fichiers SquashFS du package snap. Le « 18 » indique qu’il s’agit du 18ème fichier de périphérique `/dev/loop` utilisé sur cet ordinateur Linux.
La commande `df -t squashfs` permet de limiter la sortie aux types de fichiers SquashFS.
Saisissez:
df -t squashfs
Les systèmes de fichiers SquashFS montés sont affichés, chacun géré par un fichier de périphérique `/dev/loop`, 18 au total dans cet exemple.
Chaque système de fichiers est monté dans un répertoire du dossier `/snap`. Cela ne signifie pas qu’il y a 18 packages snap installés. Certains packages sont inclus par défaut dans une distribution Ubuntu, et nous venons d’en installer un nouveau.
L’installation de snapd comprend également certains packages de composants logiciels enfichables principaux.
Pour lister les packages snap installés, utilisez la commande `snap list` :
snap list
La fin de la liste s’affiche ci-dessous, la sortie étant légèrement large.
Voici la liste complète :
Name Version Rev Tracking Publisher Notes core 16-2.43.3 8689 stable canonical* core core18 20200124 1668 stable canonical* base gimp 2.10.18 252 stable snapcrafters - gnome-3-26-1604 3.26.0.20191114 98 stable/… canonical* - gnome-3-28-1804 3.28.0-16-g27c9498.27c9498 116 stable canonical* - gnome-calculator 3.34.1+git1.d34dc842 544 stable/… canonical* - gnome-characters v3.32.1+git3.b9120df 399 stable/… canonical* - gnome-logs 3.34.0 81 stable/… canonical* - gnome-system-monitor 3.32.1-3-g0ea89b4922 127 stable/… canonical* - gtk-common-themes 0.1-28-g1503258 1440 stable/… canonical* -
Il y a 10 packages snap installés, bien que 18 systèmes de fichiers SquashFS aient été créés. Voici les clarifications des colonnes du tableau:
Nom: nom du package snap installé.
Version: numéro de version du logiciel dans le package snap.
Rev: numéro de révision du package snap.
Suivi: canal de suivi des mises à jour. Les quatre canaux sont :
Stable: canal par défaut, contenant les packages les plus stables.
Candidat: canal moins stable, contenant des logiciels en phase finale de test.
Bêta: canal de qualité en fin de développement, mais sa stabilité n’est pas garantie.
Edge: canal pour les premiers testeurs de build, à éviter pour un travail important.
Éditeur: personne, entreprise ou organisation ayant publié le package snap. Un éditeur vérifié est signalé par une coche verte (ou un astérisque si le terminal ne prend pas en charge Unicode).
Remarques : Commentaires ou informations supplémentaires.
Les canaux Snap
L’option `info` donne une description d’un package snap :
snap info gtk-common-themes
Le canal suivi par le package et la version du logiciel dans les packages snap de chaque canal sont affichés. Il est conseillé de rester sur le canal stable.
Un package snap vérifie quatre fois par jour les mises à jour disponibles sur le canal suivi. Les options `refresh` et `channel` permettent de modifier le canal suivi :
sudo snap refresh gtk-common-themes --channel=beta
Si une version plus récente était disponible, elle aurait été installée. Le package snap suit maintenant le canal bêta, et les futures versions bêta seront téléchargées et mises à jour automatiquement.
L’option `–list` permet de vérifier les mises à jour disponibles pour les packages snap:
sudo snap refresh --list
Les versions plus récentes des logiciels sur les canaux suivis sont affichées.
sudo snap refresh gtk-common-themes
Suppression d’un package Snap
sudo snap remove gimp
La feuille de triche Snap
Voici une liste des commandes utiles pour travailler avec les packages snap :
Rechercher un package | `snap find package_name` |
Installer un package | `sudo snap install nom_package` |
Afficher tous les packages installés | `snap list` |
Obtenir des informations sur un package | `snap info nom_package` |
Changer le canal de suivi des mises à jour | `sudo snap refresh nom_package –channel=nom_canal` |
Vérifier si des mises à jour sont disponibles | `sudo snap refresh –list` |
Mettre à jour manuellement un package | `sudo snap refresh nom_package` |
Désinstaller un package | `sudo snap remove nom_package` |