インストールされたスナップの古いバージョンを削除する方法

インストールされたスナップの古いバージョンを削除する方法

私はスナップの使用に慣れておらず、システムにインストールされているアプリもほとんどありません。コマンドを実行すると、df -h同じスナップの異なるバージョンがマウントされていることに気づきました。

/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

私の疑問は、なぜそれらがそこに残っているのかということです。古いものを削除する唯一の方法は、スナップを取り外して再度取り付けることです。

pruneシステムをメンテナンスするようなものはありますか?

答え1

削除する短いスクリプトは次のとおりです全て古いバージョンのスナップ。これにより、現在アクティブなバージョンのみが保持され、ディスク領域がいくらか回復されるはずです。

#!/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

「スナップを閉じる」は、更新前にアプリケーションを再起動していない可能性があるために存在します。そのため、スクリプトによって削除されるリビジョンを実際に実行している可能性があります。

答え2

のバージョン別の回答からのスクリプト依存関係のないワンライナーとしてawk:

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

これには、おそらくbash、またはその構造と互換性のあるシェルが必要です[[

答え3

snap v2.34以降では、オプションを設定することで、各パッケージに保存されるsnapリビジョンの最大数を設定できますrefresh.retain。これは数値のみです。2から20の間そしてデフォルト値 3

sudo snap set system refresh.retain=2 

答え4

コード@popeyが回答を共有しました実際には、壊れたパッケージの中にはバージョン情報がないものもあるため、失敗することがあります。そこで、これを克服するためにコードを変更しました。

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

snapsToRemove=$(LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $2, $3}')

while read snapname version revision; do
    if [[ "$revision" == *[a-zA-z]* ]]; then
        # Version field is empty. Revision is in second field
        revision=$version
    fi
        snap remove "$snapname" --revision="$revision"
done <<< $snapsToRemove

関連情報