Estou tendo problemas para encaminhá-lo para a documentação, o que significa que ainda não tomei meu café (verdadeiro) ou estamos perdendo alguma documentação ( atualização : alguma documentação aqui )
Quando você declara aplicativos no seu snapcraft.yaml, isso resulta em um invólucro binário sendo gerado na instalação e colocado no /snap/bin/nome do pacote e nome do aplicativo (observe que, se o aplicativo for um serviço, esse invólucro será um arquivo systemd .service).
Esse wrapper contém a maior parte do ambiente sob o qual o aplicativo será executado. As duas variáveis de ambiente mais relevantes para esta questão são SNAP_DATAe SNAP_USER_DATA.
SNAP_DATAé uma área gravável em todo o sistema (pol /var/snap/). Isso pode ser usado para hospedar logs de serviços, por exemplo.
SNAP_USER_DATAé uma área gravável específica do usuário no diretório inicial do usuário que está executando o aplicativo (especificamente /home/<user>/snap/). Isso pode ser usado para arquivos de configuração específicos do usuário, etc.
Ambos os diretórios são muito importantes para a funcionalidade de atualização / reversão, pois os dois são versionados . Ou seja, cada versão de um determinado snap possui sua própria cópia desses diretórios. Deixe-me explicar com um exemplo.
Digamos que você instale a versão 1 do snap "foo". Isso criará dois diretórios:
/var/snap/foo/1( SNAP_DATA)
/home/<user>/snap/foo/1( SNAP_USER_DATA)
Agora diga "foo" usa os dois. Talvez ele tenha um serviço que hospeda um banco de dados SNAP_DATAe um binário que usa arquivos de configuração SNAP_USER_DATA.
Agora a versão 2 do "foo" é lançada e atualizada automaticamente. A primeira coisa que acontece é que /var/snap/foo/1é copiado /var/snap/foo/2e /home/<user>/snap/foo/1copiado /home/<user>/snap/foo/2. Em seguida, a nova versão é acionada. Observe que está sendo executado em dados antigos e talvez tenha algumas migrações de banco de dados para executar no banco de dados SNAP_DATA. Faz isso, e vai embora.
Agora diga que essas migrações falham por qualquer motivo, e esse aplicativo precisa ser revertido. Ele começa a usar a versão antiga do aplicativo / snap / foo, onde SNAP_DATAestava apontando /var/snap/foo/1e SNAP_USER_DATAapontando /home/<user>/snap/foo/1. Isso acompanha a versão antiga no momento anterior à execução das migrações, pois essas operações foram executadas em uma cópia dos dados.
Para encurtar a história: não use a homeinterface para armazenar dados que você pode armazenar SNAP_DATAou SNAP_USER_DATA, pois eles são parte integrante da estratégia de atualização / reversão. Aproveite-os!
ATUALIZAÇÃO para v2.0.10:
Dois novos diretórios de dados também foram introduzidos:
SNAP_COMMONfica ao lado SNAP_DATA, mas é especificamente não versionado . Toda revisão do snap específico tem acesso a esse diretório, portanto ele não é copiado na atualização / reversão, etc. Isso pode ser usado para arquivos particularmente grandes e não versionados (por exemplo, dados brutos que não são realmente específicos da versão).
SNAP_USER_COMMONfica ao lado SNAP_USER_DATA, mas é novamente especificamente não versionado . Pode ser usado para armazenar dados não específicos da versão por usuário.
ATUALIZAÇÃO para v2.15:
Os arquivos colocados dentro /snap/binnão são mais wrappers que definem o ambiente, mas links simbólicos para /usr/bin/snap. Portanto, a maneira de determinar o ambiente em que um aplicativo é executado seria usar snap run --shell <snap>.<app>, por exemplo:
$ 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 não está sendo criado automaticamente pelo snapd? O script do iniciador/snap/bin/não o cria e a criação manual dentro do snap falha (permissão negada). A execuçãosnap run appcria essa pasta, no entanto (mas o comando falha comexecv failed: No such file or directory... eu não tenho idéia de como usar esse comando).