如何从snapcraft.yaml定位$ SNAP_DATA

时间:2017-04-19 19:58:16

标签: snapcraft

以下是 工作 K的重要部分......

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 scriptlet无法使用$SNAP_DATA环境变量,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

Snapcraft是一种构建时工具。您正在使用的install scriptlet在创建快照时运行 ,而不是在安装快照时运行。

$SNAP_DATA及其类型($SNAP_COMMON$SNAP_USER_DATA等)由snapd在运行时定义。换句话说,当snapcraft创建快照时,没有定义$SNAP_DATA

如果要在安装快照时将文件放入$SNAP_DATA,可以使用安装时运行的configure hook来实现此目的(作为参考,here是一个教程使用configure挂钩进行健康检查)。但是,由于{/ 1>}挂钩在服务启动后运行,如果您将configure更改为守护程序,这将无法正常工作(假设您的服务需要文件) app才能启动它。

在这种情况下可以使用的另一个选项是为二进制文件和/或服务创建shell脚本包装器,以便在运行实际命令之前将必要的文件复制到$SNAP_DATAHere是在Nextcloud snap中用于执行类似操作的Apache的示例包装器。然后,您就可以进行$SNAP_DATA个应用调用,例如library-sample代替library_sample_wrapper