Qual é a maneira correta de definir o comando de execução para um Snap?

1

Depois de ler o " tutorial de snap ao edifício " e verificar o documentação , outros tutoriais e alguns exemplos , eu ainda estou confuso sobre como funciona a seção de comando no .yaml para os snaps, ou melhor dizendo, como eu posso invocar o snap.

Alguns dos tutoriais usam apenas "command: example" e rodam o snap digitando "example", outros usam "command: bin / example" ou até mesmo "command: bin / example.sh".

Eu entendo que eles estão apontando para a pasta onde o arquivo executável está localizado, então eu fiz o mesmo com o meu .yaml tentando acessar e executar o jar que executa o daemon:

apps:
  daemon-test:
    command: java -cp $SNAP/basic-project-0.0.1-SNAPSHOT.jar es.ramadorp.odm.snapcraft.test.daemon.Daemontest
    restart-condition: always 
    daemon: simple

Mas quando digito "daemon-test" ou "name-snap.daemon-test" recebo o prompt "command not found". Indo além de resolver meu problema (o que é ótimo), tenho algumas perguntas:

  • Por que a pasta bin em "command"? é autogerado por snapcraft? é obrigatório em alguns casos específicos?
  • Por que às vezes você precisa de um .sh e outros precisam apenas escrever um nome para executar o snap?
  • Quando você precisa escrever apenas a palavra no comando e quando você precisa escrever o nome-snap.command-word?
  • Quando você precisa apontar para um "arquivo executável" e quando não é necessário, apenas uma palavra?

PD: Estou apontando corretamente para o meu jar executável? Eu também tentei adicionar a rota para a pasta / prime / jar / mas nada.

    
por Poor-Man 28.04.2017 / 13:26

1 resposta

3

Os snapshots estritamente confinados normalmente não podem "ver" pastas fora do snap propriamente dito e de alguns outros locais. Existem variáveis de ambiente que apontam para as mais importantes.

Quando o snap é iniciado, o caminho é configurado corretamente para encontrar binários localizados em $ SNAP / bin, no entanto, ele não verá as coisas fora do snap, como por exemplo (no seu caso) o Java Runtime. Neste caso, você deve agrupar o jvm relevante para sua aplicação.

Isso pode ser conseguido com: -

stage-packages: - openjdk-8-jre-headless

ou adicionando uma peça contendo o Oracle JRE, descompactado e colocado em um local relevante. Por exemplo, se você tivesse uma pasta chamada jre1.8.0_112 contendo o Oracle JRE, você poderia ter uma parte como: -

jbidwatcher: plugin: dump source: ./ organize: 'jre1.8.0_112': usr/lib/jvm/

Em seguida, você pode definir export JAVA_HOME=$SNAP/usr/lib/jvm antes da execução do seu programa. Você também pode querer ter um script 'wrapper' que seja removido em $SNAP/bin , o que configura as variáveis de ambiente acima e outras exigidas pelo seu aplicativo. Ele também pode conter a longa linha de comando, assim: -

apps: myjavaapp: command: $SNAP/usr/bin/launch_myjavaapp plugs: - network

Com uma linha na parte acima para colocar o script no lugar certo: -

jbidwatcher: plugin: dump source: ./ organize: 'jre1.8.0_112': usr/lib/jvm/ 'launch_myjavaapp': usr/bin/

    
por popey 28.04.2017 / 14:15