Pindahkan paket snap ke lokasi / direktori lain

13

Saya ingin memindahkan paket snap yang diinstal ke direktori home. Paket snap sedikit lebih besar dari paket deb sehingga mereka mengambil ruang di partisi root saya. Saya tahu paket berada di /var/lib/snapd/snapsdan mereka bekerja dengan memasang paket ke /snap/app_dir. Saya mencoba untuk terhubung, tetapi tidak berhasil.

ultimatex
sumber

Jawaban:

14

Ubah direktori instalasi terkunci

Ini adalah masalah umum yang banyak diminta. Sepertinya pengembang jepret tidak bermaksud menyelesaikannya segera, jadi beberapa solusi disarankan.

Solusi pertama yang sangat ditolak oleh masyarakat, tetapi saya tidak mencoba, adalah dengan menggunakan tautan simbolis untuk menghubungkan direktori yang mengarah ke buncis. Metode ini tampaknya tidak berfungsi karena balasan komunitas mengatakan bahwa apparmom tidak bekerja dengan tautan simbolik.

Solusi kedua adalah mount --binddirektori /val/lib/snapd/snapsyang berfungsi baik bagi saya dengan aplikasi yang sudah diinstal tetapi gagal menginstal aplikasi baru karena saya memindahkan direktori ke partisi lain. Itu memberi saya kesalahan tentang menghubungkan aplikasi snap dengan direktori cache yang terletak di /var/lib/snapd/cache. Saya tidak tahu apakah solusi ini dapat berfungsi jika lokasi berada di partisi yang sama atau tidak; tapi ini adalah alasan mengapa saya memindahkan direktori snap untuk membebaskan beberapa ruang dari partisi ke yang lain.

Opsi ketiga dan yang berfungsi adalah memindahkan /var/lib/snapddirektori secara keseluruhan kemudian mount --bindke direktori itu dari lokasi lain dan itu berhasil untuk saya dan berikut adalah langkah-langkahnya.

Hanya sebuah catatan kecil, Anda sudah tahu, setelah rsync dilakukan pada langkah-langkah di bawah ini, Anda dapat membuat cadangan data di dalam /var/lib/snapdke lokasi lain sampai seluruh proses berhasil dilakukan maka Anda dapat menghapus data cadangan jika Anda ingin membebaskan lebih banyak ruang.

##############################################################################
# Take Care this section may break the System !!!
##############################################################################
##Move snap folder to Home instead of root.
#Create the directory : you can change the location
mkdir /home/$USER/snap/snapd

#Copy the data
sudo rsync -avzP /var/lib/snapd/  /home/$USER/snap/snapd/

#Do backups
sudo mv /var/lib/snapd /var/lib/snapd.bak
sudo cp /etc/fstab /etc/fstab.bak

#Change fstab (Change $USER with your name or change the path totally)
echo "/home/$USER/snap/snapd /var/lib/snapd none bind 0 0" | sudo tee -a /etc/fstab

#remount fstab Or reboot.
sudo mkdir /var/lib/snapd
sudo mount -a

if ls  /var/lib/snapd/ | grep snaps
then
    echo "Re-mounting snapd folder is done successfully. !!!!"
    sudo rm -rf /var/lib/snapd.bak
else
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "

    # Trying to revert automatically
    sudo cp /etc/fstab.bak /etc/fstab

    sudo mount -a
    sudo umount /var/lib/snapd

    sudo mv /var/lib/snapd.bak /var/lib/snapd

    echo "Files located at ~/snap/snapd should be removed, but it keeped for
    recovery until you ,manually, reboot the system and make sure the service
    is running correctly then manually you can remove that folder ~/snap/snapd
    !!!!!!!!!!!!!!, you should do that manually."

fi
##############################################################################
# Take Care the pervious section may break the System !!!
##############################################################################

Referensi

  1. Lokasi disk khusus untuk masalah terkunci tertentu
  2. ask ubuntu Question (Bukan solusi terbaik) Tautan
  3. Saran untuk menggunakan bind mount sebagai ganti tautan simbolik dalam memindahkan direktori snap Link
  4. Perbedaan antara bind mount dan link simbolik link
  5. Buat bind mount permenant
Muhammad Yusuf
sumber
1
Bekerja bagus untukku. Terima kasih! Saya hanya perlu (kembali) membuat direktori / var / lib / snapd setelah memindahkannya ke .bak agar mount -a berfungsi
Salim
@ Salim, Anda benar, saya telah melewatkan langkah ini yang akan saya tambahkan ke skrip
Muhammad Yusuf
11

Saya akhirnya menemukan jalan.

  • Pertama-tama pindahkan paket snap ke lokasi yang diinginkan. Biarkan snap_app.snapsebagai aplikasi yang ingin Anda pindahkan. Pindahkan paket dari /var/lib/snapd/snaps/snap_app.snapke ~/snaps/snap_app.snap.
  • Maka Anda harus mengubah opsi mount /etc/systemd/system/snap-snap_app-90.mount, nomor dalam nama file mungkin bervariasi. Ini memiliki arahan di What=/snap_app_loactionbawah [Mount]. Ubah ke lokasi paket snap baru Anda.
  • Akhirnya Anda harus symlink paket snap ke /var/lib/snapd/snaps/.
    Ex: ln -s ~/snaps/snap_app.snap /var/lib/snapd/snaps/snap_app.snap

Paket snap awalnya di-mount ke /snap/snap_appdirektori. Anda dapat memeriksanya mount. Nyalakan ulang mesin Anda dan Anda semua selesai.

ultimatex
sumber
forum.snapcraft.io/t/… juga dapat membantu
Adam Monsen