47 votes

Comment supprimer les paquets snap désactivés (inutilisés) avec une seule ligne de commande ?

Quand je cours snap list --all affiche toutes les versions installées des paquets snap.

Name                  Version       Rev   Tracking  Developer     Notes
atom                  1.26.1        150   stable    snapcrafters  classic
brave                 v0.22.669dev  23    stable    brave         -
core                  16-2.32.6     4571  stable    canonical     core
core                  16-2.32.5     4486  stable    canonical     core,disabled
firefox               59.0.2-1      71    stable    mozilla       disabled
firefox               60.0-2        85    stable    mozilla       -
gimp                  2.10.0        38    stable    snapcrafters  disabled
gimp                  2.10.0        39    stable    snapcrafters  -
gimp                  2.8.22        30    stable    snapcrafters  disabled
gnome-3-26-1604       3.26.0        64    stable/…  canonical     -
gnome-3-26-1604       3.26.0        62    stable/…  canonical     disabled
gnome-characters      3.28.0        86    stable/…  canonical     -
gnome-characters      3.26.2        69    stable/…  canonical     disabled
gnome-logs            3.26.2        25    stable/…  canonical     disabled
gnome-logs            3.28.0        31    stable/…  canonical     -
gnome-system-monitor  3.26.0        36    stable/…  canonical     disabled
gnome-system-monitor  3.26.0        39    stable/…  canonical     -
libreoffice           6.0.3.2       59    stable    canonical     disabled
libreoffice           6.0.4.2       63    stable    canonical     -

Aujourd'hui, il y a tellement de paquets handicapés qui ne sont plus utilisés. Je veux donc supprimer ces paquets. La commande est la suivante snap remove gnome-3-26-1604 --revision=62 . Maintenant je dois le faire pour toutes les révisions et pour tous les paquets un par un. Existe-t-il une commande qui permette de supprimer les paquets snap désactivés ou inutilisés en une seule ligne de commande ?

Merci d'avance...

40voto

Dennis Wurster Points 234

Je vais essayer de l'ajouter prochainement (à hauteur de 20 %). En attendant, vous pouvez déposer

#!/bin/sh
set -eu

snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
    done

dans un Shell Shell et l'exécuter.

20voto

Pablo Bianchi Points 10158

J'ai trouvé plus élégant et plus facile à utiliser sur un alias (en utilisant des guillemets simples) cette solution :

LANG=C snap list --all | while read snapname ver rev trk pub notes; do if [[ $notes = *disabled* ]]; then sudo snap remove "$snapname" --revision="$rev"; fi; done

À partir de la version 2.34 de snap, vous pouvez définir le nombre maximum de révisions d'un snap stockées par le système en définissant une valeur de refresh.retain option ( source ).

sudo snap set system refresh.retain=2

Vous pouvez également libérer de l'espace en suppression du cache de snap :

sudo du -sh /var/lib/snapd/cache/        # Get used space
sudo rm  --force /var/lib/snapd/cache/*  # Remove cache

Vous pouvez souhaiter supprimer complètement snap et installer Flatpak .

2voto

rossp Points 900

La possibilité de purger/supprimer les anciens snaps/désactivés a été discuté mais pas encore mis en œuvre. En attendant, il s'agit malheureusement d'un processus manuel.

2voto

Griffin Young Points 1

D'après les réponses précédentes, vous devriez probablement faire quelque chose comme.. :

snap list --all | awk '$5~"disabled"{print $1" --revision "$3}' | xargs -rn3 snap remove

qui évite d'émettre une erreur lorsqu'il n'y a pas de révision instantanée désactivée et qui recherche spécifiquement "désactivé" dans la colonne des notes.

2voto

Eli Points 575

Après avoir vu la note de Mike à propos de ces scripts qui se cassent d'une version à l'autre parce que le nombre de colonnes de sortie a changé, j'ai cherché à voir s'il existait des bindings lisibles par la machine pour ce genre de choses.

Ce que j'ai trouvé, c'est API REST de snapd .

L'équivalent de snap list --all est

curl --silent --show-error \
    --get --data select=all \
    --unix-socket /run/snapd.socket \
    http://localhost/v2/snaps

Il renvoie JSON. Pour filtrer les paquets non actifs et les transformer en une liste de snap remove vous pouvez utiliser les commandes jq :

jq --raw-output '
    .result[] | 
    select(.status != "active") | 
    "snap remove --revision=\(.revision|@sh) \(.name|@sh)"
'

Techniquement, on pourrait faire tenir tout cela sur une seule ligne (les coupures que j'ai insérées le sont pour des raisons de lisibilité), mais c'est assez lourd, alors je l'ai intégré dans un script : remove-disabled-snaps.sh

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X