以下是我的working snapcraft.yaml的重要部分.
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:脚本中是不可用的,但我不知道该如何解决这个问题。
发布于 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。
https://stackoverflow.com/questions/43505004
复制相似问题