Como posso iterar mais rapidamente ao criar um snap?

10

Estou trabalhando em um snap de um software maior e construindo o snap, removendo o antigo, instalando o novo e demorando muito tempo.

Gostaria de repetir a criação do snap e testar as coisas mais rapidamente. Eu sei que o snap cria muito bem, agora estou interessado em testar coisas como iniciar o aplicativo e sua integração. Existe uma maneira de fazer isso?

dholbach
fonte

Respostas:

8

Prefácio

Uma maneira de fazer isso é usar snap try. Da sua --helpmensagem:

The try command installs an unpacked snap into the system for testing
purposes. The unpacked snap content continues to be used even after 
installation, so non-metadata changes there go live instantly. Metadata
changes such as those performed in snap.yaml will require reinstallation 
to go live.

Ele também vem com uma opção:

--devmode     Install in development mode and disable confinement

Isso é particularmente útil se você deseja testar os bits de confinamento e obter o uso correto das interfaces.

Uso

A maneira de usar isso é simples, basta executar:

snapcraft prime
snap try prime/

Na primeira etapa, você diz snapcraftpara fazer o

Final copy and preparation for the snap.

E na segunda etapa snapdfaz uso do conteúdo do diretório para "instalar" o snap. Agora você pode brincar com o pacote enquanto ainda pode fazer alterações nele.

Exemplo

Vamos usar um exemplo do Snappy Playpen para mostrar como usar isso.

Estamos usando o consul, pois é relativamente rápido criar e usar:

$ git clone https://github.com/ubuntu/snappy-playpen
$ cd snappy-playpen/consul/
snappy-playpen/consul$ snapcraft prime
Preparing to pull consul 
[...]
Staging consul 
Priming consul 
snappy-playpen/consul$ 

Agora, verifique se não temos outra versão instalada e, em seguida, prossiga com a instalação.

snappy-playpen/consul$ which consul
snappy-playpen/consul$ snap try prime

Name    Version  Rev  Developer  Notes
consul  0.6.4    x1              try
snappy-playpen/consul$ consul --help
usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    agent          Runs a Consul agent
[...]
snappy-playpen/consul$ 

Por enquanto, tudo bem. Parece funcionar muito bem. Agora vamos substituí-lo por /bin/echoapenas para ver como as coisas funcionam:

snappy-playpen/consul$ cp /bin/echo prime/bin/consul 
snappy-playpen/consul$ consul --help
Usage: /snap/consul/x1/bin/consul [SHORT-OPTION]... [STRING]...
   or:  /snap/consul/x1/bin/consul LONG-OPTION
Echo the STRING(s) to standard output.
[...]
daniel@daydream:/tmp/test/snappy-playpen/consul$  

Como você pode ver, podemos fazer alterações no sistema primeativo enquanto ainda executamos as coisas sob confinamento. Geralmente, é uma boa maneira de colocar o snap em funcionamento e totalmente testado rapidamente.

Nota: Com snapdantes de 2.0.10 (2016/07/09), você tinha que temove o snap antes de executar snapcraft cleanou snapdiria entrar em um estado ruim e lamentar sobre ser incapaz de encontrar snaps montados. Mais algumas correções estão alinhadas para a versão 2.0.11, que também deve chegar em alguns dias.

dholbach
fonte
1
Você pode mencionar que o snap deve ser removido antes que um seja executado snapcraft cleanou que o snapd atualmente entre em um estado ruim e lamenta a impossibilidade de encontrar snaps montados. A correção está em andamento para isso, mas ainda não foi lançada.
Kyle
Agradável! Adicionando as informações agora.
dholbach
1
Sim, 'snap try' é exatamente para esse caso de uso. Ele permite que você crie um diretório e construa seu snap nele, sem ter que continuar fazendo os squashfs e remontá-lo. Você itera apenas trabalhando nesse diretório (você efetivamente tem um snap de leitura e gravação) até ficar satisfeito e, em seguida, cria os squashfs fora desse diretório.
Mark Shuttleworth