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: