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

Interesting problem in timezoneconf package



I found the following while trying to rebuild this package after
Branden agreed for a NMU implementing a switch to po-debconf for the
templates.


If one tries to rebuild timezoneconf on a *current* sarge machine, the
build is OK, but the postinst dies with :

bash-2.05b# dpkg -i timezoneconf_0.7_all.deb
(Reading database ... 131383 files and directories currently installed.)
Preparing to replace timezoneconf 0.8.1 (using timezoneconf_0.7_all.deb) ...
Unpacking replacement timezoneconf ...
Setting up timezoneconf (0.7) ...
Problem with debhelper scripts:  at /var/lib/dpkg/info/timezoneconf.postinst line 16.
dpkg: error processing timezoneconf (--install):
 subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
 timezoneconf

I posted this in -devel-french and, as often, Denis Barbier found the
solution.. :-)


In its current version, timezoneconf.postinst includes perl
with embedded shelle commands :

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
# Stolen from debhelper(1)

my $temp="set -e\nset -- @ARGV\n" . << 'EOF';
if [ "$1" = "configure" ]; then
    [ -x /usr/sbin/update-configlets ] && /usr/sbin/update-configlets
fi

# Automatically added by dh_installdocs
if [ "$1" = "configure" ]; then
        if [ -d /usr/doc -a ! -e /usr/doc/timezoneconf -a -d /usr/share/doc/timezoneconf ]; then
                ln -sf ../share/doc/timezoneconf /usr/doc/timezoneconf
        fi
fi
# End automatically added section

EOF

system ($temp) / 256 == 0
  or die "Problem with debhelper scripts: $!";
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

The dh_installdocs part comes from a #DEBHELPER# in
debian/postinst. 

When recompiling now, this doesnt exist anymore and thus we end up
with :

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
my $temp="set -e\nset -- @ARGV\n" . << 'EOF';
if [ "$1" = "configure" ]; then
    [ -x /usr/sbin/update-configlets ] && /usr/sbin/update-configlets
fi

EOF
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

If /usr/sbin/update-configlets doesn't exist, the return code is then
1, thus explaining failure.

Conclusion 1: the test was wrong, but this was hidden by the former
test being successful.. :-). This appears now, as #DEBHELPER# is
empty.

Conclusion 2: maintainers who put tests just before  #DEBHELPER#
in their {post,pre}{inst,rm} should check these....

And then, Denis proposed a patch for correcting the problem in timezoneconf.

--- debian/postinst.orig        2003-07-26 22:54:06.000000000 +0200
+++ debian/postinst     2003-07-26 22:54:23.000000000 +0200
@@ -7,7 +7,9 @@

 my $temp="set -e\nset -- @ARGV\n" . << 'EOF';
 if [ "$1" = "configure" ]; then
-    [ -x /usr/sbin/update-configlets ] && /usr/sbin/update-configlets
+    if [ -x /usr/sbin/update-configlets ]; then
+        /usr/sbin/update-configlets
+    fi
 fi

 #DEBHELPER#




Reply to: