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