#!/bin/sh set -e export LC_ALL=C type=$1 preversion=$2 package_name() { echo libc6 } # Borrowed from sysvinit's postinst. # Function like update-rc.d but simpler & faster. # Usage: updatercd basename start|stop NN runlevel . # # Now we use the real update-rc.d, so now this function should # be equivalent to /usr/sbin/update-rc.d. # updatercd() { if [ ! -f /etc/init.d/$1 ] then return fi if [ -x /usr/sbin/update-rc.d ] then update-rc.d "$@" > /dev/null return $? fi base=$1 shift while [ "$1" != "" ] do if [ "$1" = stop ] then tlet=K else tlet=S fi lev=$2 shift 2 while [ "$1" != "." ] do cd /etc/rc$1.d tmp="`echo $tlet??$base`" case "$tmp" in "$tlet??$base") # Not present yet. ln -s ../init.d/$base $tlet$lev$base ;; *) # Already present. ;; esac shift done shift done } # 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 "" } checkpkgver () { local status pkg pkg=$1 status=$(dpkg -s $pkg 2>/dev/null | grep ^Status: | sed -e 's/^Status: \(.*\) \(.*\) \(.*\)/\3/g') if [ -n "$status" ] && [ "$status" != "not-installed" ] && [ "$status" != "config-files" ]; then echo $(dpkg -s $pkg 2>/dev/null | grep ^Version: | sed -e 's/^Version: *//'); fi } if [ "$type" = "configure" ] then # Add support for /etc/ld.so.conf.d if [ -e /etc/ld.so.conf ]; then [ -z "$(tail -n 1 /etc/ld.so.conf)" ] || echo >> /etc/ld.so.conf else touch /etc/ld.so.conf fi if ! grep -q '^include /etc/ld.so.conf.d/.*\.conf$' /etc/ld.so.conf ; then echo 'include /etc/ld.so.conf.d/*.conf' >> /etc/ld.so.conf fi # We don't use a registry anymore, remove the old file rm -f /etc/ld.so.hwcappkgs # /etc/ld.so.nohwcap code: NOHWCAP # Handle upgrades when libc-opt package has been installed. # When a /etc/ld.so.nohwcap file exists, ld.so only use libraries # from /lib, and ignore all optimised libraries. This file is # inconditionaly created in the preinst script of libc. # Get the list of optimized packages for a given architecture # Before removing a package from this list, make sure it appears # in the Conflicts: line of libc. case $(dpkg --print-architecture) in alpha) hwcappkgs="libc6-alphaev67" ;; i386) hwcappkgs="libc6-i686 libc6-xen" ;; kfreebsd-i386) hwcappkgs="libc0.1-i686" ;; sparc) hwcappkgs="libc6-sparcv9 libc6-sparcv9b" ;; esac # We check the version between the current installed libc and # all optimized packages (on architectures where such packages # exists). all_upgraded=yes if [ -n "$hwcappkgs" ]; then for pkg in $hwcappkgs ; do ver=$(dpkg -l $pkg 2>/dev/null | sed -e '/^i/!d;' -e "s/^i.\s\+$pkg\s\+//;s/\s.*//g") if [ -n "$ver" ] && [ "$ver" != "2.7-18lenny7" ]; then all_upgraded=no fi done fi # If the versions of all optimized packages are the same as the libc # one, we could remove /etc/ld.so.nohwcap. Otherwise, it will be removed # when all optimized packages are upgraded or removed. if [ "$all_upgraded" = yes ] ; then rm -f /etc/ld.so.nohwcap fi # Load debconf module if available if [ -f /usr/share/debconf/confmodule ] ; then . /usr/share/debconf/confmodule fi if [ -n "$preversion" ]; then if [ ! -d /var/mail ] && [ ! -L /var/mail ]; then ln -sf spool/mail /var/mail fi if dpkg --compare-versions "$preversion" lt 2.6-1; then check="apache2-common apache apache-ssl apache-perl autofs at" check="$check boa cucipop courier-authdaemon cron cupsys exim" check="$check exim4-base dovecot-common cucipop lprng lpr" check="$check lpr-ppd mysql-server nis openbsd-inetd" check="$check openldapd postfix postfix-tls rsync samba" check="$check sasl2-bin slapd smail sendmail snmpd ssh" check="$check spamassassin vsftpd wu-ftpd wu-ftpd-academ wwwoffle" check="$check webmin dropbear" # NSS services check: NSS_CHECK echo -n "Checking for services that may need to be restarted..." # 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/\bexim4-base\b/exim4/g' \ -e's/\blpr\b/lpd/g' \ -e's/\blpr-ppd\b/lpd-ppd/g' \ -e's/\bsasl2-bin\b/saslauthd/g' \ ) echo echo "Checking init scripts..." rl=$(runlevel | sed 's/.*\ //') 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." 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 -1) fi if [ -n "$idl" ] && [ -x $idl ]; then services="$service $services" fi fi done if [ -n "$services" ]; then if [ -f /usr/share/debconf/confmodule ] ; then db_version 2.0 db_reset glibc/restart-services db_set glibc/restart-services "$services" db_input critical glibc/restart-services || true db_go || true db_get glibc/restart-services if [ "x$RET" != "x" ] then services="$RET" else services="" fi else echo echo "Name Service Switch update in the C Library: post-installation question." echo echo "Running services and programs that are using NSS need to be restarted," echo "otherwise they might not be able to do lookup or authentication any more" echo "(for services such as ssh, this can affect your ability to login)." echo "Note: restarting sshd/telnetd should not affect any existing connections." echo echo "The services detected are: " echo " $services" echo echo "If other services have begun to fail mysteriously after this upgrade, it is" echo "probably necessary to restart them too. We recommend that you reboot your" echo "machine after the upgrade to avoid NSS-related troubles." echo frontend=`echo "$DEBIAN_FRONTEND" | tr '[:upper:]' '[:lower:]'` if [ "$frontend" = noninteractive ]; then echo "Non-interactive mode, restarting services" answer=yes else echo -n "Do you wish to restart services? [Y/n] " read answer case $answer in N*|n*) services="" ;; *) ;; esac fi fi echo if [ "$services" != "" ]; then echo "Restarting services possibly affected by the upgrade:" failed="" 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 -1) fi echo -n " $service: stopping..." $idl stop > /dev/null 2>&1 || true sleep 2 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 if [ -f /usr/share/debconf/confmodule ] ; then db_fset glibc/restart-failed seen false db_subst glibc/restart-failed services "$failed" db_input critical glibc/restart-failed || true db_go || true else echo "The following services failed to start: $failed" echo echo "You will need to start these manually by running \`/etc/init.d/ start'" echo "If the service still fails to start, you may need to file a bug on" echo "$(package_name) or the service involved." frontend=`echo "$DEBIAN_FRONTEND" | tr '[:upper:]' '[:lower:]'` if [ "$frontend" != noninteractive ]; then echo echo -n "Press ENTER to continue: " read foo fi fi else echo "Services restarted successfully." fi fi # Shut down the frontend, to make sure none of the # restarted services keep a connection open to it if [ -f /usr/share/debconf/confmodule ] ; then db_stop fi else echo "Nothing to restart." fi fi # end upgrading and $preversion lt 2.6-1 fi # Upgrading # Generate cache file /usr/lib/gconv/gconv-modules.cache iconvconfig || true # # DO NOT FOLLOW THIS EXAMPLE IN OTHER PACKAGES updatercd glibc.sh start 01 S . if [ -x /usr/sbin/invoke-rc.d ]; then invoke-rc.d glibc.sh start else /etc/init.d/glibc.sh 2>/dev/null || true fi fi if [ "`uname -s`" = Linux ]; then # # Upgrade init if possible. There was a bug in all versions # up to and including 2.75-4, which didn't affect i386 but # did affect most other architectures. # sysvinitver="`dpkg -s sysvinit 2>/dev/null | grep ^Version: | sed -e 's/^Version: *//'`" case "`uname -m`" in i?86) badsysvinitver="2.[0-6]*|2.7[0-3]*" ;; *) badsysvinitver="2.[0-6]*|2.7[0-4]*|2.75-*" ;; esac # Black magic. If we are in a chroot, then /proc/1/exe will not resolve to # a file (will return EPERM). This keeps us from breaking things in # debootstrap, and the like. case "$sysvinitver" in $badsysvinitver) ;; *) if [ "$(stat -c %d/%i /)" = "$(stat -Lc %d/%i /proc/1/root 2>/dev/null)" ]; then # the devicenumber/inode pair of / is the same as that of /sbin/init's # root, so we're *not* in a chroot (init u ; sleep 1) fi ;; esac fi # Automatically added by dh_makeshlibs if [ "$1" = "configure" ]; then ldconfig fi # End automatically added section exit 0