summaryrefslogtreecommitdiff
path: root/debian/dpkg.postinst
diff options
context:
space:
mode:
authorScott James Remnant <scott@netsplit.com>2005-03-11 09:00:14 +0000
committerScott James Remnant <scott@netsplit.com>2005-03-11 09:00:14 +0000
commit841a630143cd3a35dbf8bce0a111ebd39dd12f44 (patch)
tree0f85bbcb279f41e840bfcf6faceaab43770d2447 /debian/dpkg.postinst
parentac8c6923a8654da81cbc6730213147961026eb8f (diff)
downloaddpkg-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-xdebian/dpkg.postinst265
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