防止创建conffiles

时间:2010-08-03 16:20:18

标签: configuration debian packaging debhelper

我正在尝试构建一个包含/etc下未配置的文件的包。即使我在conffiles目录中创建空package.conffiles,它们也会自动包含在debian中。

如何阻止dh_installdeb这样做?

4 个答案:

答案 0 :(得分:7)

我不确定我理解rafl的答案,但dh_installdeb debhelper=9.20120115ubuntu3 /etcdebian/conffiles以下的所有内容添加到几乎无条件的配置中:debian/rules添加了conffiles但不覆盖它们。

可以在override_dh_installdeb: dh_installdeb find ${CURDIR}/debian/*/DEBIAN -name conffiles -delete 中手动覆盖。例如,为了防止任何文件被注册为conffiles:

{{1}}

(当然,缩进必须是硬标签)

答案 1 :(得分:2)

可以使用dpkg-maintscript-helperdebian/<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以外的地方,以避免出现问题。