如何在 snap 安装过程中移动配置文件

如何在 snap 安装过程中移动配置文件

我正在尝试打包我的应用程序以便能够使用 snap 安装它。应用程序已编译为可执行文件,并且有一个配置文件和一个证书文件,我将它们打包在 snap 中。

安装完成后,我可以看到所有内容,/snap/myapp/x1但由于 x1 部分在更新后会发生变化,所以我想取出资源文件并将它们放到更方便的位置。

为了测试目的,我将资源文件绑定到应用程序正在运行的同一文件夹中,但我发现我需要将它们放入/var/lib/snapd/void文件夹中才能使应用程序正常运行。这似乎不是一个好的起点。

由于用户可以更改配置文件,$SNAP_COMMON因此我希望将它们保留在原处,如果我能在安装过​​程中以某种方式将这些文件移至该位置,那就太好了。有什么想法吗?

答案1

为了做出此回应,我假设您的 snap 中包含的应用程序具有command: my-binary

你确实有两个选择:

  1. 将应用程序包装在脚本中,以确保配置文件在运行前已迁移。例如,如果您编写了一个名为的脚本,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

  2. 使用configure,在初始安装时(以及其他时间)运行。它可以是一个与包装器非常相似的 shell 脚本。

请注意,虽然我想回答你提出的问题,但我并不建议放入配置文件,$SNAP_COMMON因为它是专门未版本化的——升级/回滚时不会备份。我建议改用$SNAP_DATA。有关更多信息参见此答案

相关内容