首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将$SNAP_DATA作为snapcraft.yaml的目标

如何将$SNAP_DATA作为snapcraft.yaml的目标
EN

Stack Overflow用户
提问于 2017-04-19 19:58:16
回答 1查看 1.3K关注 0票数 2

以下是我的working snapcraft.yaml的重要部分.

代码语言:javascript
复制
name: my-lib
apps:
  library-sample:
    command: library_sample $SNAP/arg_file.json

parts:
  library:
    source: https://github.com/the/sample.git
    plugin: cmake
    install: |
      cp -r samples/library_sample $SNAPCRAFT_PART_INSTALL/
      cp -r ../src/samples/src/arg_file.json $SNAPCRAFT_PART_INSTALL/
      cp --parents modules/dep_lib1/libdep_lib1.so $SNAPCRAFT_PART_INSTALL/
      cp --parents modules/dep_lib2/libdep_lib2.so $SNAPCRAFT_PART_INSTALL/

最终,我希望arg_file.json$SNAP_DATA,所以我改变了

cp -r ../src/samples/src/arg_file.json $SNAPCRAFT_PART_INSTALL/

cp -r ../src/samples/src/arg_file.json $SNAP_DATA/

但是,这会导致文件从我的install目录中消失(并最终从我安装的快照中消失)。我确信这是因为$SNAP_DATA环境变量在install:脚本中是不可用的,但我不知道该如何解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2017-04-19 20:11:31

Snapcraft是一种构建时工具。在这里使用的install脚本是在创建快照时运行的,而不是在安装snap时运行的。

$SNAP_DATA及其种类($SNAP_COMMON$SNAP_USER_DATA等)在运行时由管理单元定义。换句话说,当快照创建时,没有定义$SNAP_DATA

如果您想在安装$SNAP_DATA时将文件放置到配置钩中,可以通过使用安装时运行的配置钩来完成(参考,这里是使用configure钩子进行健康检查的教程)。但是,由于configure钩子在服务启动后运行,如果您将app更改为守护进程,这将无法工作(假设您的服务在启动之前需要$SNAP_DATA中的文件)。

在这种情况下,另一个可行的方法是为二进制文件和/或服务创建shell脚本包装器,以便在运行真正的命令之前将必要的文件复制到$SNAP_DATA这里是一个用于Apache的示例包装器,用于在Nextcloud中执行类似的操作。然后让你的library-sample应用程序调用,例如library_sample_wrapper而不是library_sample

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43505004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档