[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