Atualmente, estou liderando um esforço para disponibilizar nosso aplicativo em um instante para o Ubuntu Core 16.04 LTS. Atualmente estou desenvolvendo em:
(classic)mike@localhost:~/$ uname -a
Linux localhost.localdomain 4.4.0-1030-raspi2 #37-Ubuntu SMP Thu Oct 20 15:06:25 UTC 2016 armv7l armv7l armv7l GNU/Linux
(classic)mike@localhost:~/$ snap --version
snap 2.28.5
snapd 2.29.3
series 16
kernel 4.4.0-1030-raspi2
Por favor, note que o raspberry pi não é a nossa plataforma alvo final, mas faz um POC adequado por enquanto.
A minha pergunta é sobre a conexão de interfaces de snap não auto-conectadas, mais especificamente, como fazê-lo a partir do código (c) ou no início do serviço via systemd. Estou familiarizado com como conectar snaps na linha de comando:
snap connect [snap_name]:mount-observe :mount-observe
No entanto, nosso aplicativo é executado como um serviço - a linha de comando não estará disponível para conectar manualmente essa interface, e o acesso a esse e outros plugues é obrigatório para a função normal de nosso aplicativo. Estou muito ansioso para encontrar uma maneira de conectar esses plugues 'não auto' através de algum outro mecanismo.
Eu tentei executar algo como:
sprintf(command, "snap connect %s:mount-observe :mount-observe", SNAP_NAME);
system(command);
Do código c e também tentei executar:
snap connect [snap_name]:mount-observe :mount-observe
em um script via snapcraft.yaml:
app:
command: bin/my-wrapper-that-will-call-my-app.sh
mas nenhum parece fornecer o resultado desejado. Veremos exceções da Política de segurança como:
Log: apparmor="ALLOWED" operation="exec" profile="snap.snap_name.my-service" name="/usr/bin/snap" pid=24603 comm="sh" requested_mask="x" denied_mask="x" fsuid=0 ouid=0 target="snap.snap_name.my-service-service//null-/usr/bin/snap"
File: /usr/bin/snap (exec)
Suggestions:
* adjust snap to ship 'snap'
* adjust program to use relative paths if the snap already ships 'snap'
e, embora eu esteja rodando no devmode, ainda não vejo meus plugs conectados pela saída 'snap interfaces'.
Não consegui encontrar nenhuma referência a esse tipo de uso na documentação. O que estou perdendo? Meu fluxo de trabalho não é possível? Como posso conectar interfaces sem exigir interação do usuário na linha de comando - considere que meu aplicativo é um serviço - minha base de instalação não terá acesso à linha de comando.
Atenciosamente,
Mike James