Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Configuration 防止创建文件_Configuration_Debian_Packaging_Debhelper - Fatal编程技术网

Configuration 防止创建文件

Configuration 防止创建文件,configuration,debian,packaging,debhelper,Configuration,Debian,Packaging,Debhelper,我正在尝试构建一个包,该包在/etc下包含一些未配置的文件。即使我在debian目录中创建了一个空的package.conffiles,它们也会自动包含在conffiles中 如何阻止dh_installdeb执行此操作?最初,此答案建议提供您自己的debian/conffiles文件,仅列出要安装的实际配置文件。显然,这只用于添加更多配置文件,但不会覆盖整个conffiles文件 然而,我不太明白你为什么想要这个。如果这些文件不是配置文件,用户将不会编辑它们,因此在升级时,任何自动文件处理都不

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


如何阻止dh_installdeb执行此操作?

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


然而,我不太明白你为什么想要这个。如果这些文件不是配置文件,用户将不会编辑它们,因此在升级时,任何自动文件处理都不会妨碍您。另外,如果它们不是真正的配置文件,我强烈建议只需将它们安装到/etc以外的地方,这样也可以避免您的问题。

我不确定我是否理解rafl的答案,但自2017年9月起,dh_installdeb几乎无条件地将以下所有内容添加到conffiles中:
debian/conffiles
添加conffiles,但不覆盖它们

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

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

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

可以使用在
debian/.preinst
中的preinst脚本中定义升级规则

#/垃圾箱/垃圾箱
#的preinst脚本
set-e
案件“$1”
安装(升级)
如果dpkg maintscript helper支持rm_conffile 2>/dev/null;然后
dpkg maintscript helper rm_conffile/etc/foo/conf.d/bar--“$@”
fi
;;
中止升级)
;;
*)
echo“使用未知参数\`1'”调用preinst>&2
出口1
;;
以撒
出口0
更多信息:
以下是我对瓦西里答案的延伸。它有效地完成了dh_installdeb所做的工作,但没有自动添加
/etc
文件。这样,您就可以重新完全控制哪些文件被视为文件,哪些文件不被视为文件

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
(当然,如果粘贴到规则文件中,请使用真正的选项卡)

这个答案使用BASH(或者/bin/sh,它或者符号链接到BASH,或者是BASH的变体)。可能有一种方法可以通过只使用makefile内部命令来实现这一点,但我不太擅长这些命令


即使在从同一个源构建多个二进制软件包时,这也应该起作用,它尊重普通的
debian/conffiles
以及特定于软件包的
debian/${pkg}.conffiles

它们是配置文件,但它们由外部服务(如puppet)管理我不希望升级会创建无用的.dpkg_新文件(或其他名称的文件)。从
dh_installedeb
的当前源代码判断,您是正确的。rafl的答案行不通。
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