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>
où <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 :