Não é possível obter um exemplo básico de interface de conteúdo trabalhando com o Snapcraft

2

Eu tenho tentado fazer com que a interface content trabalhe com um exemplo trivial.

consumidor:

name: consumer # you probably want to 'snapcraft register <name>'
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: |

grade: devel # must be 'stable' to release into candidate/stable channels
confinement: devmode # use 'strict' once you have the right plugs and slots

apps:
  consumer:
    command: ls -lR /snap/consumer/current/

parts:
  my-part:
    # See 'snapcraft plugins'
    plugin: nil

plugs:
  shared-files:
    content: shared-files
    interface: content
    target: shared
    default-provider: provider:shared-files

provedor:

name: provider # you probably want to 'snapcraft register <name>'
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: |

grade: devel # must be 'stable' to release into candidate/stable channels
confinement: devmode # use 'strict' once you have the right plugs and slots

parts:
  my-part:
    plugin: dump
    source: .

slots:
  shared-files:
    content: shared-files
    interface: content
    read:
    - /src

/src tem alguns arquivos aleatórios colocados nele. Eu posso ver isso em /snap/provider/current , mas em nenhum lugar na árvore /snap/consumer/current - que é onde eu acredito que eles deveriam aparecer. snap interfaces mostra que o plugue e o slot estão conectados.

O que estou fazendo de errado?

    
por mofo 24.10.2016 / 00:58

1 resposta

4

Você está tão perto!

A interface de compartilhamento de conteúdo liga o slot ao destino do plug. Para esse fim, o parâmetro target deve estar apontando para um diretório existente (as montagens de ligação precisam ser montadas em cima de algo como qualquer outra montagem). Portanto, no seu consumer , em vez de usar o nil plugin, use o dump plugin e despeje um diretório shared vazio na raiz do snap. Em seguida, você verá o diretório provider $SNAP/src exibido no diretório consumer $SNAP/shared .

Observe que você não verá isso da perspectiva do sistema. Se você forls /snap/consumer/current/shared/ do sistema, será o diretório vazio que você colocou no snap. No entanto, quando um aplicativo é acionado, o contexto no qual ele é executado contém essa montagem de ligação. Deixe-me provar isso:

$ snap run --shell consumer
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

$ ls $SNAP/shared/
file1  file2

snap run --shell executa um shell no ambiente exato que seria usado para o aplicativo em questão. Portanto, executando snap run --shell consumer , você está solicitando um shell com o mesmo confinamento e ambiente que o aplicativo consumer teria. É por isso que eu poderia usar $SNAP lá. Observe que file1 e file2 são os arquivos contidos no diretório provider src .

Uma última nota: partindo do princípio de que você deseja que o aplicativo consumer liste o conteúdo do diretório compartilhado, altere-o para ficar assim (não é necessário usar / snap / consumer / current):

apps:
  consumer:
    command: ls -lR $SNAP/shared/
    
por Kyle 25.10.2016 / 23:27