2010-08-03 227 views
4

我試圖構建一個包含/etc下的一些文件的包,這些文件不是配置。即使我在debian目錄中創建了一個空的package.conffiles,它們也會自動包含在conffiles中。如何停止dh_installdeb這樣做?防止conffiles創建

回答

0

最初,這個答案建議您提供自己的debian/conffiles文件,只列出要安裝的實際配置文件。顯然,只用於添加更多配置文件,但不會覆蓋整個conffiles文件。

但是,我不明白你爲什麼要這麼做。如果這些文件不是配置文件,那麼用戶將不會編輯它們,因此沒有任何自動Confeile處理會在升級時遇到問題。另外,如果它們實際上不是配置文件,我強烈建議將它們安裝到/ etc之外的地方,以避免出現問題。

+0

他們是配置文件,但他們由外部服務(如puppet)管理,我不想升級創建無用的.dpkg_new(或任何他們被稱爲)文件。 – viraptor 2010-09-19 00:28:10

7

我不知道我的理解RAFL的答案,但作爲dh_installdebdebhelper=9.20120115ubuntu3增加了以下/etc一切,那些默認配置幾乎無條件地:debian/conffiles增加了那些默認配置文件,但不覆蓋它們。

可以在debian/rules中手動覆蓋。例如,爲了防止被註冊爲那些默認配置任何文件:

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

(當然,壓痕必須硬標籤)

+1

從'dh_installdeb'的當前來源判斷,你是對的。拉夫的答案將無法正常工作。 – Dave 2014-06-24 01:48:12

2

有可能在PREINST腳本debian/<package-name>.preinst定義升級規則使用dpkg-maintscript-helper

#!/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> -- "[email protected]" 
     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

1

這裏是我想出了爲瓦西里的答案的延伸。它可以有效地完成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