diff options
author | Scott James Remnant <scott@netsplit.com> | 2005-03-11 09:00:14 +0000 |
---|---|---|
committer | Scott James Remnant <scott@netsplit.com> | 2005-03-11 09:00:14 +0000 |
commit | 841a630143cd3a35dbf8bce0a111ebd39dd12f44 (patch) | |
tree | 0f85bbcb279f41e840bfcf6faceaab43770d2447 /debian/dpkg.postinst | |
parent | ac8c6923a8654da81cbc6730213147961026eb8f (diff) | |
download | dpkg-841a630143cd3a35dbf8bce0a111ebd39dd12f44.tar.gz |
dpkg (1.13.1.0.1) experimental; urgency=low
* Bin-MU; recompile against Debian unstable, to make dselect actually
installable.
-- Scott James Remnant <scott@netsplit.com> Fri, 11 Mar 2005 09:00:14 +0000
Diffstat (limited to 'debian/dpkg.postinst')
-rwxr-xr-x | debian/dpkg.postinst | 265 |
1 files changed, 145 insertions, 120 deletions
diff --git a/debian/dpkg.postinst b/debian/dpkg.postinst index 0d65a1aa7..25babaddd 100755 --- a/debian/dpkg.postinst +++ b/debian/dpkg.postinst @@ -1,141 +1,166 @@ -#!/bin/sh +#!/bin/sh -e +# This script can be called in the following ways: +# +# After the package was installed: +# <postinst> configure <old-version> +# +# +# If prerm fails during upgrade or fails on failed upgrade: +# <old-postinst> abort-upgrade <new-version> +# +# If prerm fails during deconfiguration of a package: +# <postinst> abort-deconfigure in-favour <new-package> <version> +# removing <old-package> <version> +# +# If prerm fails during replacement due to conflict: +# <postinst> abort-remove in-favour <new-package> <version> -set -e -dupdaemonhelp () { - cat <<EOF +# Create the database files if they don't already exist +create_database() { + admindir=/var/lib/dpkg -Some daemons and similar services whose scripts have links in the -/etc/rcN.d directories have both start (S) and stop (K) links in -some runlevels. Thus these services get stopped and immediately -restarted at some runlevel changes, which is probably not what -you want. I can remove the probably-spurious K links if you like. + for file in diversions statoverride status; do + if [ ! -f "$admindir/$file" ]; then + touch "$admindir/$file" + fi + done +} -Type Y to remove then, N to leave them, or L to list them. -If you don't know what to do you can say N now and then delete -them by hand later. -EOF +# Move the info directory from /usr/info to /usr/share/info +move_info_directory() { + if [ -d /usr/info ] && [ ! -L /usr/info ] \ + && [ -f /usr/info/dir ] && [ ! -L /usr/info/dir ] + then + echo "Moving /usr/info/dir to /usr/share/info/dir ..." + mv /usr/info/dir /usr/share/info/dir + if [ -f /usr/info/dir.old ]; then + mv /usr/info/dir.old /usr/share/info/dir.old + fi + fi } -if [ "x$1" = xconfigure ]; then - if [ -z "$2" ] && [ ! -f /etc/dpkg/dpkg.cfg ] ; then - cp /usr/share/doc/dpkg/dpkg.cfg /etc/dpkg - fi - case "$2" in - 0.* | 1.0.* | 1.1.0 | 1.1.0[^0-9]* | '' ) - for f in 0 1 2 3 4 5 6 - do - cd /etc/rc$f.d - for g in K[0-9][0-9]* - do - if [ -n "`echo \"x$g\" | tr -d 0-9A-Za-z_-`" ] - then - continue - fi - h="`echo $g | sed -e 's/^K/S/'`" - if ! [ -L $h ] && [ -L $g ] \ - || [ "`ls -Li $g 2>/dev/null | awk '{print $1}'`" != \ - "`ls -Li $h 2>/dev/null | awk '{print $1}'`" ] - then - continue - fi - removes="$removes rc$f.d/$g" - done - done - if [ -n "$removes" ] - then - cd /etc - dupdaemonhelp - while [ -n "$removes" ] - do - echo -n 'y=remove, n=leave, l=list, h=help ? ' - read response - case "$response" in - [Yy]*) - echo "Removing duplicate K links ..." - rm -v $removes - removes="" - ;; - [Nn]*) - echo -e "OK, leaving them.\n" - removes="" - ;; - [Ll]*) - echo - echo $removes - echo - ;; - [Hh]*) - dupdaemonhelp - ;; - esac - done - fi - ;; - 1.1.6 | 1.1.6elf | 1.2.[0123] | 1.2.[0123]elf ) - response='' - while [ -z "$response" ]; do - echo -n ' -The version of dpkg you'\''re upgrading from had a problem with the +# Remove the /usr/info symlinks we used to generate +remove_info_symlink() { + if [ -L /usr/info ]; then + echo "Removing /usr/info symlink ..." + rm /usr/info + elif [ -L /usr/info/dir ]; then + echo "Removing /usr/info/dir symlink ..." + rm /usr/info/dir + fi +} + + +# Repair damage to /usr/info caused by broken install-info +fix_damaged_info() { + echo -n " +The version of dpkg you're upgrading from had a problem with the install-info program used to maintain the /usr/info/dir file. It may have corrupted the file, for example by placing new entries for the -menu in it before the `* Menu'\'' line (thus making them ineffective) or +menu in it before the \`* Menu' line (thus making them ineffective) or by creating several identical sections. I can try to sort these problems out, but beware that this process is not guaranteed not to mess up a dir file which has things that look like menu entries in the introductory paragraphs. The distributed dir -files do not do this, so if you haven'\''t edited /usr/info/dir it'\''s -almost certainly safe to say `yes'\'' to the next question. - -If you say `no'\'' you may wish to check and/or edit /usr/info/dir yourself. - -Try to check/repair /usr/info/dir automatically ? [y/n] ' - read response - case "$response" in - [Yy]* | '') response=yes ;; - [Nn]*) response=no ;; - *) response='' ;; - esac - done - if [ "$response" = yes ]; then - echo " -Checking/repairing /usr/info/dir ..." - cleanup-info --unsafe - echo - else - echo " -OK. -" - fi +files do not do this, so if you haven't edited /usr/info/dir it's +almost certainly safe to say \"yes\" to the next question. + +If you say \"no\" you may wish to check and/or edit /usr/info/dir yourself. + +Try to check/repair /usr/info/dir automatically ? [y/n] " + read response + case "$response" in + [yY]*|"") + echo "Checking/repairing /usr/info/dir ..." + cleanup-info --unsafe + ;; + *) + echo "OK, leaving it alone." + ;; + esac +} + + +# Remove stop links from runlevels which also have start links +# Dates back to the days when update-rc.d was part of dpkg. +remove_duplicate_daemons() { + for lvl in 0 1 2 3 4 5 6; do + cd /etc/rc$lvl.d + for kill in K[0-9][0-9]*; do + if [ -n "`echo \"x$kill\" | tr -d 0-9A-Za-z_-`" ]; then + continue + fi + + start="`echo $kill | sed -e 's/^K/S/'`" + if ! [ -L $start ] && [ -L $kill ] \ + || [ "`ls -Li $kill 2>/dev/null | awk '{print $1}'`" != \ + "`ls -Li $start 2>/dev/null | awk '{print $1}'`" ] + then + continue + fi + + removes="$removes rc$lvl.d/$kill" + done + done + + if [ -n "$removes" ]; then + echo -n " +Some daemons and similar services whose scripts have links in the +/etc/rcN.d directories have both start (S) and stop (K) links in +some runlevels. Thus these services get stopped and immediately +restarted at some runlevel changes, which is probably not what +you want. + +I can remove these probably-spurious K links if you like: + $removes + +If you're not sure what to do, say \"no\", and then run delete them +by hand later. + +Shall I remove these links ? [y/n] " + read response + case "$response" in + [yY]*|"") + echo "Removing duplicate K links ..." + cd /etc + rm $removes + ;; + *) + echo "OK, leaving them." ;; esac -fi + fi +} -if [ -d /usr/info ] && [ ! -L /usr/info ] && [ ! -L /usr/info/dir ] \ - && [ -f /usr/info/dir ]; then - echo Moving /usr/info/dir to /usr/share/info/dir. - mv /usr/info/dir /usr/share/info/dir - if [ -f /usr/info/dir.old ]; then - mv /usr/info/dir.old /usr/share/info/dir.old - fi - if [ "`find /usr/info -empty`" = "/usr/info" ]; then - echo Making /usr/info a symlink to /usr/share/info. - rmdir /usr/info - ln -s share/info /usr/info - else - echo Making /usr/info/dir a symlink to /usr/share/info/dir. - ln -sf ../share/info/dir /usr/info/dir - fi -fi +case "$1" in + configure) + case "$2" in + 0.* | 1.0.* | 1.1.0 | 1.1.0[^0-9]* | '' ) + remove_duplicate_daemons + ;; + 1.1.6 | 1.1.6elf | 1.2.[0123] | 1.2.[0123]elf) + fix_damaged_info + ;; + esac + + create_database + move_info_directory + remove_info_symlink + ;; -cd /var/lib/dpkg -for f in diversions statoverride status ; do - if [ ! -f "$f" ] ; then - touch "$f" - fi -done + abort-upgrade|abort-deconfigure|abort-remove) + ;; + + *) + echo "$0 called with unknown argument \`$1'" 1>&2 + exit 1 + ;; +esac +#DEBHELPER# +exit 0 |