110 lines
3.3 KiB
Bash
Executable File
110 lines
3.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
MYNAME=resolvconf.preinst
|
|
report() { echo "${MYNAME}: $*" ; }
|
|
report_err() { report "Error: $*" >&2 ; }
|
|
report_warn() { report "Warning: $*" >&2 ; }
|
|
report_info() { report "$*" >&2 ; }
|
|
|
|
is_installed() {
|
|
# Same function in preinst, postinst, postrm
|
|
[ "$1" ] || return 1
|
|
dpkg-query -W -f='${Status}\n' "$1" 2>/dev/null | grep -siq '^[[:alpha:]]\+ [[:alpha:]]\+ installed$' >/dev/null 2>&1
|
|
}
|
|
|
|
|
|
### Create run-time directories ###
|
|
#
|
|
# We create the run-time directories here, in the preinst, so that even if
|
|
# resolvconf is run before the postinst runs there is nevertheless a place
|
|
# for resolvconf to store data. The latter can occur if resolvconf
|
|
# is installed simultaneously with a caching nameserver package whose
|
|
# postinst runs resolvconf to add its IP address.
|
|
#
|
|
case "$1" in
|
|
install|upgrade)
|
|
# Ensure that /etc/resolvconf exists.
|
|
mkdir -p /etc/resolvconf
|
|
|
|
if [ -L /etc/resolvconf/run ] ; then
|
|
# Make sure that the symlink is canonicalizable.
|
|
RUN_CANONICALPATH="$(readlink -f /etc/resolvconf/run || :)"
|
|
if [ -z "$RUN_CANONICALPATH" ] ; then
|
|
# It's not canonicalizable
|
|
report_warn "Deleting old symlink /etc/resolvconf/run, the canonical path of whose target could not be determined"
|
|
rm -f /etc/resolvconf/run
|
|
fi
|
|
fi
|
|
|
|
# /etc/resolvconf/run is not a non-canonicalizable symlink.
|
|
|
|
# Delete /etc/resolvconf/run if it exists but is neither a directory nor a link to one
|
|
if [ -e /etc/resolvconf/run ] && [ ! -d /etc/resolvconf/run ] ; then
|
|
report_warn "Deleting /etc/resolvconf/run which isn't a directory"
|
|
rm -f /etc/resolvconf/run
|
|
fi
|
|
|
|
# OK, now /etc/resolvconf/run is either:
|
|
# * nonexistent, or
|
|
# * a dangling but canonicalizable symlink, or
|
|
# * a symlink to a directory, or
|
|
# * a directory.
|
|
|
|
# Create subdirectory
|
|
if [ -d /etc/resolvconf/run ] ; then
|
|
# It's a directory or a symlink to one
|
|
[ -d /etc/resolvconf/run/interface ] || mkdir /etc/resolvconf/run/interface
|
|
elif [ -L /etc/resolvconf/run ] ; then
|
|
# It's a dangling but canonicalizable symlink
|
|
mkdir "$RUN_CANONICALPATH" "${RUN_CANONICALPATH}/interface"
|
|
else
|
|
# It's nonexistent.
|
|
# Make directory at the standard location.
|
|
if mkdir -p /run/resolvconf/interface ; then
|
|
ln -s /run/resolvconf /etc/resolvconf/run
|
|
else
|
|
report_err "Could not create run-time directories; aborting"
|
|
exit 1
|
|
fi
|
|
fi
|
|
;;
|
|
# abort-upgrade)
|
|
# Don't do anything because we don't anything in the postrm on upgrade or on failed-upgrade
|
|
# ;;
|
|
esac
|
|
|
|
|
|
### Prepare to notify already configured packages of our installation ###
|
|
|
|
case "$1" in
|
|
install)
|
|
# Create list of packages that might need to be notified of the installation of resolvconf
|
|
if [ -d /usr/lib/resolvconf/dpkg-event.d ] ; then
|
|
NOTIFICATION_HOOK_SCRIPTS="$(cd /usr/lib/resolvconf/dpkg-event.d >/dev/null ; run-parts --test .)"
|
|
PACKAGES_TO_NOTIFY=""
|
|
for SCRPT in $NOTIFICATION_HOOK_SCRIPTS ; do
|
|
PKG="${SCRPT#./}"
|
|
if is_installed "$PKG" ; then
|
|
PACKAGES_TO_NOTIFY="${PACKAGES_TO_NOTIFY:+$PACKAGES_TO_NOTIFY }$PKG"
|
|
fi
|
|
done
|
|
rm -f /etc/resolvconf/run/packages-to-notify
|
|
if [ "$PACKAGES_TO_NOTIFY" ] ; then
|
|
echo "$PACKAGES_TO_NOTIFY" > /etc/resolvconf/run/packages-to-notify
|
|
fi
|
|
fi
|
|
;;
|
|
# upgrade)
|
|
# Don't do anything
|
|
# ;;
|
|
# abort-upgrade)
|
|
# Don't do anything because we don't anything in the postrm on upgrade or on failed-upgrade
|
|
# ;;
|
|
esac
|
|
|
|
|
|
|
|
exit 0
|