我正在将我的代码作为 deb 包(使用 cmake 构建,使用 CpackDeb 打包)构建并分发到基于 Ubuntucore 的 16.04 LTS。该软件包安装了一个配置文件。在更新期间,我无法让 apt/apt-get 保留旧的配置文件。它在所有测试用例中默默地覆盖旧配置,无论它是否已被编辑。我尝试过的事情:
$ apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install <package>
$ export DEBIAN_FRONTEND=noninteractive ; apt-get install -y -o Dpkg::Options::="--force-confold" <package>
和一些变化。结果总是一样的——旧配置文件的静默覆盖。apt 版本是 1.2.31,我在 arm64 处理器上。
也许我没有正确包装 deb?我的配置文件只是一个可安装的。我不知道对配置文件有什么特殊要求,有吗?
您需要
conffiles
在您的控件中包含一个文件control.tar.gz
。当使用dpkg-deb创建一个包时,它被放置在DEBIAN/conffiles
. 对于您的 debian 软件包中包含的每个配置文件,该文件应该只有一行。每行指定配置文件的完整路径。见https://manpages.debian.org/testing/dpkg-dev/deb-conffiles.5.en.html
包含它的结果是这些文件在系统上注册为配置文件,不会被自动覆盖。
我自己没有使用过 CPackDeb,但是这里有一个关于如何添加文件的参考
control.tar.gz
:https://cmake.org/cmake/help/v3.0/module/CPackDeb.html?highlight=conffiles