【发布时间】:2011-03-24 20:00:14
【问题描述】:
我正在尝试构建一个包,该包在/etc 下有一些不是配置的文件。即使我在debian 目录中创建了一个空的package.conffiles,它们也会自动包含在conffiles 中。
我怎样才能阻止dh_installdeb 这样做?
【问题讨论】:
标签: configuration debian packaging debhelper
我正在尝试构建一个包,该包在/etc 下有一些不是配置的文件。即使我在debian 目录中创建了一个空的package.conffiles,它们也会自动包含在conffiles 中。
我怎样才能阻止dh_installdeb 这样做?
【问题讨论】:
标签: configuration debian packaging debhelper
我不确定我是否理解 rafl 的回答,但 dh_installdeb 从 debhelper=9.20120115ubuntu3 开始几乎无条件地将 /etc 以下的所有内容添加到配置文件中:debian/conffiles 添加配置文件但不会覆盖它们。
可以在debian/rules 中手动覆盖。例如,为了防止 any 文件被注册为 conffiles:
override_dh_installdeb:
dh_installdeb
find ${CURDIR}/debian/*/DEBIAN -name conffiles -delete
(当然,缩进必须是硬制表符)
【讨论】:
dh_installdeb的当前来源来看,你是对的。 rafl 的回答是行不通的。
可以使用dpkg-maintscript-helper 在debian/<package-name>.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
【讨论】:
这是我想出的作为 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 以外的位置,从而避免您的问题。
【讨论】: