On Sun, Apr 04, 2004 at 04:28:51PM -0400, Sam Hartman wrote:
> [Hi. Copies on replies appreciated.]
[...]
> 1) PAM upgrades from woody force users to answer a dpkg conffile
> question.
[...]
> I believe it is unacceptable for an upgrade of a default install of
> woody to sarge to ask dpkg conffile questions.
I agree.
> My current proposal is to detect this situation in the preinst of
> libpam-runtime by noticing if we are upgrading from the woody version
> of PAM and if the md5sum of /etc/pam.d/other matches one with md5
> passwords. If so, then I will modify the file back to the state woody
> ships with in the preinst. I'll submit similar patches to shadow.
>
> The down side of this proposal is that if the user somehow aborts the
> upgrade between running the preinst and the upgrade completing, they
> will have md5 passwords disabled. I think that's acceptable, because
> when they do eventually upgrade to sarge, the md5 passwords will be
> enabled again.
I suggest using an approach similar to the one I used to de-conffile
/etc/X11/rstart/rstart.real. Basically, you move the file aside in the
preinst under the conditions of interest, replacing it or changing it as
you need to.
In the postinst, you delete the moved-aside copy.
In the postrm, if $1 is "abort-upgrade" or "abort-install", you check
for the existence of the moved-aside file, and if it exists, you move it
back.
Example code:
preinst:
if [ "$1" = "install" -o "$1" = "upgrade" ]; then
# rstard.real moved out of /etc in 4.3.0-1; we do not use
# remove_conffile_prepare() because it was an ELF object and list of
# canonical MD5 sums would be horrendously long. Furthermore, if the FHS
# priests are correct, no one will have taken this file's claims of
# configurability seriously.
if dpkg --compare-versions "$2" lt "4.3.0-1"; then
if [ -e /etc/X11/rstart/rstartd.real ] ; then
observe "preparing to remove obsolete conffile" \
"/etc/X11/rstart/rstartd.real"
mv /etc/X11/rstart/rstartd.real /etc/X11/rstart/rstartd.real.dpkg-tmp
fi
fi
fi
postinst:
# now safe to finish migrations started in preinst
if [ -e /etc/X11/rstart/rstartd.real.dpkg-tmp ]; then
# we do not use remove_conffile_commit(); see xutils preinst script
observe "committing removal of obsolete conffile" \
"/etc/X11/rstart/rstartd.real"
rm /etc/X11/rstart/rstartd.real.dpkg-tmp
fi
postrm:
if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ]; then
if [ -e /etc/X11/rstart/rstartd.real.dpkg-tmp ]; then
# we do not use remove_conffile_rollback(); see xutils preinst script
observe "rolling back removal of obsolete conffile" \
"/etc/X11/rstart/rstartd.real"
mv /etc/X11/rstart/rstartd.real.dpkg-tmp /etc/X11/rstart/rstartd.real
fi
fi
(Please ignore references to my observe() shell function.)
That should do the right thing if the user somehow aborts the upgrade.
dpkg *will* attempt to roll back the state of the system. If the user
kills even that off, then it's not your package's fault.
--
G. Branden Robinson | Convictions are more dangerous
Debian GNU/Linux | enemies of truth than lies.
branden@debian.org | -- Friedrich Nietzsche
http://people.debian.org/~branden/ |
Attachment:
signature.asc
Description: Digital signature