#!/bin/sh set -e if [ "$1" = configure ]; then # A dependent library of Upstart has changed, so restart Upstart # such that it can safely unmount the root filesystem (LP: #740390) # Query running version of Upstart, but only when we know # that initctl will work. # # The calculated version string may be the null string if # Upstart is not running (where for example an alternative # init is running outside a chroot environment) or if the # query failed for some reason. However, the version check # below handles a null version string correctly. UPSTART_VERSION_RUNNING=$(initctl version 2>/dev/null |\ awk '{print $3}'|tr -d ')' || :) if ischroot; then # Do not honour re-exec when requested from within a # chroot since: # # (a) The version of Upstart outside might not support it. # (b) An isolated environment such as a chroot should # not be able to modify its containing environment. # # A sufficiently new Upstart will actually handle a re-exec # request coming from telinit within a chroot correctly (by # doing nothing) but it's simple enough to perform the check # here and save Upstart the effort. : elif dpkg --compare-versions "$UPSTART_VERSION_RUNNING" ge 1.6.1; then # We are not running inside a chroot and the running version # of Upstart supports stateful re-exec, so we can # restart immediately. # # XXX: Note that the check on the running version must # remain *indefinitely* since it's the only safe way to # know if stateful re-exec is supported: simply checking # packaged version numbers is not sufficient since # the package could be upgraded multiple times without a # reboot. telinit u || : else # Before we shutdown or reboot, we need to re-exec so that we # can safely remount the root filesystem; we can't just do that # here because we lose state. touch /var/run/init.upgraded || : fi fi #DEBHELPER# exit 0