Package: quagga
Version: 0.99.21-3~bpo60+1
Severity: wishlist
Tags: patch
Thanks to /lib/lsb/init-functions it's very easy to add support for status
to /etc/init.d/quagga. This allows using the init script with HA resource
managers like pacemaker. See the very simple attached patch.
-- System Information:
Debian Release: 6.0.5
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable'), (99, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.32-5-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages quagga depends on:
ii adduser 3.112+nmu2 add and remove users and groups
ii debconf [debconf-2.0] 1.5.36.1 Debian configuration management sy
ii iproute 20100519-3 networking and traffic control too
ii libc6 2.11.3-3 Embedded GNU C Library: Shared lib
ii libcap2 1:2.19-3 support for getting/setting POSIX.
ii libpam0g 1.1.1-6.1+squeeze1 Pluggable Authentication Modules l
ii libreadline6 6.1-3 GNU readline and history libraries
ii logrotate 3.7.8-6 Log rotation utility
quagga recommends no packages.
Versions of packages quagga suggests:
ii snmpd 5.4.3~dfsg-2 SNMP (Simple Network Management Pr
-- Configuration Files:
/etc/init.d/quagga changed:
. /lib/lsb/init-functions
PATH=/bin:/usr/bin:/sbin:/usr/sbin
D_PATH=/usr/lib/quagga
C_PATH=/etc/quagga
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld"
pidfile()
{
echo "/var/run/quagga/$1.pid"
}
started()
{
[ -e `pidfile $1` ] && kill -0 `cat \`pidfile $1\`` 2> /dev/null &&
return 0
return 1
}
vtysh_b ()
{
# Rember, that all variables have been incremented by 1 in
convert_daemon_prios()
if [ "$vtysh_enable" = 2 -a -f $C_PATH/Quagga.conf ]; then
/usr/bin/vtysh -b
fi
}
check_daemon()
{
# If the integrated config file is used the others are not checked.
if [ -r "$C_PATH/Quagga.conf" ]; then
return 0
fi
# vtysh_enable has no config file nor binary so skip check.
# (Not sure why vtysh_enable is in this list but does not hurt)
if [ $1 != "watchquagga" -a $1 != "vtysh_enable" ]; then
# check for daemon binary
if [ ! -x "$D_PATH/$1" ]; then return 1; fi
# check for config file
if [ ! -r "$C_PATH/$1.conf" ]; then
echo -n " (not started without config file)"
return 1
fi
fi
return 0
}
start()
{
echo -n " $1"
if ! check_daemon $1; then return; fi
start-stop-daemon \
--start \
--pidfile=`pidfile $1` \
--exec "$D_PATH/$1" \
-- \
`eval echo "$""$1""_options"`
}
stop()
{
if ! started "$1" ; then
echo -n " ($1)"
return 0
else
PIDFILE=`pidfile $1`
PID=`cat $PIDFILE 2>/dev/null`
start-stop-daemon --stop --quiet --oknodo --exec "$D_PATH/$1"
#
# Now we have to wait until $DAEMON has _really_ stopped.
#
if test -n "$PID" && kill -0 $PID 2>/dev/null; then
echo -n " (waiting) ."
cnt=0
while kill -0 $PID 2>/dev/null; do
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ]; then
# Waited 120 secs now, fail.
echo -n "Failed.. "
break
fi
sleep 2
echo -n "."
done
fi
echo -n " $1"
rm -f `pidfile $1`
fi
}
convert_daemon_prios()
{
for name in $DAEMONS zebra vtysh_enable watchquagga_enable; do
# First, assign the value set by the user to $value
eval value=\$$name
# Daemon not activated or entry missing?
if [ "$value" = "no" -o "$value" = "" ]; then value=0; fi
# These strings parsed for backwards compatibility.
if [ "$value" = "yes" -o "$value" = "true" ]; then value=1; fi
# Zebra is threatened special. It must be between 0=off and the first
# user assigned value "1" so we increase all other enabled daemons'
values.
if [ "$name" != "zebra" -a "$value" -gt 0 ]; then value=`expr
"$value" + 1`; fi
# If e.g. name is zebra then we set "zebra=yes".
eval $name=$value
done
}
start_watchquagga()
{
local daemon_name
local daemon_prio
local watchlist
# Start the monitor daemon only if desired.
if [ 0 -eq "$watchquagga_enable" ]; then
return
fi
# Which daemons have been started?
for daemon_name in $DAEMONS; do
eval daemon_prio=\$$daemon_name
if [ "$daemon_prio" -gt 0 ]; then
watchlist="$watchlist $daemon_name"
fi
done
# Check if at least one daemon is activated.
if [ -n "$watchlist" ]; then
watchquagga_options="$watchquagga_options $watchlist"
echo -n "Starting Quagga monitor daemon:"
start watchquagga
echo "."
fi
}
stop_watchquagga()
{
echo -n "Stopping Quagga monitor daemon:"
stop watchquagga
echo "."
}
stop_prio()
{
local wanted_prio
local daemon_prio
local daemon_list
wanted_prio=$1
daemon_list=${2:-$DAEMONS}
echo -n "Stopping Quagga daemons (prio:$wanted_prio):"
for prio_i in `seq 10 -1 $wanted_prio`; do
for daemon_name in $daemon_list; do
eval daemon_prio=\$$daemon_name
if [ $daemon_prio -eq $prio_i ]; then
stop "$daemon_name"
fi
done
done
echo "."
}
start_prio()
{
local wanted_prio
local daemon_prio
local daemon_list
wanted_prio=$1
daemon_list=${2:-$DAEMONS}
echo -n "Starting Quagga daemons (prio:$wanted_prio):"
for prio_i in `seq 1 $wanted_prio`; do
for daemon_name in $daemon_list; do
eval daemon_prio=\$$daemon_name
if [ $daemon_prio -eq $prio_i ]; then
start "$daemon_name"
fi
done
done
echo "."
}
[ ! -r "$C_PATH/daemons" ] && exit 0
. "$C_PATH/daemons"
. "$C_PATH/debian.conf"
convert_daemon_prios
if [ ! -d /var/run/quagga ]; then
mkdir -p /var/run/quagga
chown quagga:quagga /var/run/quagga
chmod 755 /var/run/quagga
fi
case "$1" in
start)
# Try to load this necessary (at least for 2.6) module.
if [ -d /lib/modules/`uname -r` ] ; then
echo "Loading capability module if not yet done."
set +e; LC_ALL=C modprobe -a capability 2>&1 | egrep -v "(not
found|Can't locate)"; set -e
fi
# Start all daemons
cd $C_PATH/
start_prio 10 $2
vtysh_b
start_watchquagga
;;
1|2|3|4|5|6|7|8|9|10)
# Stop/start daemons for the appropriate priority level
stop_prio $1
start_prio $1
vtysh_b
;;
stop|0)
# Stop all daemons at level '0' or 'stop'
stop_watchquagga
stop_prio 0 $2
echo "Removing all routes made by zebra."
ip route flush proto zebra
;;
restart|force-reload)
$0 stop $2
sleep 1
$0 start $2
;;
status)
status_of_proc -p `pidfile watchquagga` watchquagga Quagga && exit 0 ||
exit $?
;;
*)
echo "Usage: /etc/init.d/quagga
{start|stop|restart|force-reload|<priority>} [daemon]"
echo " E.g. '/etc/init.d/quagga 5' would start all daemons with a
prio 1-5."
echo " Read /usr/share/doc/quagga/README.Debian for details."
exit 1
;;
esac
exit 0
/etc/quagga/daemons changed:
zebra=yes
bgpd=yes
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
-- debconf information:
* quagga/really_stop: true
--- quagga 2012-05-07 05:26:22.000000000 +0800
+++ /etc/init.d/quagga 2012-10-09 08:22:20.912252303 +0800
@@ -13,6 +13,8 @@
### END INIT INFO
#
+. /lib/lsb/init-functions
+
PATH=/bin:/usr/bin:/sbin:/usr/sbin
D_PATH=/usr/lib/quagga
C_PATH=/etc/quagga
@@ -282,6 +284,10 @@
$0 start $2
;;
+ status)
+ status_of_proc -p `pidfile watchquagga` watchquagga Quagga && exit 0
|| exit $?
+ ;;
+
*)
echo "Usage: /etc/init.d/quagga
{start|stop|restart|force-reload|<priority>} [daemon]"
echo " E.g. '/etc/init.d/quagga 5' would start all daemons with a
prio 1-5."