Comment supprimer l'ancienne version des snaps installés

65

Je suis novice avec l'utilisation de snap, j'ai peu d'applications installées sur mon système, quelque chose que je remarque lorsque j'exécute la commande, df -hj'ai trouvé différentes versions montées du même snap

/dev/loop0       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/7
/dev/loop1        82M    82M     0 100% /var/lib/snapd/snap/core/4110
/dev/loop7       198M   198M     0 100% /var/lib/snapd/snap/polarr/3
/dev/loop2        82M    82M     0 100% /var/lib/snapd/snap/core/4206
/dev/loop3       143M   143M     0 100% /var/lib/snapd/snap/gravit-designer/6
/dev/loop10      137M   137M     0 100% /var/lib/snapd/snap/gravit-designer/5

ma question est pourquoi ils y restent, le seul moyen que j'ai trouvé pour supprimer l'ancien est de supprimer et de réinstaller le composant logiciel enfichable, il y a quelque chose comme prunemaintenir mon système?

rkmax
la source

Réponses:

84

Voici un court script qui supprimera toutes les anciennes versions de snaps. Cela ne conservera que la version active actuelle, ce qui devrait vous permettre de récupérer de l'espace disque:

#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
    done
popey
la source
Il a réussi à supprimer toutes les anciennes versions, mais aucun espace n'est ajouté à mon disque!
mtoloo
Vérifiez dir /var/lib/snapd/snaps/avant et après l'exécution de ce script. Devrait avoir libéré de l'espace - si vraiment supprimé quelques boutons-pression. Il devrait afficher des messages comme snap-name removed, par exemple gtk-common-themes removed.
PeterM
Il y a des liens durs dedans /var/lib/snapd/cachedonc vous devez aussi les supprimer pour libérer de l'espace. Vous pouvez supprimer le cache en toute sécurité avecsudo rm /var/lib/snapd/cache/*
rubo77
42

À partir de snap 2.34 et versions ultérieures, vous pouvez définir le nombre maximal de révisions d'un snap stockées par le système en définissant l' option refresh.retain .

$ sudo snap set system refresh.retain=2 

La valeur refresh.retain ne peut être qu'un nombre compris entre 2 et 20 et a une valeur par défaut de 3.

Mustapha Hadid
la source
1
après avoir fait cela, en passant de la valeur par défaut 3 à un nouveau paramètre de 2, quand les versions actuelles sont-elles purgées?
Tim Richardson
Je pense que les anciens snaps seront purgés lors de l'installation de la nouvelle version. Comme vous le savez peut-être déjà, les mises à jour instantanées des applications installées automatiquement en fonction de l'option refresh.timer, vous n'avez donc pas à faire la mise à jour manuellement
Mustapha Hadid
Mais comment vérifier combien mon ordinateur a besoin? Exemple: refresh.retain=3est bon pour la RAM de 4 Go ou en a besoin de plus?
Peter Krauss
1
@PeterKrauss Cela dépend de la capacité de votre périphérique de stockage. Cela n'a rien à voir avec la capacité de votre RAM.
Mustapha Hadid
30

Une version du script d'une autre réponse , comme une ligne, sans la awkdépendance:

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

Cela nécessite probablement bashou un shell compatible avec la [[construction.

Gert van den Berg
la source
6
Cela doit être exécuté à partir d'un utilisateur qui peut ajouter des snaps. Sur Ubuntu Core, l'utilisateur admin fonctionne, sur Ubuntu normal, une sudo -isession peut être nécessaire, ou snap removepeut être exécutée avec sudo.
Gert van den Berg
@ rubo77 a souligné qu'il supposait une locale en anglais. L'exécuter dans un sous-shell (pour ne pas jouer avec les variables env locales du shell principal) après l'avoir fait export LC_ALL=en_US.UTF-8au préalable devrait garantir cela. (Il peut également être défini avant la commande snap, mais je ne sais pas si les suppressions ultérieures devront également être traduites)
Gert van den Berg
Il suffit d'ajouter LANG=c avant que toute la ligne fonctionne bien sur les consoles allemandes
rubo77
@ rubo77 Il devrait probablement être LANG=C(ou LC_ALL=C) pour les paramètres régionaux par défaut. Les minuscules cpeuvent fonctionner en raison de Cleur valeur par défaut pour un environnement local non valide. ( LC_MESSAGESest probablement le paramètre minimal) (je ne veux pas modifier le message pour un paramètre dont de nombreux utilisateurs n'ont pas besoin ...) (Vous comparez les erreurs LANG=c localeavec LANG=C locale)
Gert van den Berg
17

Les documents snapd sur les versions indiquent que les révisions obsolètes doivent être supprimées automatiquement afin que pas plus que les deux dernières révisions soient installées. Cependant, j'ai également vu plus de deux versions de mes snaps installés.

Vous pouvez lister toutes les révisions avec snap list --allpour voir quelque chose comme:

Name     Version                  Rev   Tracking  Developer  Notes
core     16-2.31.2                4206  stable    canonical  core,disabled
core     16-2.32.3                4407  stable    canonical  core,disabled
core     16-2.32.5                4486  stable    canonical  core
spotify  1.0.70.399.g5ffabd56-26  5     stable    spotify    disabled
spotify  1.0.72.117.g6bd7cc73-35  6     stable    spotify    disabled
spotify  1.0.77.338.g758ebd78-41  13    stable    spotify    -

Vous pouvez supprimer des révisions individuelles avec snap remove spotify --revision=5.

Ceci est sûr même pour les révisions désactivées de coreet d'autres dépendances, et snap removeavec un explicite --revision=...vous empêche même de supprimer les non- disabledsnaps.

Tomáš Gavenčiak
la source