Comment profiter (plus) tranquillement des « snaps » sur Ubuntu

Depuis sa version 16.04 LTS, Ubuntu intègre par défaut, en plus de apt et dpkg qui sont issus de Debian, un système supplémentaire de déploiement et de gestion de paquets : Snappy. Mis au point initialement par Canonical (l’entreprise à l’origine d’Ubuntu et qui soutient son développement), celui-ci a rapidement été porté sur les principales autres distributions (dont Arch Linux, CentOS, Debian, Fedora, Gentoo Linux, Linux Mint et openSUSE).

Ce système donne la possibilité aux éditeurs de logiciel d’empaqueter leurs applications (les « snaps »), une fois pour toute, de telle sorte qu’elles peuvent fonctionner (au sein d’un « bac à sable » sécurisé) indépendamment de la distribution Linux sur laquelle elles seront exécutées. Autre avantage, il permet des mises à jour automatiques et transparentes des paquets, éventuellement de manière différentielle (c’est à dire sans téléchargement de l’intégralité du paquet mais seulement des portions modifiées).

Si le système semble effectivement rencontrer un succès croissant avec, notamment, la publication d’applications incontournables provenant d’éditeurs « poids lourds » (Spotify, Skype, Telegram, Signal, Visual Studio Code, Android Studio, PhpStorm…), Canonical a surtout fait le choix de fournir de base certaines applications sous cette forme dans Ubuntu :

  • runtime GNOME,
  • thèmes et icônes communs GNOME,
  • sélecteur d’Emoji GNOME,
  • calculatrice GNOME,
  • moniteur système GNOME,
  • lecteur de journaux système GNOME.

Modification de la rétention des versions désactivées

Par défaut, Snappy est configuré pour conserver dans le dossier /snap les 3 versions précédentes de chaque snap (y compris core, son propre noyau) après mise à jour dans la dernière version disponible. Cela a pour conséquence de remplir (potentiellement rapidement en fonction du nombre de paquets installés) l’espace disque.

Remarque : dans mon cas, les snaps désactivés occupaient environ 4 Go d’espace disque.

Pour vous en convaincre, lancez une fenêtre de terminal (application « Terminal ») et exécutez la commande suivante :

$ snap list --all

Il apparaît alors la liste de tous les snaps présents sur le système, dont ceux correspondant à des versions périmées et, par conséquent, désactivées :

Anduin> johndoe@Anduin:/snap$ snap list --all
Nom                   Version                    Révision  Suivi     Éditeur        Notes
core                  16-2.37.4                  6531      stable    canonical✓    core,désactivé
core                  16-2.38                    6673      stable    canonical✓    core
core                  16-2.37.2                  6405      stable    canonical✓    core,désactivé
core18                18                         782       stable    canonical✓    base
gnome-3-26-1604       3.26.0                     78        stable/…  canonical✓    désactivé
gnome-3-26-1604       3.26.0                     74        stable/…  canonical✓    désactivé
gnome-3-26-1604       3.26.0.20190228            82        stable/…  canonical✓    -
gnome-3-28-1804       3.28.0-9-gce87599.ce87599  23        stable    canonical✓    -
gnome-calculator      3.32.0+git2.cae338ea       352       stable/…  canonical✓    -
gnome-calculator      3.30.1                     260       stable/…  canonical✓    désactivé
gnome-calculator      3.30.0                     238       stable/…  canonical✓    désactivé
gnome-characters      3.29.91                    124       stable/…  canonical✓    désactivé
gnome-characters      v3.32.0+git1.9ff74a2       206       stable/…  canonical✓    -
gnome-characters      3.30.0                     139       stable/…  canonical✓    désactivé
gnome-logs            3.32.0                     57        stable/…  canonical✓    -
gnome-logs            3.30.0                     45        stable/…  canonical✓    désactivé
gnome-logs            3.30.0                     43        stable/…  canonical✓    désactivé
gnome-system-monitor  3.30.0                     57        stable/…  canonical✓    désactivé
gnome-system-monitor  3.32.0                     70        stable/…  canonical✓    -
gtk-common-themes     0.1-7-g1feddba             1122      stable/…  canonical✓    désactivé
gtk-common-themes     0.1-4-g88bc1b2             818       stable/…  canonical✓    désactivé
gtk-common-themes     0.1-16-g2287c87            1198      stable/…  canonical✓    -
signal-desktop        1.23.2                     107       stable    snapcrafters  -
signal-desktop        1.23.1                     106       stable    snapcrafters  désactivé
skype                 8.32.0.44                  60        stable    skype✓        désactivé,classic
skype                 8.33.0.41                  63        stable    skype✓        désactivé,classic
skype                 8.34.0.78                  66        stable    skype✓        classic

Heureusement, depuis la version 2.34 de Snappy, il est possible de configurer la rétention des versions désactivées. Pour connaître la version de Snappy installée sur votre machine, jouez simplement la commande que voici :

$ snap version

En fonction, exécutez la commande qui suit, toujours dans la fenêtre de terminal, pour ne conserver plus que 2 versions (valeur minimale acceptée) au lieu de 3 :

$ sudo snap set system refresh.retain=2

Nettoyage des versions désactivées

Pour libérer davantage d’espace, il est également possible de supprimer manuellement une version désactivée d’un snap. Pour ce faire, il suffit d’exécuter la commande ci-après dans la fenêtre de terminal :

$ sudo snap remove <snap> --revision=<rev>

<snap> est le nom du snap tel qu’affiché dans la colonne « Nom » et <rev> le numéro de révision figurant dans la colonne « Révision ».

Ceci étant, il devient rapidement fastidieux de supprimer un à un les snaps désactivés. Fort heureusement, il est possible de se simplifier grandement la tâche avec une commande se chargeant de supprimer « d’un coup » tous les snaps désactivés présents sur le système :

snap list --all | awk '/désactivé/{system("sudo snap remove " $1 " --revision=" $3)}'

Remarque : lorsqu’aucun snap désactivé n’est détecté, la commande rend la main sans rien écrire. Autrement, elle vous demande votre mot de passe et effectue les suppressions ad hoc.

Pour plus de praticité encore, il est bien entendu possible de définir un alias pour cette commande afin de pouvoir l’invoquer plus simplement. Pour cela, ajoutez la ligne suivante au fichier .bashrc (ou mieux, .bash_aliases) situé à la racine de votre dossier personnel à l’aide d’un éditeur de texte (par exemple : gedit, application « Éditeur de texte ») :

alias snapclean='snap list --all | awk '\''/désactivé/{system("sudo snap remove " $1 " --revision=" $3)}'\'''

Il ne vous reste plus maintenant qu’à appeler régulièrement la commande via son alias dans une fenêtre de terminal :

$ snapclean

Vous continuerez ainsi à profiterez de snaps à jour mais en préservant au maximum l’espace disque.

Masquage du dossier de configurations utilisateur

En plus de stocker les snaps eux-mêmes dans le dossier /snap, Snappy conserve les configurations utilisateur des différentes applications dans le dossier ~snap qui est donc situé dans le « dossier personnel ». Son contenu n’est utile qu’au système et n’a pas vocation à être modifié ni même à être consulté par l’utilisateur.

Si sa perte ou son altération involontaire ne présente aucune gravité en-soi, je trouve dommage de risquer d’avoir à reprendre les réglages d’une ou plusieurs applications. En outre, j’ai la sensation que, d’une certaine manière, ce dossier « encombre » le dossier personnel.

En attendant que Canonical change l’emplacement par défaut du dossier des configurations utilisateur pour ~/.snap ou qu’il soit prévu de pouvoir le redéfinir soi-même (cf. bug renseigné sur Launchpad), il est possible de le masquer et d’éviter ainsi de « trébucher » dessus.

D’abord, pour masquer le dossier dans le gestionnaire de fichiers (application « Fichiers »), il suffit d’ajouter son nom dans un fichier spécialement prévu à cet effet en exécutant la commande suivante, encore une fois dans la fenêtre de terminal :

echo snap >> ~/.hidden

Remarque : si le fichier ~/.hidden n’existe pas, il est alors créé à la volée.

Ensuite, pour masquer le dossier lors d’un ls dans une fenêtre de terminal, il convient de redéfinir l’alias de la commande. Pour cela, ajoutez également la ligne suivante au fichier .bashrc (ou mieux, .bash_aliases) situé à la racine de votre dossier personnel à l’aide d’un éditeur de texte :

alias ls='ls --color=auto --ignore=snap'

And, voilà !

Références :

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s