无法获取与 Snapcraft 配合使用的基本内容界面示例

无法获取与 Snapcraft 配合使用的基本内容界面示例

我一直在尝试content通过一个简单的示例来让界面正常工作。

消费者:

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

提供者:

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里面放了一些随机文件。我可以看到这些文件,/snap/provider/current但在/snap/consumer/current树中却找不到它们 - 我认为它们应该出现在那里。 snap interfaces显示插头和插槽已连接。

我究竟做错了什么?

答案1

你太接近了!

内容共享接口将插槽绑定安装到插件的目标。为此,参数target必须指向现有目录(绑定安装需要像任何其他安装一样安装在某个目录之上)。因此,在您的 中,不要使用插件,consumer而是使用插件并将一个空目录转储到 snap 的根目录中。然后您将看到的目录显示在的目录中。nildumpsharedprovider$SNAP/srcconsumer$SNAP/shared

请注意,从系统角度看,您看不到这一点。如果您ls /snap/consumer/current/shared/从系统角度看,它将是您打包到 snap 中的空目录。但是,当启动应用程序时,运行它的上下文包含该绑定挂载。让我来证明这一点:

$ 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在与所讨论应用程序所使用的环境完全相同的环境中运行 shell。因此,运行snap run --shell consumer您正在请求具有与consumer应用程序相同的限制和环境的 shell。这就是我可以$SNAP在那里使用的原因。请注意,file1和是我的目录file2中包含的文件。providersrc

最后一点:假设您希望应用consumer程序列出共享目录的内容,您可以将其更改为如下所示(无需使用 /snap/consumer/current):

apps:
  consumer:
    command: ls -lR $SNAP/shared/

相关内容