[SCM] Debian packaging for apache2 branch, master, updated. debian/2.2.22-3-28-g425eeef

Arno Töll arno at debian.org
Mon Jun 11 15:19:03 UTC 2012


The following commit has been merged in the master branch:
commit 425eeefca35b340e619edcc8ba06a8ca95919e3c
Author: Arno Töll <arno at debian.org>
Date:   Mon Jun 11 17:18:55 2012 +0200

    Improve the init script when used with fancy output

diff --git a/debian/apache2.2-common.apache2.init b/debian/apache2.2-common.apache2.init
old mode 100644
new mode 100755
index f49cd55..43986a1
--- a/debian/apache2.2-common.apache2.init
+++ b/debian/apache2.2-common.apache2.init
@@ -9,34 +9,36 @@
 # Short-Description: Start/stop apache2 web server
 ### END INIT INFO
 
-set -e
+DESC="web server"
+NAME=apache2
+DAEMON=/usr/sbin/$NAME
 
 SCRIPTNAME="${0##*/}"
 SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
 if [ -n "$APACHE_CONFDIR" ] ; then
-	if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
-		DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
-	else
-		DIR_SUFFIX=
-	fi
+        if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
+                DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
+        else
+                DIR_SUFFIX=
+        fi
 elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then
-	DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
-	APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
+        DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
+        APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
 else
-	DIR_SUFFIX=
-	APACHE_CONFDIR=/etc/apache2
+        DIR_SUFFIX=
+        APACHE_CONFDIR=/etc/apache2
 fi
 if [ -z "$APACHE_ENVVARS" ] ; then
-	APACHE_ENVVARS=$APACHE_CONFDIR/envvars
+        APACHE_ENVVARS=$APACHE_CONFDIR/envvars
 fi
 export APACHE_CONFDIR APACHE_ENVVARS
 
 ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
 if [ "$APACHE_CONFDIR" != /etc/apache2 ] ; then
-	ENV="$ENV APACHE_CONFDIR=$APACHE_CONFDIR"
+        ENV="$ENV APACHE_CONFDIR=$APACHE_CONFDIR"
 fi
 if [ "$APACHE_ENVVARS" != "$APACHE_CONFDIR/envvars" ] ; then
-	ENV="$ENV APACHE_ENVVARS=$APACHE_ENVVARS"
+        ENV="$ENV APACHE_ENVVARS=$APACHE_ENVVARS"
 fi
 
 
@@ -50,237 +52,267 @@ HTCACHECLEAN_OPTIONS=""
 
 APACHE_HTTPD=$(. $APACHE_ENVVARS && echo $APACHE_HTTPD)
 if [ -z "$APACHE_HTTPD" ] ; then
-	APACHE_HTTPD=/usr/sbin/apache2
+        APACHE_HTTPD=/usr/sbin/apache2
 fi
-if [ ! -x $APACHE_HTTPD ] ; then
-	echo "No apache MPM package installed"
-	exit 0
-fi
-
-. /lib/lsb/init-functions
-
-test -f /etc/default/rcS && . /etc/default/rcS
 
+# Read configuration variable file if it is present
 if [ -f /etc/default/apache2$DIR_SUFFIX ] ; then
-	. /etc/default/apache2$DIR_SUFFIX
+        . /etc/default/apache2$DIR_SUFFIX
 elif [ -f /etc/default/apache2 ] ; then
-	. /etc/default/apache2
+        . /etc/default/apache2
 fi
 
+PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+. /lib/lsb/init-functions
+
+
+# Now, set defaults:
 APACHE2CTL="$ENV /usr/sbin/apache2ctl"
 HTCACHECLEAN="$ENV /usr/sbin/htcacheclean"
-
 PIDFILE=$(. $APACHE_ENVVARS && echo $APACHE_PID_FILE)
-if [ -z "$PIDFILE" ] ; then
-	echo ERROR: APACHE_PID_FILE needs to be defined in $APACHE_ENVVARS >&2
-	exit 2
-fi
+APACHE2_INIT_MESSAGE=""
 
 
-check_htcacheclean() {
-	[ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1
+apache_wait_stop() {
+        local STATUS=$1
+
+        PIDTMP=$(pidofproc $DAEMON -p $PIDFILE)
+        if [ -n ${PIDTMP:-} ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
+                local i=0
+                while kill -0 "${PIDTMP:-}" 2> /dev/null;  do
+                        if [ $i = '60' ]; then
+                                break
+                                STATUS=2
+                        fi
+                        log_progress_msg "."
+                        sleep 1
+                        i=$(($i+1))
+                done
+                return $STATUS
+        else
+            return $STATUS
+        fi
+}
 
-	[ "$HTCACHECLEAN_RUN"  = "yes"    ] && return 0
 
-	MODSDIR=$(. $APACHE_ENVVARS && echo $APACHE_MODS_ENABLED)
-	[ "$HTCACHECLEAN_RUN"  = "auto" \
-	  -a -e ${MODSDIR:-$APACHE_CONFDIR/mods-enabled}/disk_cache.load ] && \
-		return 0
-	
-	return 1
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+	# Return
+	#   0 if daemon has been started
+	#   1 if daemon was already running
+	#   2 if daemon could not be started
+
+	if pidofproc "$DAEMON" -p $PIDFILE > /dev/null 2>&1 ; then
+                return 1
+        fi
+
+        if $APACHE2CTL configtest > /dev/null 2>&1; then
+                $APACHE2CTL start
+                return $?
+        else
+                APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed. Please run '$APACHE2CTL configtest' manually and read the log file to discover problems"
+                return 2
+        fi
 }
 
-start_htcacheclean() {
-	if [ ! -d "$HTCACHECLEAN_PATH" ] ; then
-		echo "... directory $HTCACHECLEAN_PATH does not exist!" >&2
-		return 1
-	fi	
-	$HTCACHECLEAN $HTCACHECLEAN_OPTIONS -d$HTCACHECLEAN_DAEMON_INTERVAL \
-			-i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+	# Return
+	#   0 if daemon has been stopped
+	#   1 if daemon was already stopped
+	#   2 if daemon could not be stopped
+	#   other if a failure occurred
+
+        # either "stop" or "graceful-stop"
+        local STOP=$1
+        # can't use pidofproc from LSB here
+        local AP_RET=0
+
+        if pidof $DAEMON > /dev/null 2>&1 ; then
+                if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
+                        AP_RET=2
+                else
+                        AP_RET=1
+                fi
+        else
+            AP_RET=0
+        fi
+
+        # AP_RET is:
+        # 0 if Apache (whichever) is not running
+        # 1 if Apache (whichever) is running
+        # 2 if Apache from the PIDFILE is running
+
+        if [ $AP_RET = 0 ] ; then
+                return 1
+        fi
+
+        if [ $AP_RET = 2 ] && $APACHE2CTL configtest > /dev/null 2>&1; then
+                $APACHE2CTL $STOP > /dev/null 2>&1
+                apache_wait_stop $?
+                return $?
+        else
+                if [ $AP_RET = 2 ]; then
+                        APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
+                        killproc -p $PIDFILE $DAEMON
+                        apache_wait_stop $?
+                        return $?
+                elif [ $AP_RET = 1 ] ; then
+                        APACHE2_INIT_MESSAGE="There are processes named 'apache2' running which do not match your pid file which are left untouched in the name of safety, Please review the situation by hand".
+                        return 2
+                fi
+        fi
+
 }
 
-stop_htcacheclean() {
-	pkill -P 1 -f "htcacheclean.* -p$HTCACHECLEAN_PATH " 2> /dev/null || echo ...not running
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+        if $APACHE2CTL configtest > /dev/null 2>&1; then
+                $APACHE2CTL graceful > /dev/null 2>&1
+                return $?
+        else
+                APACHE2_INIT_MESSAGE="The apache2$DIR_SUFFIX configtest failed. Not doing anything."
+                return 2
+        fi
 }
 
-pidof_apache() {
-	# if there is actually an apache2 process whose pid is in PIDFILE,
-	# print it and return 0.
-	if [ -e "$PIDFILE" ]; then
-		if pidof apache2 | tr ' ' '\n' | grep -w $(cat $PIDFILE); then
-			return 0
-		fi
-	fi
-	return 1
+
+check_htcacheclean() {
+        [ "$HTCACHECLEAN_MODE" = "daemon" ] || return 1
+        [ "$HTCACHECLEAN_RUN"  = "yes"    ] && return 0
+
+        MODSDIR=$(. $APACHE_ENVVARS && echo $APACHE_MODS_ENABLED)
+                [ "$HTCACHECLEAN_RUN"  = "auto" \
+                        -a -e ${MODSDIR:-$APACHE_CONFDIR/mods-enabled}/disk_cache.load ] && \
+                        return 0
+        return 1
 }
 
-apache_stop() {
-	if $APACHE2CTL configtest > /dev/null 2>&1; then
-		# if the config is ok than we just stop normaly
-                $APACHE2CTL stop 2>&1 | grep -v 'not running' >&2 || true
-	else
-		# if we are here something is broken and we need to try
-		# to exit as nice and clean as possible
-		PID=$(pidof_apache) || true
-
-		if [ "${PID}" ]; then
-			# in this case it is everything nice and dandy and we kill apache2
-			echo
-			log_warning_msg "The apache2$DIR_SUFFIX configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!"
-                        kill $PID
-		elif [ "$(pidof apache2)" ]; then
-			if [ "$VERBOSE" != no ]; then
-                                echo " ... failed!"
-			        echo "You may still have some apache2 processes running.  There are"
- 			        echo "processes named 'apache2' which do not match your pid file,"
-			        echo "and in the name of safety, we've left them alone.  Please review"
-			        echo "the situation by hand."
-                        fi
-                        return 1
-		fi
-	fi
+start_htcacheclean() {
+       $HTCACHECLEAN $HTCACHECLEAN_OPTIONS -d$HTCACHECLEAN_DAEMON_INTERVAL \
+                -i -p$HTCACHECLEAN_PATH -l$HTCACHECLEAN_SIZE
 }
 
-apache_wait_stop() {
-	# running ?
-	PIDTMP=$(pidof_apache) || true
-	if kill -0 "${PIDTMP:-}" 2> /dev/null; then
-	    PID=$PIDTMP
-	fi
-
-	apache_stop
-
-	# wait until really stopped
-	if [ -n "${PID:-}" ]; then
-		i=0
-		while kill -0 "${PID:-}" 2> /dev/null;  do
-        		if [ $i = '60' ]; then
-        			break;
-        	 	else
-        			if [ $i = '0' ]; then
-                			echo -n " ... waiting "
-        			else
-                	      		echo -n "."
-        		 	fi
-        			i=$(($i+1))
-        			sleep 1
-        	      fi
-		 done
-	fi
+stop_htcacheclean() {
+        pkill -P 1 -f "htcacheclean.* -p$HTCACHECLEAN_PATH " 2> /dev/null || return 1
 }
 
-case $1 in
-	start)
-		log_daemon_msg "Starting web server" "apache2"
-		if $APACHE2CTL start; then
-			if check_htcacheclean ; then
-				log_progress_msg htcacheclean
-				start_htcacheclean || log_end_msg 1
-			fi
-                        log_end_msg 0
-                else
-                        log_end_msg 1
-                fi
-	;;
-	stop)
-		if check_htcacheclean ; then
-			log_daemon_msg "Stopping web server" "htcacheclean"
-			stop_htcacheclean
-			log_progress_msg "apache2"
-		else
-			log_daemon_msg "Stopping web server" "apache2"
-		fi
-		if apache_wait_stop; then
-                        log_end_msg 0
-                else
-                        log_end_msg 1
-                fi
-	;;
-	graceful-stop)
-		if check_htcacheclean ; then
-			log_daemon_msg "Stopping web server" "htcacheclean"
-			stop_htcacheclean
-			log_progress_msg "apache2"
-		else
-			log_daemon_msg "Stopping web server" "apache2"
-		fi
-		if $APACHE2CTL graceful-stop; then
-                        log_end_msg 0
-                else
-                        log_end_msg 1
-                fi
-	;;
-	reload | force-reload | graceful)
-                log_daemon_msg "Reloading web server config"
-                if pidof_apache > /dev/null ; then
-                    log_progress_msg "apache2"
-                    if ! $APACHE2CTL configtest > /dev/null 2>&1; then
-                        log_end_msg 1
-                        $APACHE2CTL configtest || true
-                        exit 1
-                    fi
-                    if $APACHE2CTL graceful $2 ; then
-                        log_end_msg 0
-                    else
-                        log_end_msg 1
-                    fi
-                else
-                    log_progress_msg "apache2 not running"
-                    log_end_msg 0
-                fi
+
+# Sanity checks. They need to occur after function declarations
+[ -x $APACHE_HTTPD ] || exit 0
+
+if [ ! -x $APACHE_HTTPD ] ; then
+        echo "No apache MPM package installed"
+        exit 0
+fi
+
+if [ -z "$PIDFILE" ] ; then
+        echo ERROR: APACHE_PID_FILE needs to be defined in $APACHE_ENVVARS >&2
+        exit 2
+fi
+
+if check_htcacheclean ; then
+        if [ ! -d "$HTCACHECLEAN_PATH" ] ; then
+                echo "htcacheclean is configured, but directory $HTCACHECLEAN_PATH does not exist!" >&2
+                exit 2
+        fi
+fi
+
+
+
+case "$1" in
+  start)
+	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+	do_start
+        RET_STATUS=$?
+	case "$RET_STATUS" in
+		0|1)
+                        [ "$VERBOSE" != no ] && log_end_msg 0
+                        [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && log_warning_msg "Server was already running"
+                        if check_htcacheclean ; then
+                                [ "$VERBOSE" != no ] && log_daemon_msg "Starting HTTP cache cleaning daemon" "htcacheclean"
+                                start_htcacheclean
+                                [ "$VERBOSE" != no ] && log_end_msg $?
+                        fi
+                ;;
+		2)
+                        [ "$VERBOSE" != no ] && log_end_msg 1
+                        [ "$VERBOSE" != no ] && [ "x$APACHE2_INIT_MESSAGE" != "x" ] && log_failure_msg "$APACHE2_INIT_MESSAGE"
+               ;;
+	esac
 	;;
-	restart)
-		if ! $APACHE2CTL configtest > /dev/null 2>&1; then
-		    $APACHE2CTL configtest || true
-		    log_end_msg 1
-		    exit 1
-		fi
-		if check_htcacheclean ; then
-			log_daemon_msg "Restarting web server" "htcacheclean"
-			stop_htcacheclean
-			log_progress_msg apache2
-		else
-			log_daemon_msg "Restarting web server" "apache2"
-		fi
-		PID=$(pidof_apache) || true
-		if ! apache_wait_stop; then
-                        log_end_msg 1 || true
-                fi
-		if $APACHE2CTL start; then
-			if check_htcacheclean ; then
-				start_htcacheclean || log_end_msg 1
-			fi
-                        log_end_msg 0
-                else
-                        log_end_msg 1
-                fi
+  stop|graceful-stop)
+	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+	do_stop "$1"
+        RET_STATUS=$?
+	case "$RET_STATUS" in
+		0|1)
+                        [ "$VERBOSE" != no ] && log_end_msg 0
+                        [ "$VERBOSE" != no ] && [ $RET_STATUS = 1 ] && log_warning_msg "Server was not running"
+
+                ;;
+		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+	esac
+        [ "$VERBOSE" != no ] && [ "x$APACHE2_INIT_MESSAGE" != "x" ] && log_warning_msg "$APACHE2_INIT_MESSAGE"
+
+        if check_htcacheclean ; then
+                [ "$VERBOSE" != no ] && log_daemon_msg "Stopping HTTP cache cleaning daemon" "htcacheclean"
+                stop_htcacheclean
+                [ "$VERBOSE" != no ] && log_end_msg $?
+        fi
+
 	;;
-	start-htcacheclean)
-		log_daemon_msg "Starting htcacheclean"
-		start_htcacheclean || log_end_msg 1
-		log_end_msg 0
+  status)
+	status_of_proc "apache2" "$NAME" -p $PIDFILE && exit 0 || exit $?
 	;;
-	stop-htcacheclean)
-		log_daemon_msg "Stopping htcacheclean"
-			stop_htcacheclean
-			log_end_msg 0
+  reload|force-reload|graceful)
+	log_daemon_msg "Reloading $DESC" "$NAME"
+	do_reload
+	log_end_msg $?
+        [ "$VERBOSE" != no ] && [ "x$APACHE2_INIT_MESSAGE" != "x" ] && log_warning_msg "$APACHE2_INIT_MESSAGE"
 	;;
-	status)
-		PID=$(pidof_apache) || true
-		if [ -n "$PID" ]; then
-			echo "Apache2$DIR_SUFFIX is running (pid $PID)."
-			exit 0
-		else
-			echo "Apache2$DIR_SUFFIX is NOT running."
-			if [ -e "$PIDFILE" ]; then
-				exit 1
-			else
-				exit 3
-			fi
-		fi
+  restart)
+	log_daemon_msg "Restarting $DESC" "$NAME"
+	do_stop
+	case "$?" in
+	  0|1)
+		do_start
+		case "$?" in
+			0) log_end_msg 0 ;;
+			1) log_end_msg 1 ;; # Old process is still running
+			*) log_end_msg 1 ;; # Failed to start
+		esac
+		;;
+	  *)
+		# Failed to stop
+		log_end_msg 1
+		;;
+	esac
 	;;
-	*)
-		log_success_msg "Usage: /etc/init.d/apache2$DIR_SUFFIX {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}"
-		exit 1
+  start-htcacheclean)
+        log_daemon_msg "Starting htcacheclean"
+        start_htcachelean
+        log_end_msg $?
+        ;;
+  stop-htcacheclean)
+        log_daemon_msg "Stopping htcacheclean"
+        stop_htcacheclean
+        log_end_msg $?
+        ;;
+  *)
+	echo "Usage: $SCRIPTNAME {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean}" >&2
+	exit 3
 	;;
 esac
diff --git a/debian/changelog b/debian/changelog
index 9feaa04..8cc4032 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ apache2 (2.2.22-8) UNRELEASED; urgency=low
 
   * Fix "contradictory comment in /etc/apache2/apache2.conf about the
     .load suffix" (Closes: #676975). Hopefully you are now happy, Vincent. :-)
+  * Rewrite most parts of the init script to make it more readable and improve
+    visual feedback when fancy output is in use.
 
  -- Arno Töll <arno at debian.org>  Mon, 11 Jun 2012 11:14:57 +0200
 

-- 
Debian packaging for apache2



More information about the Pkg-apache-commits mailing list