%PDF- %PDF-
Direktori : /var/lib/dpkg/info/ |
Current File : /var/lib/dpkg/info/libc6:amd64.postinst |
#!/bin/sh set -e type=$1 preversion=$2 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 # Load debconf module if available if [ -f /usr/share/debconf/confmodule ] ; then . /usr/share/debconf/confmodule fi # Only change LC_ALL after loading debconf to ensure the debconf templates # are properly localized. export LC_ALL=C if [ -n "$preversion" ] && [ -x "$(command -v ischroot)" ] && ! ischroot; then if dpkg --compare-versions "$preversion" lt 2.39; then check="" [ -f /var/run/services.need_restart ] && check=$(sort -u /var/run/services.need_restart 2>/dev/null) # Change service names back into package names, so that we can # double-check package installation. check=$(echo "$check" | \ sed -e's/\batd\b/at/g' \ -e's/\bdovecot\b/dovecot-common/g' \ -e's/\bexim4\b/exim4-base/g' \ -e's/\blpd\b/lpr/g' \ -e's/\blpd-ppd\b/lpr-ppd/g' \ -e's/\bmysql\b/mysql-server/g' \ -e's/\bsaslauthd\b/sasl2-bin/g' \ -e's/\bsmbd\b/samba/g' \ -e's/\bpostgresql\b/postgresql-common/g' \ ) # Check to see which of the services that were running at unpack # time are still around # the following substitution processes the check variable # and returns results in the services variable # NSS services check: echo -n "Checking for services that may need to be restarted..." # Only get the ones that are installed, of the same architecture # as libc (or arch all) and configured. Restart openssh-server even # if only half-configured to continue accepting new connections # during the upgrade. [ -n "$check" ] && check=$(dpkg-query -W -f='${binary:Package} ${Status} ${Architecture}\n' $check 2> /dev/null | \ grep -E "(^openssh-server .* unpacked|installed) (all|${DPKG_MAINTSCRIPT_ARCH})$" | sed 's/[: ].*//') # some init scripts don't match the package names check=$(echo $check | \ sed -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/\bmysql-server\b/mysql/g' \ -e's/\bopenssh-server\b/ssh/g' \ -e's/\bsasl2-bin\b/saslauthd/g' \ -e's/\bsamba\b/smbd/g' \ -e's/\bpostgresql-common\b/postgresql/g' \ ) echo echo "Checking init scripts..." for service in $check; do invoke-rc.d ${service} status >/dev/null 2>/dev/null && status=0 || status=$? if [ "$status" = "0" ] || [ "$status" = "2" ] ; then services="$service $services" elif [ "$status" = "100" ] ; then echo "WARNING: init script for $service not found." fi done # If there are services that we *stopped* in the preinst, don't # forget to restart them now if [ -e /var/run/services.need_start ]; then services="$(sort -u /var/run/services.need_start) $services" fi if [ -n "$services" ]; then echo "Restarting services possibly affected by the upgrade:" failed="" for service in $services; do case "$service" in gdm*) idlopt="reload" ;; *) idlopt="restart" ;; esac echo -n " $service: restarting..." if invoke-rc.d ${service} $idlopt > /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" if [ "$RELEASE_UPGRADE_MODE" = desktop ]; then db_input medium glibc/restart-failed || true else db_input critical glibc/restart-failed || true fi db_go || true else echo "The following services failed to start: $failed" echo echo "You will need to start these manually by running \`invoke-rc.d <service> start'" echo "If the service still fails to start, you may need to file a bug on" echo "${DPKG_MAINTSCRIPT_PACKAGE}:${DPKG_MAINTSCRIPT_ARCH} 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." rm -f /var/run/services.need_start /var/run/services.need_restart 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.39 # give a reboot notification on al upgrades (LP: #1546457) if [ -x /usr/share/update-notifier/notify-reboot-required ]; then /usr/share/update-notifier/notify-reboot-required fi fi # Upgrading # Restart init. Currently handles chroots, systemd and upstart, and # assumes anything else is going to not fail at behaving like # sysvinit: TELINIT=yes if ischroot 2>/dev/null; then # Don't bother trying to re-exec init from a chroot: TELINIT=no elif [ -n "${DPKG_ROOT:-}" ]; then # Do not re-exec init if we are operating on a chroot from outside: TELINIT=no elif [ -d /run/systemd/system ]; then # Restart systemd on upgrade, but carefully. # The restart is wanted because of LP: #1942276 and Bug: #993821 # The care is needed because of https://bugs.debian.org/753725 # (if systemd --help fails the system might still be quite broken but # that seems better than the kernel panic that results if systemd # cannot reexec itself). TELINIT=no if systemd --help >/dev/null 2>/dev/null; then systemctl daemon-reexec else echo "Error: Could not restart systemd, systemd binary not working" >&2 fi elif [ -x "`which initctl`" ]; then UPSTART=$(initctl version 2>/dev/null | awk '/upstart/ {print $3}' | tr -d ')') if dpkg --compare-versions "$UPSTART" lt-nl 1.6.1; then # This is an old upstart that can't re-exec statefully: TELINIT=no touch /var/run/init.upgraded fi fi if [ "$TELINIT" = "yes" ]; then telinit u 2>/dev/null || true ; sleep 1 fi fi exit 0