Sizi dokümantasyona yönlendirmekte sorun yaşıyorum, bu da kahvemi henüz almadım (doğru) veya bazı dokümantasyonu kaçırıyoruz ( güncelleme : burada bazı dokümantasyon )
Uygulamanızın içindeki uygulamaları bildirdiğinizde , paketiniz ve uygulama adınızdan sonra adlandırılan snapcraft.yaml
ve yüklendikten /snap/bin/
sonra yerleştirilen ve yerleştirildikten sonra bir ikili sarmalayıcı ortaya çıkar (sonuç, uygulama bir hizmet ise, bu paketleyicinin bir sistem. Hizmet dosyası olduğunu unutmayın).
Bu sarıcı, uygulamanın çalışacağı ortamın çoğunu içerir. Bu soruyla en alakalı iki ortam değişkeni SNAP_DATA
ve SNAP_USER_DATA
.
SNAP_DATA
sistem genelinde yazılabilir bir alandır (in /var/snap/
). Bu, örneğin hizmetler için günlükleri barındırmak için kullanılabilir.
SNAP_USER_DATA
(özellikle /home/<user>/snap/
) uygulamayı çalıştıran kullanıcının giriş dizinindeki kullanıcıya özgü bir yazılabilir alandır . Bu, kullanıcıya özel yapılandırma dosyaları vb. İçin kullanılabilir.
Bunların her ikisi de, çünkü bu dizinlerin Hem yükseltme / geri alma işlevselliği için çok önemli sürüm . Başka bir deyişle, belirli bir ekin her sürümünün bu dizinlerin kendi kopyası vardır. Bir örnekle açıklayayım.
Diyelim ki "foo" ekinin 1. sürümünü yükleyin. Bu iki dizin yaratacaktır:
/var/snap/foo/1
( SNAP_DATA
)
/home/<user>/snap/foo/1
( SNAP_USER_DATA
)
Şimdi "foo" nun ikisini de kullandığını söyleyin. Belki bir veritabanını barındıran bir servisi SNAP_DATA
ve config dosyalarını kullanan bir ikiliyi vardır SNAP_USER_DATA
.
Şimdi "foo" nin 2. sürümü yayınlandı ve otomatik olarak güncelleniyor. Olan ilk şey /var/snap/foo/1
, kopyalanacak /var/snap/foo/2
ve /home/<user>/snap/foo/1
kopyalanacak /home/<user>/snap/foo/2
. Sonra yeni sürüm ateşlenir. Eski veriler üzerinde çalıştığını fark etmeli ve belki de veritabanında çalıştırılacak bazı veritabanı taşıma işlemlerine sahip SNAP_DATA
. Bunu yapar ve uzaklara gider.
Şimdi, bu göçlerin ne nedenle olursa olsun başarısız olduğunu ve bu uygulamanın geri alınması gerektiğini söyleyin. Bu / geçmeli / foo uygulamasının, eski bir sürümünü kullanıyor başlar SNAP_DATA
işaret edildi /var/snap/foo/1
ve SNAP_USER_DATA
işaret edildi /home/<user>/snap/foo/1
. Bu işlem, geçişlerin çalıştırılmasından önceki noktada eski sürümden bir şeyler alır, çünkü bu işlemler verilerin bir kopyası üzerinde gerçekleştirilir.
Kısa Uzun hikaye: kullanmayan home
veri depolamak sen saklamak olabilir arayüzü SNAP_DATA
ya SNAP_USER_DATA
da yükseltme / geri alma stratejisinin ayrılmaz bir parçası olduğuna göre,. Onlardan yararlanın!
V2.0.10 için GÜNCELLEME:
İki yeni veri dizini de tanıtıldı:
SNAP_COMMON
yanına oturur SNAP_DATA
, ancak özellikle terstir . Özel ekin her revizyonu bu dizine erişebilir, bu nedenle yükseltme / geri alma vb. İşlemlerde kopyalanmaz. Bu, özellikle büyük, çevrilmemiş dosyalar için (örneğin, gerçekten sürüme özgü olmayan ham veriler) kullanılabilir.
SNAP_USER_COMMON
yanına oturur SNAP_USER_DATA
, ancak yine spesifik olarak ele alınmaz . Kullanıcı başına sürüme özgü olmayan verileri depolamak için kullanılabilir.
V2.15 için GÜNCELLEME:
/snap/bin
İçine yerleştirilen dosyalar artık çevreyi tanımlayan sarmalayıcılar değil, aynı zamanda işaretler /usr/bin/snap
. Dolayısıyla, bir uygulamanın çalıştığı ortamı belirleme yöntemi snap run --shell <snap>.<app>
örneğin;
$ 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 snapd tarafından otomatik oluşturulan? İçindeki başlatıcı betiği/snap/bin/
onu oluşturmaz ve bunu çırpıda içinde el ile oluşturmak başarısız olur (izin reddedildi). Çalıştırmaksnap run app
bu klasörü yaratıyor, ancak (ancak komut başarısız oluyorexecv failed: No such file or directory
... Bu komutu nasıl kullanacağımı bilmiyorum).