Ho problemi a riferirti alla documentazione, il che significa che o non ho ancora avuto il mio caffè (vero) o che ci manca della documentazione ( aggiornamento : alcuni documenti qui )
Quando si dichiarano app nella propria app snapcraft.yaml, si genera un wrapper binario generato al momento dell'installazione e inserito in /snap/bin/, chiamato in base al nome del pacchetto e dell'app (si noti che se l'app è un servizio, questo wrapper è invece un file systemd .service).
Tale wrapper contiene la maggior parte dell'ambiente in cui verrà eseguita l'applicazione. Le due variabili d'ambiente che sono più rilevanti per questa domanda sono SNAP_DATAe SNAP_USER_DATA.
SNAP_DATAè un'area scrivibile a livello di sistema (in /var/snap/). Questo potrebbe essere usato per ospitare registri per servizi, ad esempio.
SNAP_USER_DATAè un'area scrivibile specifica dell'utente nella home directory dell'utente che esegue l'applicazione (in particolare /home/<user>/snap/). Questo potrebbe essere usato per file di configurazione specifici dell'utente, ecc.
Entrambe queste directory sono molto importanti per la funzionalità di aggiornamento / rollback, dal momento che entrambe sono versionate . Cioè, ogni versione di un determinato snap ha la sua copia di queste directory. Lasciami spiegare con un esempio.
Supponi di aver installato la versione 1 dello snap "pippo". Ciò creerà due directory:
/var/snap/foo/1( SNAP_DATA)
/home/<user>/snap/foo/1( SNAP_USER_DATA)
Ora dì "foo" usa entrambi. Forse ha un servizio che ospita un database SNAP_DATAe un binario che usa i file di configurazione SNAP_USER_DATA.
Ora viene rilasciata la versione 2 di "pippo", che viene automaticamente aggiornata. La prima cosa che succede è che /var/snap/foo/1viene copiato /var/snap/foo/2e in cui /home/<user>/snap/foo/1viene copiato /home/<user>/snap/foo/2. Quindi viene attivata la nuova versione. Dovrebbe notare che è in esecuzione su vecchi dati e forse ha alcune migrazioni del database da eseguire sul database SNAP_DATA. Lo fa e se ne va.
Ora supponiamo che quelle migrazioni falliscano per qualsiasi motivo e che questa applicazione debba essere ripristinata. Inizia a utilizzare la vecchia versione dell'applicazione / snap / foo, dove SNAP_DATApuntava /var/snap/foo/1e SNAP_USER_DATApuntava /home/<user>/snap/foo/1. Questo raccoglie le cose sulla versione precedente nel punto precedente l'esecuzione delle migrazioni, dal momento che quelle operazioni venivano eseguite su una copia dei dati.
Per farla breve: non utilizzare l' homeinterfaccia per archiviare i dati in cui è possibile archiviare SNAP_DATAo SNAP_USER_DATA, poiché sono parte integrante della strategia di aggiornamento / rollback. Approfitta di loro!
AGGIORNAMENTO per v2.0.10:
Sono state inoltre introdotte due nuove directory di dati:
SNAP_COMMONsi trova a fianco SNAP_DATA, ma è specificamente non rivisto . Ogni revisione dello snap specifico ha accesso a questa directory, quindi non viene copiata al momento dell'aggiornamento / rollback, ecc. Potrebbe essere utilizzata per file particolarmente grandi e non controllati (ad es. Dati grezzi che non sono specifici della versione).
SNAP_USER_COMMONsi trova a fianco SNAP_USER_DATA, ma è di nuovo specificamente non visto . Potrebbe essere utilizzato per la memorizzazione di dati non specifici della versione per utente.
AGGIORNAMENTO per v2.15:
I file inseriti /snap/binnon sono più wrapper che definiscono l'ambiente, ma collegamenti simbolici a /usr/bin/snap. Quindi, il modo per determinare l'ambiente in cui viene eseguita un'applicazione sarebbe utilizzare snap run --shell <snap>.<app>, ad esempio:
$ 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_COMMONDir non viene creato automaticamente da snapd? Lo script di avvio in/snap/bin/non lo crea e la creazione manuale all'interno dello snap ha esito negativo (autorizzazione negata). L'esecuzionesnap run appcrea però quella cartella (ma il comando fallisce conexecv failed: No such file or directory... Non ho idea di come usare quel comando).