So entfernen Sie alte Version der installierten Snaps

65

Ich bin ein Neuling mit Snap-Nutzung, ich habe einige Apps auf meinem System installiert, was ich bemerke, wenn df -hich den Befehl ausführe, bei dem ich festgestellt habe, dass verschiedene Versionen desselben Snaps gemountet sind

/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

Meine Frage ist, warum sie dort bleiben. Der einzige Weg, den ich gefunden habe, um die alten zu entfernen, ist das Entfernen und erneute Installieren des Snaps. Gibt es so etwas wie pruneeine Wartung meines Systems?

rkmax
quelle

Antworten:

84

Hier ist ein kurzes Skript, das alle alten Versionen von Snaps entfernt. Dadurch wird nur die aktuell aktive Version beibehalten, wodurch Sie Speicherplatz wiederherstellen sollten:

#!/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
quelle
Alle alten Versionen wurden erfolgreich entfernt, aber es wird kein Speicherplatz auf meiner Festplatte hinzugefügt!
Mtoloo
Überprüfen Sie das Verzeichnis /var/lib/snapd/snaps/vor und nach dem Ausführen dieses Skripts. Sollte etwas Platz frei haben - wenn wirklich einige Druckknöpfe entfernt werden. Es sollte Nachrichten wie snap-name removedzB anzeigen gtk-common-themes removed.
PeterM
Es gibt einige Hardlinks, /var/lib/snapd/cachedaher müssen Sie diese ebenfalls löschen, um Speicherplatz freizugeben. Sie können den Cache mitsudo rm /var/lib/snapd/cache/*
rubo77
42

Ab Snap 2.34 können Sie die maximale Anzahl der vom System gespeicherten Snap-Revisionen festlegen, indem Sie die Option refresh.retain aktivieren .

$ sudo snap set system refresh.retain=2 

Der refresh.retain- Wert kann nur eine Zahl zwischen 2 und 20 sein und hat den Standardwert 3.

Mustapha Hadid
quelle
1
Wenn Sie danach von der Standardeinstellung 3 zu einer neuen Einstellung von 2 wechseln, werden die aktuellen Versionen gelöscht.
Tim Richardson
Ich denke, die alten Snaps werden gelöscht, wenn die neue Version installiert wird. Wie Sie vielleicht bereits wissen, werden installierte Apps abhängig von der Option refresh.timer automatisch aktualisiert, sodass Sie das Update nicht manuell durchführen müssen
Mustapha Hadid,
Aber wie überprüfe ich, wie viele mein Computer benötigt? Beispiel: refresh.retain=3ist gut für 4 GB RAM oder brauchen Sie mehr?
Peter Krauss
1
@PeterKrauss Das hängt von der Kapazität Ihres Speichergeräts ab. Es hat nichts mit Ihrer RAM-Kapazität zu tun.
Mustapha Hadid
30

Eine Version des Skripts aus einer anderen Antwort als Einzeiler ohne die awkAbhängigkeit:

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

Dies erfordert wahrscheinlich basheine kompatible Shell mit dem [[Konstrukt.

Gert van den Berg
quelle
6
Dies sollte von einem Benutzer ausgeführt werden, der Snaps hinzufügen kann. Auf Ubuntu Core funktioniert der Administrator, auf normalem Ubuntu ist sudo -imöglicherweise eine Sitzung erforderlich oder snap removemuss mit ausgeführt werden sudo.
Gert van den Berg
@ rubo77 wies darauf hin, dass es sich um ein englisches Gebietsschema handelt. Das Ausführen in einer Sub-Shell (um sich nicht mit den Umgebungsvariablen der Haupt-Shell herumzuärgern) nach vorheriger export LC_ALL=en_US.UTF-8Ausführung sollte dies sicherstellen. (Es kann auch vor dem Fangbefehl gesetzt werden, aber ich bin nicht sicher, ob die Entfernungen später möglicherweise auch übersetzt werden müssen)
Gert van den Berg
Einfach hinzufügen, LANG=c bevor die gesamte Zeile auf deutschen Konsolen
funktioniert
@ rubo77 Es sollte wahrscheinlich tatsächlich LANG=C(oder LC_ALL=C) für das Standardgebietsschema sein. Kleinbuchstaben cfunktionieren möglicherweise aufgrund Cder Standardeinstellung für ein ungültiges Gebietsschema. ( LC_MESSAGESist wahrscheinlich die minimale Einstellung) (Ich möchte den Beitrag nicht für eine Einstellung bearbeiten, die viele Benutzer jedoch nicht benötigen ...) (Sie vergleichen die Fehler LANG=c localemit LANG=C locale)
Gert van den Berg
17

In den snapd-Dokumenten zu Versionen wird angegeben, dass die veralteten Revisionen automatisch entfernt werden sollen, damit nicht mehr als die letzten beiden Revisionen installiert werden. Allerdings habe ich auch mehr als zwei Versionen meiner Snaps installiert.

Sie können alle Revisionen mit auflisten snap list --all, um Folgendes zu sehen:

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    -

Sie können einzelne Revisionen mit entfernen snap remove spotify --revision=5.

Dies ist sicher auch für Behinderte Revisionen coreund andere Abhängigkeiten, und snap removemit einem expliziten --revision=...auch verhindert , dass Sie nicht zu entfernen disabledschnappt.

Tomáš Gavenčiak
quelle