Here's the commit I made to allow removing conffiles in the future.
(Specific filenames were added in later commits.)  It's rather
straightforward (mostly copied from the Debian wiki), but I wouldn't
mind peer review just in case I screwed up.

As mentioned in the description, I decided to eschew the whole version
comparison bit.  Unlike most packages, we're likely to drop many more
conffiles in the future, and I wanted to come up with an easy solution
that would not result in a dozen of if/then blocks, or figuring out
which version to check for every time.

When you remove a rule files, all you have to do is remember to add it
to the list.  That's it!


commit 1299e472ce3f8cf26fa60c87ce0c5d541106e0ef
Author: Frédéric Brière <fbri...@fbriere.net>
Date:   Sun Aug 23 15:48:25 2009 -0400

    Adding support for removing conffiles in logcheck-database's preinst
    
    This basically copies rm_conffile() from the Debian wiki, to deal with
    the fact that dpkg does not delete conffiles after they have been
    removed from a package.
    
    This version of rm_conffile() makes sure that the conffile still belongs
    to our package, since it is possible for it to have migrated to another
    package through a Replaces relationship.  (See bug #532484 for an
    example.)
    
    Thanks to this check, we can also avoid bothering with version
    comparisions; calling rm_conffile() on subsequent upgrades will simply
    do nothing.  (Of course, we still avoid calling it uselessly on fresh
    installs.)

diff --git a/debian/logcheck-database.preinst b/debian/logcheck-database.preinst
index 3ff092e..c2d6589 100644
--- a/debian/logcheck-database.preinst
+++ b/debian/logcheck-database.preinst
@@ -14,8 +14,48 @@ set -e
 # the debian-policy package
 
 
+# List of conffiles which have been removed from this package.  These will be
+# deleted (or backed away) at the next upgrade.
+#
+# Conffiles must be listed here from the very moment of their removal; adding
+# them later on will not work correctly.
+
+REMOVED_CONFFILES=""
+
+
+# Copied from <http://wiki.debian.org/DpkgConffileHandling>
+rm_conffile() {
+    local PKGNAME="$1"
+    local CONFFILE="$2"
+
+    [ -e "$CONFFILE" ] || return 0
+
+    # Do nothing if that file no longer belongs to us
+    dpkg-query --listfiles "$PKGNAME" | grep -q "^$CONFFILE$" || return 0
+
+    local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')"
+    local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PKGNAME | \
+            sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")"
+    if [ "$md5sum" != "$old_md5sum" ]; then
+        echo "Obsolete conffile $CONFFILE has been modified by you."
+        echo "Saving as $CONFFILE.dpkg-bak ..."
+        mv -f "$CONFFILE" "$CONFFILE".dpkg-bak
+    else
+        echo "Removing obsolete conffile $CONFFILE ..."
+        rm -f "$CONFFILE"
+    fi
+}
+
+
 case "$1" in
     install|upgrade)
+        # Remove $REMOVED_CONFFILES on upgrade, or when re-installing
+        # after the package was removed (but not purged).
+        if [ "$2" ]; then
+            for CONFFILE in $REMOVED_CONFFILES; do
+                rm_conffile logcheck-database "$CONFFILE"
+            done
+        fi
     ;;
 
     abort-upgrade)

-- 
* liw prefers not to have Linus run Debian, because then /me would
  have to run Red Hat, just to keep the power balance :)
                -- #Debian



_______________________________________________
Logcheck-devel mailing list
Logcheck-devel@lists.alioth.debian.org
http://lists.alioth.debian.org/mailman/listinfo/logcheck-devel

Reply via email to