Cómo eliminar la versión anterior de las instantáneas instaladas

65

Soy novato con el uso instantáneo, tengo pocas aplicaciones instaladas en mi sistema, algo que noté cuando ejecuté el comando df -hque encontré montadas en diferentes versiones del mismo complemento

/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

mi pregunta es por qué se mantienen allí, la única forma en que encontré para eliminar el viejo es eliminar e instalar nuevamente el complemento, ¿hay algo como prunemantener mi sistema?

rkmax
fuente
2
Esto puede adaptarse mejor en Ask Ubuntu, que ya contiene varios duplicados: el sistema mantiene paquetes Snap más antiguos , ¿Cómo eliminar
phuclv

Respuestas:

84

Aquí hay una secuencia de comandos corta que eliminará todas las versiones antiguas de las instantáneas. Esto solo mantendrá la versión activa actual, que debería recuperar algo de espacio en disco:

#!/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
papa
fuente
¡Eliminó con éxito todas las versiones anteriores, pero no se agregó espacio a mi disco!
mtoloo
Verifique el directorio /var/lib/snapd/snaps/antes y después de ejecutar este script. Debería haber liberado algo de espacio, si realmente eliminó algunas instantáneas. Debería mostrar mensajes como snap-name removed, por ejemplo gtk-common-themes removed.
PeterM
Hay algunos enlaces duros, por /var/lib/snapd/cachelo que debe eliminarlos también para liberar espacio. Puede eliminar el caché de forma segura consudo rm /var/lib/snapd/cache/*
rubo77
42

A partir de snap 2.34 y posterior, puede establecer el número máximo de revisiones de snap almacenadas por el sistema configurando la opción refresh.retain .

$ sudo snap set system refresh.retain=2 

El valor de refresh.retain solo puede ser un número entre 2 y 20 y tiene un valor predeterminado de 3.

Mustapha Hadid
fuente
1
después de hacer esto, pasando del 3 predeterminado a una nueva configuración de 2, ¿cuándo se purgan las versiones actuales?
Tim Richardson el
Creo que las instantáneas antiguas se eliminarán cuando se instale una nueva versión. Como ya sabrá, las actualizaciones instaladas de forma automática las aplicaciones instaladas dependiendo de la opción refresh.timer, para que no tenga que hacer la actualización manualmente
Mustapha Hadid
¿Pero cómo verificar cuántos necesita mi computadora? Ejemplo: ¿ refresh.retain=3es bueno para 4 Gb de RAM o necesita más?
Peter Krauss
1
@ PeterKrauss Depende de la capacidad de su dispositivo de almacenamiento. No tiene nada que ver con su capacidad de RAM en absoluto.
Mustapha Hadid
30

Una versión de la secuencia de comandos de otra respuesta , como una línea, sin la awkdependencia:

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

Esto probablemente requiere basho un shell compatible con la [[construcción.

Gert van den Berg
fuente
66
Esto debe ejecutarse desde un usuario que pueda agregar instantáneas. En Ubuntu Core, el usuario administrador trabaja, en Ubuntu normal, sudo -ipodría ser necesaria una sesión o podría ser necesario snap removeejecutarla sudo.
Gert van den Berg
@ rubo77 señaló que asume una configuración regional en inglés. Ejecutarlo en un sub-shell (para no meterse con las variables de entorno local del shell principal) después de hacerlo de export LC_ALL=en_US.UTF-8antemano debería asegurar eso. (También se puede configurar antes del comando de ajuste, pero no estoy seguro de si las eliminaciones posteriores también deberían ser traducidas)
Gert van den Berg
Solo agregue LANG=c antes de que toda la línea funcione bien en consolas alemanas
rubo77
@ rubo77 Probablemente debería ser LANG=C(o LC_ALL=C) para la configuración regional predeterminada. Las minúsculas cpodrían funcionar debido a que Ces el valor predeterminado para una configuración regional no válida. ( LC_MESSAGESes probable que sea la configuración mínima) (No quiero editar la publicación para una configuración que muchos usuarios no necesitan ...) (Compara los errores de LANG=c localecon LANG=C locale)
Gert van den Berg
17

Los documentos de Snapd en las versiones indican que las revisiones desactualizadas deben eliminarse automáticamente para que no se instalen más que las dos últimas revisiones. Sin embargo, también vi más de dos versiones de mis instantáneas instaladas.

Puede enumerar todas las revisiones con snap list --allpara ver algo como:

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    -

Puede eliminar revisiones individuales con snap remove spotify --revision=5.

Esto es seguro incluso para las revisiones deshabilitadas corey otras dependencias, y snap removecon un valor explícito --revision=...incluso evita que elimine los no disabledsnaps.

Tomáš Gavenčiak
fuente