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


65

私はスナップの使用に慣れていない、システムにインストールされているアプリがほとんどない、コマンド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です、私のシステムを維持するようなものがありますか?


回答:


84

古いバージョンのスナップをすべて削除する短いスクリプトを次に示します。これにより、現在のアクティブバージョンのみが保持され、ディスク領域が回復します。

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

古いバージョンはすべて正常に削除されましたが、ディスクにスペースは追加されません!
mtoloo

/var/lib/snapd/snaps/このスクリプトを実行する前後にdirを確認してください。いくつかのスペースを解放する必要があります-本当にいくつかのスナップを削除した場合。snap-name removed例えばのようなメッセージが表示されるはずgtk-common-themes removedです。
PeterM

いくつかのハードリンクがあり/var/lib/snapd/cacheますので、それらを削除してスペースを空ける必要があります。あなたは安全にキャッシュを削除することができますsudo rm /var/lib/snapd/cache/*
rubo77

42

スナップ2.34以降では、refresh.retainオプションを設定することにより、システムに保存されるスナップのリビジョンの最大数を設定できます。

$ sudo snap set system refresh.retain=2 

refresh.retainの値は、2と20の間の数であること、および3のデフォルト値を有することができます。


1
これを行った後、デフォルトの3から2の新しい設定に移動して、現在のバージョンはいつ消去されますか?
ティムリチャードソン

新しいバージョンがインストールされると、古いスナップは削除されると思います。あなたはすでに知っているかもしれませんが、手動でアップデートを行う必要はありませんので、更新は、refresh.timerオプションに応じて、自動的にアプリケーションをインストールスナップ
ムスタファ・ハディド

しかし、私のコンピューターに必要な数を確認するにはどうすればいいですか?例:refresh.retain=34Gb RAMに適していますか?
ピータークラウス

1
@PeterKraussストレージデバイスの容量に依存します。RAMの容量とは何の関係もありません。
ムスタファハディド

30

別の回答からスクリプトのバージョン、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は、[[コンストラクトと互換性のあるシェルが必要な場合があります。


6
これは、スナップを追加できるユーザーから実行する必要があります。Ubuntu Coreでは、adminユーザーが機能します。通常のUbuntuでは、sudo -iセッションが必要な場合があります。または、snap removeで実行する必要がありますsudo
ゲルトファンデンバーグ

@ rubo77は、英語ロケールを想定していることを指摘しました。export LC_ALL=en_US.UTF-8事前に実行した後、サブシェルで実行すると(メインシェルのロケールenv変数を台無しにしないように)、それを保証する必要があります。(snapコマンドの前に設定することもできますが、後で削除する場合も翻訳する必要があるかどうかわかりません)
Gert van den Berg

LANG=c ドイツのコンソールで行全体が正常に機能する前に追加してください
rubo77

@ rubo77 デフォルトのロケールでは、実際にLANG=C(またはLC_ALL=C)になっているはずです。無効なロケールのデフォルトであるため、小文字cが機能Cする場合があります。(LC_MESSAGES(あなたがのエラーを比較する(私は編集に多くのユーザーがかかわら必要がないこと設定のためのポストをしたくない...)そう、最小限の設定である)LANG=c localeとをLANG=C locale
ゲルトファンデンベルグ

17

バージョンのsnapdドキュメント時代遅れのリビジョンが自動的に最後の二つのリビジョンを超えないように除去されなければならないという状態がインストールされています。ただし、スナップの3つ以上のバージョンがインストールされていることも確認しました。

snap list --all次のようなすべてのリビジョンを一覧表示できます。

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    -

を使用して個々のリビジョンを削除できsnap remove spotify --revision=5ます。

これは、無効にされたリビジョンcoreや他の依存関係に対しても安全でありsnap remove、明示的に--revision=...すれば、非disabledスナップを削除することさえできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.