我正在将我的代码作为 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?我的配置文件只是一个可安装的。我不知道配置文件有什么特殊要求,有吗?
答案1
您需要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
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")