[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

md5sum diversion: patches which restore sanity



I've looked into the situation with coreutils and dpkg fighting over
textutils, and I think I have a better fixup than the one currently in
sid.  The resulting situation is better because:
 * It is simpler and more comprehensible,
 * There is no more insane diversionary code in dpkg, just a Pre-Depends.
 * Only a modicum of fixup code is needed in coreutils.
 * Future local diversions of md5sum.textutils set up by a system
   administrator will no longer be trashed during upgrades of
   coreutils.
 * During an upgrade from pre-diversionary versions, there will no
   longer ever be an instant during which md5sum doesn't exist.


Below you'll find my patches for dpkg and coreutils which I'm about to
upload into Ubuntu Dapper right now.  I think these same changes
should be applied in sid's coreutils and dpkg.  (I'm afraid that the
patch to coreutils will reject due to me having backported one of the
changes already made in sid, but the reject should be easy to fix up
and I can provide a cleaner patch if that would be helpful.)


History, as far as I can determine:

 dpkg
   1.13.1 and earlier: contains /usr/bin/md5sum
   1.13.2..9: does not contain md5sum; instead, diverts
       {text,core}utils's md5sum.textutils to md5sum
       but code to undivert it is broken
   1.13.10: does not contain md5sum; instead, diverts
       {text,core}utils's md5sum.textutils to md5sum
       and undivert it on downgrade

 coreutils/textutils
   before 5.93-1: contains /usr/bin/md5sum.textutils (if anything)
   5.93-1 onwards: contains md5sum and md5sum.textutils;
     preinst attempts unconditionally attempts to remove the
     diversion by dpkg (but before 5.94-1 is not always successful)

New behaviours:

 dpkg:
    Pre-Depends on a version of textutils that provides md5sum
    Does not attempt to divert anything
    Relies on coreutils to undo diversions installed by older dpkg's

 coreutils:
    Provide both md5sum and md5sum.textutils
    Removes dpkg diversion when upgrading from older coreutils


Regards,
Ian.

diff -u coreutils-5.93/debian/changelog coreutils-5.93/debian/changelog
--- coreutils-5.93/debian/changelog
+++ coreutils-5.93/debian/changelog
@@ -1,3 +1,14 @@
+coreutils (5.93-5ubuntu4) dapper; urgency=low
+
+  * Only remove dpkg's mad md5sum diversion `once' (ie, on upgrade from
+    non-/usr/bin/md5sum-supplying corutils).  This preserves any later
+    sysadmin-installed diversions of md5sum.textutils.
+  * Fix md5sum diversion problems with a hacksaw (Closes: #340119)
+    (change imported from Debian 5.94-1: some additional rm -f's to make
+     the diversion removal more aggressive^Wrobust).
+
+ -- Ian Jackson <iwj@ubuntu.com>  Fri,  5 May 2006 16:39:05 +0100
+
 coreutils (5.93-5ubuntu3) dapper; urgency=low
 
   * debian/patches/99a_fix_cp_manpage fix cp manpage formatting  
diff -u coreutils-5.93/debian/coreutils.preinst coreutils-5.93/debian/coreutils.preinst
--- coreutils-5.93/debian/coreutils.preinst
+++ coreutils-5.93/debian/coreutils.preinst
@@ -18,8 +18,23 @@
 done
 
 # work around stupid dpkg diversion of md5sum
-dpkg-divert --remove /usr/share/man/man1/md5sum.textutils.1.gz
-dpkg-divert --remove /usr/bin/md5sum.textutils
+# Debian #340119, #289369, #313258; Ubuntu (Malone) #26886
+case "$2" in
+'' | 4.* | 5.?.*)
+    # coreutils 5.93-1 onwards do this, so we can avoid doing
+    # it if we know it's already been done.  That avoids trashing
+    # any real local diversion subsequently introduced by the sysadmin.
+    # (There are no coreutils versions between 5.2.1 and 5.93.)
+    rm -f /usr/bin/md5sum.textutils
+    rm -f /usr/share/man/man1/md5sum.textutils
+    dpkg-divert --remove /usr/share/man/man1/md5sum.textutils.1.gz
+    dpkg-divert --remove /usr/bin/md5sum.textutils
+    # Possibly this can be removed at some distant point, when we're
+    # sure that all of the systems infected with the diversion (ie,
+    # systems which were running the wrong version of sid, breezy or
+    # dapper) have been fixed.
+    ;;
+esac
 
 #DEBHELPER#
 
diff -Nru /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/changelog /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/changelog
--- /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/changelog	2006-04-09 11:53:04.000000000 +0100
+++ /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/changelog	2006-05-05 16:24:31.000000000 +0100
@@ -1,3 +1,11 @@
+dpkg (1.13.11ubuntu6) dapper; urgency=low
+
+  * Completely remove md5sum diversion madness.  Instead, we Pre-Depend
+    on a version of textutils which provides /usr/bin/md5sum.  We rely on
+    the logic in coreutils to remove our diversions.
+
+ -- Ian Jackson <iwj@ubuntu.com>  Fri,  5 May 2006 16:24:23 +0100
+
 dpkg (1.13.11ubuntu5) dapper; urgency=low
 
   * Add new quiet option to dpkg-source to supress warnings. Patch applied
diff -Nru /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/control /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/control
--- /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/control	2006-02-04 16:14:48.000000000 +0000
+++ /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/control	2006-05-05 16:16:44.000000000 +0100
@@ -10,8 +10,7 @@
 Package: dpkg
 Architecture: any
 Essential: yes
-Pre-Depends: ${shlibs:Depends}
-Depends: coreutils | textutils (>= 2.0-3)
+Pre-Depends: ${shlibs:Depends}, coreutils (>= 5.93-1)
 Conflicts: sysvinit (<< 2.82-1), dpkg-iasearch (<< 0.11), dpkg-static, dpkg-dev (<< 1.10)
 Replaces: dpkg-doc-ja, dpkg-static, manpages-de (<= 0.4-3)
 Suggests: apt
diff -Nru /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/dpkg.postinst /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/dpkg.postinst
--- /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/dpkg.postinst	2005-06-28 14:18:01.000000000 +0100
+++ /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/dpkg.postinst	2006-05-05 16:16:42.000000000 +0100
@@ -137,18 +137,6 @@
 }
 
 
-# Divert textutils/coreutils md5sum now that we no longer provide it
-divert_md5sum() {
-    if [ ! -f /usr/bin/md5sum ]; then
-	dpkg-divert --divert /usr/bin/md5sum --rename /usr/bin/md5sum.textutils
-    fi 
-    if [ ! -f /usr/share/man/man1/md5sum.1.gz ]; then
-	dpkg-divert --divert /usr/share/man/man1/md5sum.1.gz --rename \
-	    /usr/share/man/man1/md5sum.textutils.1.gz
-    fi
-}
-
-
 # Create log file and set default permissions if possible
 create_logfile() {
     logfile=/var/log/dpkg.log
@@ -174,7 +162,6 @@
 
 	move_info_directory
 	remove_info_symlink
-	divert_md5sum
 	;;
 
     abort-upgrade|abort-deconfigure|abort-remove)
diff -Nru /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/dpkg.prerm /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/dpkg.prerm
--- /tmp/Eik4grQT1j/dpkg-1.13.11ubuntu5/debian/dpkg.prerm	2005-06-13 18:32:22.000000000 +0100
+++ /tmp/zWGLKCh7fx/dpkg-1.13.11ubuntu6/debian/dpkg.prerm	2006-05-05 16:16:44.000000000 +0100
@@ -17,31 +17,5 @@
 # Before the package is replaced due to conflict:
 #	<prerm> remove in-favour <new-package> <version>
 
-
-# Remove the md5sum diversion on removal or downgrade
-undivert_md5sum() {
-    dpkg-divert --rename --remove /usr/bin/md5sum.textutils
-    dpkg-divert --rename --remove /usr/share/man/man1/md5sum.textutils.1.gz
-}
-
-
-case "$1" in
-    remove|upgrade)
-	case "$2" in
-	    0.* | 1.[0123456789].* | 1.10 | 1.10.* | 1.13.[01234] | '')
-	        undivert_md5sum
-		;;
-	esac
-	;;
-
-    failed-upgrade|deconfigure)
-	;;
-
-    *)
-	echo "$0 called with unknown argument \`$1'" 1>&2
-	exit 1
-	;;
-esac
-
 #DEBHELPER#
 exit 0

Reply to: