我正在尝试打包我的应用程序以便能够使用 snap 安装它。应用程序已编译为可执行文件,并且有一个配置文件和一个证书文件,我将它们打包在 snap 中。
安装完成后,我可以看到所有内容,/snap/myapp/x1
但由于 x1 部分在更新后会发生变化,所以我想取出资源文件并将它们放到更方便的位置。
为了测试目的,我将资源文件绑定到应用程序正在运行的同一文件夹中,但我发现我需要将它们放入/var/lib/snapd/void
文件夹中才能使应用程序正常运行。这似乎不是一个好的起点。
由于用户可以更改配置文件,$SNAP_COMMON
因此我希望将它们保留在原处,如果我能在安装过程中以某种方式将这些文件移至该位置,那就太好了。有什么想法吗?
答案1
为了做出此回应,我假设您的 snap 中包含的应用程序具有command: my-binary
。
你确实有两个选择:
将应用程序包装在脚本中,以确保配置文件在运行前已迁移。例如,如果您编写了一个名为的脚本,
run-my-binary
如下所示:#!/bin/sh # Migrate config if necessary if [ ! -d $SNAP_COMMON/my.config ]; then cp $SNAP/conf/default.conf $SNAP_COMMON/my.config fi my-binary
更改您的 snapcraft.yaml 以安装此脚本,并将您的应用程序更改为
command: run-my-binary
。- 使用
configure
钩,在初始安装时(以及其他时间)运行。它可以是一个与包装器非常相似的 shell 脚本。
请注意,虽然我想回答你提出的问题,但我并不建议放入配置文件,$SNAP_COMMON
因为它是专门未版本化的——升级/回滚时不会备份。我建议改用$SNAP_DATA
。有关更多信息参见此答案。