Cara menghapus terkunci versi lama terpasang

65

Saya pemula dengan penggunaan snap, saya memiliki beberapa aplikasi yang diinstal pada sistem saya, sesuatu yang saya perhatikan ketika menjalankan perintah yang df -hsaya temukan terpasang versi berbeda dari snap yang sama

/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

pertanyaan saya adalah mengapa mereka tetap di sana, satu-satunya cara saya menemukan untuk menghapus yang lama adalah hapus dan instal kembali snap, ada sesuatu seperti prunemenjaga sistem saya?

rkmax
sumber

Jawaban:

84

Berikut ini skrip pendek yang akan menghapus semua versi terkunci lama. Ini hanya akan membuat versi aktif saat ini, yang akan memulihkan Anda beberapa ruang disk:

#!/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
sumber
Itu berhasil menghapus semua versi lama, tetapi tidak ada ruang yang ditambahkan ke disk saya!
mtoloo
Periksa dir /var/lib/snapd/snaps/sebelum dan sesudah menjalankan skrip ini. Seharusnya membebaskan beberapa ruang - jika benar-benar menghapus beberapa buncis. Seharusnya menampilkan pesan seperti snap-name removed, misalnya gtk-common-themes removed.
PeterM
Ada beberapa hardlink di /var/lib/snapd/cachejadi Anda harus menghapusnya juga untuk membebaskan ruang. Anda dapat menghapus cache dengan aman dengansudo rm /var/lib/snapd/cache/*
rubo77
42

Mulai dari snap 2.34 dan kemudian, Anda dapat mengatur jumlah maksimum revisi snap yang disimpan oleh sistem dengan mengatur opsi refresh.retain .

$ sudo snap set system refresh.retain=2 

Nilai refresh.retain hanya bisa berupa angka antara 2 dan 20 dan memiliki nilai default 3.

Mustapha Hadid
sumber
1
setelah melakukan ini, pindah dari default 3 ke pengaturan baru 2, kapan versi saat ini dibersihkan?
Tim Richardson
Saya pikir terkunci lama akan dibersihkan ketika versi baru diinstal. Seperti yang mungkin sudah Anda ketahui, pasang pembaruan aplikasi yang diinstal secara otomatis tergantung pada opsi refresh.timer, sehingga Anda tidak perlu melakukan pembaruan secara manual
Mustapha Hadid
Tetapi bagaimana cara memeriksa berapa banyak komputer saya butuhkan? Contoh: refresh.retain=3apakah baik untuk RAM 4Gb atau butuh lebih banyak?
Peter Krauss
1
@PeterKrauss Tergantung pada kapasitas perangkat penyimpanan Anda. Ini tidak ada hubungannya dengan kapasitas RAM Anda sama sekali.
Mustapha Hadid
30

Versi skrip dari jawaban lain , sebagai satu-baris, tanpa awkketergantungan:

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

Ini mungkin membutuhkan bashatau shell yang kompatibel dengan [[konstruk.

Gert van den Berg
sumber
6
Ini harus dijalankan dari pengguna yang dapat menambahkan buncis. Di Ubuntu Core, pengguna admin berfungsi, di Ubuntu normal, sudo -isesi mungkin diperlukan, atau snap removemungkin perlu dijalankan sudo.
Gert van den Berg
@ rubo77 menunjukkan bahwa itu mengasumsikan lokal Inggris. Menjalankannya dalam sub-shell (untuk tidak mengacaukan variabel env lokal shell utama) setelah melakukan export LC_ALL=en_US.UTF-8sebelumnya harus memastikan itu. (Ini juga dapat diatur sebelum perintah snap, tapi saya tidak yakin apakah penghapusan nanti mungkin perlu diterjemahkan juga)
Gert van den Berg
Cukup tambahkan LANG=c sebelum seluruh baris berfungsi dengan baik di konsol Jerman
rubo77
@ rubo77 Seharusnya benar-benar LANG=C(atau LC_ALL=C) untuk lokal default. Huruf kecil cmungkin berfungsi karena Cmenjadi default untuk lokal yang tidak valid. ( LC_MESSAGESkemungkinan pengaturan minimal) (Saya tidak ingin mengedit posting untuk pengaturan yang banyak pengguna tidak perlu ...) (Anda membandingkan kesalahan LANG=c localedengan LANG=C locale)
Gert van den Berg
17

Dokumen snapd pada versi menyatakan bahwa revisi yang sudah usang harus dihapus secara otomatis sehingga tidak lebih dari dua revisi terakhir diinstal. Namun, saya juga melihat lebih dari dua versi terkunci terpasang.

Anda dapat membuat daftar semua revisi snap list --alluntuk melihat sesuatu seperti:

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    -

Anda dapat menghapus setiap revisi dengan snap remove spotify --revision=5.

Ini aman bahkan untuk revisi yang dinonaktifkan coredan dependensi lainnya, dan snap removedengan eksplisit --revision=...bahkan mencegah Anda menghapus non- disabledterkunci.

Tomáš Gavenčiak
sumber