【问题标题】:Prevent creation of conffiles防止创建配置文件
【发布时间】:2011-03-24 20:00:14
【问题描述】:

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

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

【问题讨论】:

    标签: configuration debian packaging debhelper


    【解决方案1】:

    我不确定我是否理解 rafl 的回答,但 dh_installdebdebhelper=9.20120115ubuntu3 开始几乎无条件地将 /etc 以下的所有内容添加到配置文件中:debian/conffiles 添加配置文件但不会覆盖它们。

    可以在debian/rules 中手动覆盖。例如,为了防止 any 文件被注册为 conffiles:

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

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

    【讨论】:

    • dh_installdeb的当前来源来看,你是对的。 rafl 的回答是行不通的。
    【解决方案2】:

    可以使用dpkg-maintscript-helperdebian/<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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 它们是配置文件,但它们由外部服务(如 puppet)管理,我不希望通过升级来创建无用的 .dpkg_new(或其他任何名称)文件。
        猜你喜欢
        • 2021-08-06
        • 1970-01-01
        • 2013-10-04
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多