Saya mengalami kesulitan mengarahkan Anda ke dokumentasi, yang berarti saya belum minum kopi (benar) atau kami kehilangan beberapa dokumentasi ( pembaruan : beberapa dokumentasi di sini )
Ketika Anda mendeklarasikan aplikasi di Anda snapcraft.yaml
, itu menghasilkan pembungkus biner yang dihasilkan setelah menginstal dan ditempatkan ke dalam /snap/bin/
, dinamai setelah paket dan nama aplikasi Anda (perhatikan bahwa jika aplikasi adalah layanan, pembungkus ini bukan file systemd .service).
Wrapper itu berisi sebagian besar lingkungan tempat aplikasi akan berjalan. Dua variabel lingkungan yang paling relevan dengan pertanyaan ini adalah SNAP_DATA
dan SNAP_USER_DATA
.
SNAP_DATA
adalah area yang dapat ditulisi di seluruh sistem /var/snap/
. Ini dapat digunakan untuk meng-host log untuk layanan, misalnya.
SNAP_USER_DATA
adalah area yang dapat ditulis khusus pengguna di direktori home pengguna yang menjalankan aplikasi (khusus /home/<user>/snap/
). Ini dapat digunakan untuk file konfigurasi khusus pengguna, dll.
Kedua direktori ini sangat penting untuk fungsi upgrade / rollback, karena keduanya versi . Artinya, setiap versi snap yang diberikan memiliki salinannya sendiri dari direktori ini. Izinkan saya menjelaskan dengan sebuah contoh.
Katakanlah Anda menginstal versi 1 dari snap "foo". Itu akan membuat dua direktori:
/var/snap/foo/1
( SNAP_DATA
)
/home/<user>/snap/foo/1
( SNAP_USER_DATA
)
Sekarang katakan "foo" menggunakan keduanya. Mungkin ia memiliki layanan yang meng-host database SNAP_DATA
, dan biner yang menggunakan file config SNAP_USER_DATA
.
Sekarang versi 2 dari "foo" dirilis, dan secara otomatis diperbarui. Hal pertama yang terjadi adalah yang /var/snap/foo/1
disalin ke /var/snap/foo/2
dan /home/<user>/snap/foo/1
disalin ke /home/<user>/snap/foo/2
. Kemudian versi baru dinyalakan. Seharusnya memperhatikan bahwa itu berjalan pada data lama, dan mungkin ia memiliki beberapa migrasi basis data untuk dijalankan ke basis data SNAP_DATA
. Itu melakukan itu, dan pergi begitu saja.
Sekarang katakanlah migrasi tersebut gagal karena alasan apa pun, dan aplikasi ini harus dibatalkan. Itu mulai menggunakan versi lama dari aplikasi / snap / foo, di mana SNAP_DATA
menunjuk /var/snap/foo/1
dan SNAP_USER_DATA
menunjuk ke /home/<user>/snap/foo/1
. Ini mengambil hal-hal pada versi lama pada titik sebelum migrasi dijalankan, karena operasi itu dijalankan pada salinan data.
Singkat cerita: jangan gunakan home
antarmuka untuk menyimpan data yang dapat Anda simpan SNAP_DATA
atau SNAP_USER_DATA
, karena mereka merupakan bagian integral dari strategi upgrade / rollback. Manfaatkan mereka!
PEMBARUAN untuk v2.0.10:
Dua direktori data baru juga diperkenalkan:
SNAP_COMMON
duduk di samping SNAP_DATA
, tetapi secara khusus tidak berversi . Setiap revisi snap spesifik memiliki akses ke direktori ini, jadi itu tidak disalin pada saat upgrade / rollback dll. Ini dapat digunakan untuk file besar yang tidak berversi (misalnya data mentah yang tidak benar-benar versi-spesifik).
SNAP_USER_COMMON
duduk di samping SNAP_USER_DATA
, tetapi sekali lagi khusus tidak berversi . Ini dapat digunakan untuk menyimpan data non-versi-spesifik per pengguna.
PEMBARUAN untuk v2.15:
File yang ditempatkan di dalamnya /snap/bin
bukan lagi pembungkus yang menentukan lingkungan, tetapi symlinks ke /usr/bin/snap
. Jadi cara untuk menentukan lingkungan tempat aplikasi berjalan akan digunakan snap run --shell <snap>.<app>
, misalnya:
$ sudo snap install hello-world
$ snap run --shell hello-world
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
$ env | grep SNAP
SNAP_USER_COMMON=/home/kyrofa/snap/hello-world/common
SNAP_REEXEC=
SNAP_LIBRARY_PATH=/var/lib/snapd/lib/gl:
SNAP_COMMON=/var/snap/hello-world/common
SNAP_USER_DATA=/home/kyrofa/snap/hello-world/27
SNAP_DATA=/var/snap/hello-world/27
SNAP_REVISION=27
SNAP_NAME=hello-world
SNAP_ARCH=amd64
SNAP_VERSION=6.3
SNAP=/snap/hello-world/27
SNAP_USER_COMMON
dir dibuat secara otomatis oleh snapd? Skrip peluncur di/snap/bin/
tidak membuatnya, dan membuatnya secara manual di dalam snap gagal (izin ditolak). Menjalankansnap run app
menciptakan folder itu, meskipun (tetapi perintah gagal denganexecv failed: No such file or directory
... Saya tidak tahu bagaimana menggunakan perintah itu).snap run
digunakan).