我正在尝试构建一个包,其中包含一些/etc
未配置的文件。conffiles
即使我package.conffiles
在目录中创建了一个空文件,它们也会自动包含在其中debian
。
我怎样才能停止dh_installdeb
这样做?
我正在尝试构建一个包,其中包含一些/etc
未配置的文件。conffiles
即使我package.conffiles
在目录中创建了一个空文件,它们也会自动包含在其中debian
。
我怎样才能停止dh_installdeb
这样做?
我不确定我是否理解 rafl 的回答,但几乎无条件地将以下所有内容添加到 conffiles:dh_installdeb
添加debhelper=9.20120115ubuntu3
conffiles但不覆盖它们。/etc
debian/conffiles
可以在debian/rules
. 例如,为了防止任何文件被注册为 conffiles:
override_dh_installdeb:
dh_installdeb
find ${CURDIR}/debian/*/DEBIAN -name conffiles -delete
(当然,缩进必须是硬制表符)
debian/<package-name>.preinst
可以使用dpkg-maintscript-helper在 preinst 脚本中定义升级规则。
#!/bin/sh
# preinst script for <package-name>
set -e
case "$1" in
install|upgrade)
if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
dpkg-maintscript-helper rm_conffile /etc/foo/conf.d/bar <Previous package version> -- "$@"
fi
;;
abort-upgrade)
;;
*)
echo "preinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
exit 0
这是我想出的作为 Vasiliy 答案的延伸。它有效地完成了 dh_installdeb 所做的工作,但不会自动添加/etc
文件。通过这种方式,您可以再次完全控制哪些文件被视为 conffile,哪些不是。
override_dh_installdeb:
dh_installdeb
@echo "Recreating conffiles without auto-adding /etc files"
@for dir in ${CURDIR}/debian/*/DEBIAN; do \
PKG=$$(basename $$(dirname $$dir)); \
FILES=""; \
if [ -f ${CURDIR}/debian/conffiles ]; then \
FILES="${CURDIR}/debian/conffiles"; \
fi; \
if [ -f ${CURDIR}/debian/$${PKG}.conffiles ]; then \
FILES="$$FILES ${CURDIR}/debian/$${PKG}.conffiles"; \
fi; \
if [ -n "$$FILES" ]; then \
cat $$FILES | sort -u > $$dir/conffiles; \
elif [ -f $$dir/conffiles ]; then \
rm $$dir/conffiles; \
fi; \
done
(当然,如果粘贴到您的规则文件中,请使用 REAL 选项卡)。
此答案使用 BASH(或 /bin/sh 符号链接到 BASH 或它的变体)。可能有一种方法可以通过仅使用 makefile 内部命令来实现这一点,但我对这些不太擅长。
即使从同一个源构建多个二进制包,这也应该有效,并且它尊重普通debian/conffiles
的以及特定于包的debian/${pkg}.conffiles
.
最初,此答案建议提供您自己的debian/conffiles
文件,仅列出要安装的实际配置文件。显然,这只用于添加更多配置文件,但不会覆盖整个conffiles
文件。
但是,我不太明白你为什么想要那个。如果文件不是配置文件,用户将不会编辑它们,因此任何自动配置文件处理都不会妨碍您进行升级。此外,如果它们实际上不是配置文件,我强烈建议将它们简单地安装到 /etc 以外的位置,从而避免您的问题。