#!/bin/bash # postinst based heavily on the postinst of libssl0.9.8, courtesy of # Christoph Martin. . /usr/share/debconf/confmodule set -e # element() is a helper function for file-rc: element() { local element list IFS element="$1" [ "$2" = "in" ] && shift list="$2" [ "$list" = "-" ] && return 1 [ "$list" = "*" ] && return 0 IFS="," set -- $list case $element in "$1"|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8"|"$9") return 0 esac return 1 } # filerc (runlevel, service) returns /etc/init.d/service, if service is # running in $runlevel: filerc() { local runlevel basename runlevel=$1 basename=$2 while read LINE do case $LINE in \#*|"") continue esac set -- $LINE SORT_NO="$1"; STOP="$2"; START="$3"; CMD="$4" [ "$CMD" = "/etc/init.d/$basename" ] || continue if element "$runlevel" in "$START" || element "S" in "$START" then echo "/etc/init.d/$basename" return 0 fi done < /etc/runlevel.conf echo "" } installed_services() { check="$@" # Only get the ones that are installed, and configured check=$(dpkg -s $check 2> /dev/null | egrep '^Package:|^Status:' | awk '{if ($1 ~ /^Package:/) { package=$2 } else if ($0 ~ /^Status: .* installed$/) { print package }}') # some init scripts don't match the package names check=$(echo $check | \ sed -e's/\bapache2-common\b/apache2/g' \ -e's/\bat\b/atd/g' \ -e's/\bdovecot-common\b/dovecot/g' \ -e's/\bdante-server\b/danted/g' \ -e's/\bexim4-base\b/exim4/g' \ -e's/\bheartbeat-2\b/heartbeat/g' \ -e's/\bhylafax-server\b/hylafax/g' \ -e's/\bpartimage-server\b/partimaged/g' \ -e's/\bsasl2-bin\b/saslauthd/g' \ ) for service in $check; do if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then idl=$(ls /etc/init.d/${service} 2> /dev/null | head -n 1) if [ -n "$idl" ] && [ -x $idl ]; then services="$service $services" else echo "WARNING: init script for $service not found." >&2 fi else if [ -f /usr/share/file-rc/rc ] || [ -f /usr/lib/file-rc/rc ] && [ -f /etc/runlevel.conf ]; then idl=$(filerc $rl $service) else idl=$(ls /etc/rc${rl}.d/S??${service} 2> /dev/null | head -n 1) fi if [ -n "$idl" ] && [ -x $idl ]; then services="$service $services" fi fi done echo "$services" } if [ "$1" = "configure" ] then if [ ! -z "$2" ]; then if dpkg --compare-versions "$2" lt 0.99.10.0; then db_version 2.0 echo -n "Checking for services that may need to be restarted..." check="apache2-common at bayonne cherokee courier-authdaemon" check="$check cron cups" check="$check dante-server diald dovecot-common exim exim4-base" check="$check fcron fireflier-server freeradius gdm heartbeat" check="$check heartbeat-2 hylafax-server iiimf-server inn2" check="$check kannel linesrv linesrv-mysql lsh-server" check="$check muddleftpd netatalk nuauth partimage-server" check="$check perdition pgpool popa3d postgresql-7.4" check="$check postgresql-8.1 postgresql-8.2 proftpd pure-ftpd" check="$check pure-ftpd-ldap pure-ftpd-mysql" check="$check pure-ftpd-postgresql racoon samba sasl2-bin" check="$check sfs-server solid-pop3d squid squid3 tac-plus" check="$check vsftpd wu-ftpd wzdftpd xrdp yardradius yaws" if ! who | awk '{print $2}'|grep -q ':[0-9]'; then check="$check kdm wdm xdm" fi echo "Checking init scripts..." services=$(installed_services "$check") if [ -n "$services" ]; then db_reset libpam0g/restart-services db_set libpam0g/restart-services "$services" db_input critical libpam0g/restart-services || true db_go || true db_get libpam0g/restart-services if [ "x$RET" != "x" ] then services=$RET else services="" fi echo if [ "$services" != "" ]; then echo "Restarting services possibly affected by the upgrade:" failed="" rl=$(runlevel | sed 's/.*\ //') for service in $services; do if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then idl="invoke-rc.d ${service}" elif [ -f /usr/share/file-rc/rc ] || [ -f /usr/lib/file-rc/rc ] && [ -f /etc/runlevel.conf ]; then idl=$(filerc $rl $service) else idl=$(ls /etc/rc${rl}.d/S??${service} 2> /dev/null | head -n 1) fi case "$service" in gdm) echo -n " $service: reloading..." if $idl reload > /dev/null 2>&1; then echo "done." else echo "FAILED! ($?)" failed="$service $failed" fi continue ;; esac echo -n " $service: stopping..." $idl stop > /dev/null 2>&1 || true sleep 1 echo -n "starting..." if $idl start > /dev/null 2>&1; then echo "done." else echo "FAILED! ($?)" failed="$service $failed" fi done echo if [ -n "$failed" ]; then db_subst libpam0g/restart-failed services "$failed" db_input critical libpam0g/restart-failed || true db_go || true else echo "Services restarted successfully." fi echo fi else echo "Nothing to restart." fi if who | awk '{print $2}' | grep -q ':[0-9]'; then dms="" for service in kdm wdm xdm; do case "$services" in *$service*) ;; *) dms="$dms $service" esac done services=$(installed_services "$dms") if [ -n "$services" ]; then db_input critical libpam0g/xdm-needs-restart || true db_go || true fi fi # Shut down the frontend, to make sure none of the # restarted services keep a connection open to it db_stop fi # end upgrading and $2 lt 0.99.10.0 fi # Upgrading fi #DEBHELPER#