4

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

我怎样才能停止dh_installdeb这样做?

4

4 回答 4

8

我不确定我是否理解 rafl 的回答,但几乎无条件地将以下所有内容添加到 conffiles:dh_installdeb添加debhelper=9.20120115ubuntu3conffiles但不覆盖它们。/etcdebian/conffiles

可以在debian/rules. 例如,为了防止任何文件被注册为 conffiles:

override_dh_installdeb:
    dh_installdeb
    find ${CURDIR}/debian/*/DEBIAN -name conffiles -delete

(当然,缩进必须是硬制表符)

于 2014-01-22T17:21:31.387 回答
2

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

更多信息: 删除 Debian 软件包中过时的配置文件的正确方法

于 2014-05-15T10:21:21.123 回答
1

这是我想出的作为 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.

于 2014-06-24T15:40:00.520 回答
0

最初,此答案建议提供您自己的debian/conffiles文件,仅列出要安装的实际配置文件。显然,这只用于添加更多配置文件,但不会覆盖整个conffiles文件。

但是,我不太明白你为什么想要那个。如果文件不是配置文件,用户将不会编辑它们,因此任何自动配置文件处理都不会妨碍您进行升级。此外,如果它们实际上不是配置文件,我强烈建议将它们简单地安装到 /etc 以外的位置,从而避免您的问题。

于 2010-09-18T03:30:05.023 回答