我正在尝试构建一个包含/etc
下未配置的文件的包。即使我在conffiles
目录中创建空package.conffiles
,它们也会自动包含在debian
中。
如何阻止dh_installdeb
这样做?
答案 0 :(得分:7)
我不确定我理解rafl的答案,但dh_installdeb
debhelper=9.20120115ubuntu3
/etc
将debian/conffiles
以下的所有内容添加到几乎无条件的配置中:debian/rules
添加了conffiles但不覆盖它们。
可以在override_dh_installdeb:
dh_installdeb
find ${CURDIR}/debian/*/DEBIAN -name conffiles -delete
中手动覆盖。例如,为了防止任何文件被注册为conffiles:
{{1}}
(当然,缩进必须是硬标签)
答案 1 :(得分:2)
可以使用dpkg-maintscript-helper在debian/<package-name>.preinst
的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
更多信息: The right way to remove an obsolete conffile in a Debian package
答案 2 :(得分:1)
这是我提出的作为Vasiliy答案的延伸。它有效地执行dh_installdeb的操作,但不会自动添加/etc
个文件。通过这种方式,您可以再次完全控制哪些文件被视为conffiles,哪些文件不是。
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
。
答案 3 :(得分:0)
最初,这个答案建议您提供自己的debian/conffiles
文件,仅列出要安装的实际配置文件。显然,只能添加更多配置文件,但不会覆盖整个conffiles
文件。
但是,我不明白为什么你甚至想要那个。如果文件不是配置文件,则用户不会对其进行编辑,因此在升级时,任何自动同步处理都不会受到影响。此外,如果它们实际上不是配置文件,我强烈建议您只是将它们安装到/ etc以外的地方,以避免出现问题。