parent
e405ecc5c4
commit
50097bcb51
@ -0,0 +1,333 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# |
||||||
|
# quagga Starts/stops quagga daemons and watchquagga. |
||||||
|
# Create a daemon.conf file to have that routing daemon |
||||||
|
# started/stopped automagically when using this script |
||||||
|
# without any daemon names as args. |
||||||
|
# If watchquagga is available, it will also be |
||||||
|
# started/stopped if the script is called without |
||||||
|
# any daemon names. |
||||||
|
# |
||||||
|
|
||||||
|
ME=$(basename $0) |
||||||
|
|
||||||
|
usage() { |
||||||
|
echo "Usage: ${ME} {start|stop|restart} [daemon ...]" |
||||||
|
exit 2 |
||||||
|
} |
||||||
|
|
||||||
|
if [ -z "$1" ] |
||||||
|
then |
||||||
|
usage |
||||||
|
else |
||||||
|
COMMAND=$1 |
||||||
|
fi |
||||||
|
shift |
||||||
|
ARG_DAEMONS=$* |
||||||
|
BINDIR=/usr/sbin |
||||||
|
CONFDIR=/etc/quagga |
||||||
|
STATEDIR=/var/run/quagga |
||||||
|
DAEMONS="zebra ripd ripngd ospfd ospf6d bgpd" |
||||||
|
DAEMON_FLAGS=-d |
||||||
|
WATCHQUAGGA_FLAGS="-d -z -T 60 -R" |
||||||
|
WATCHQUAGGA_CMD="$0 watchrestart" |
||||||
|
if [ ${COMMAND} != "watchrestart" ] |
||||||
|
then |
||||||
|
DAEMONS="${DAEMONS} watchquagga" |
||||||
|
fi |
||||||
|
DAEMONS_STARTSEQ=${DAEMONS} |
||||||
|
|
||||||
|
reverse() |
||||||
|
{ |
||||||
|
local revlist r |
||||||
|
revlist= |
||||||
|
for r |
||||||
|
do |
||||||
|
revlist="$r $revlist" |
||||||
|
done |
||||||
|
echo $revlist |
||||||
|
} |
||||||
|
|
||||||
|
DAEMONS_STOPSEQ=$(reverse ${DAEMONS_STARTSEQ}) |
||||||
|
|
||||||
|
#pidof() { |
||||||
|
# ps ax | awk 'match($5, "(^|/)'"$1"'$") > 0 { printf " %s", $1 }' |
||||||
|
#} |
||||||
|
|
||||||
|
quit() { |
||||||
|
echo "${ME}: $1" |
||||||
|
exit 0 |
||||||
|
} |
||||||
|
|
||||||
|
die() { |
||||||
|
echo "${ME}: $1" |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
is_in() { |
||||||
|
local i |
||||||
|
for i in $2 |
||||||
|
do |
||||||
|
[ "$1" = "$i" ] && return 0 |
||||||
|
done |
||||||
|
return 1 |
||||||
|
} |
||||||
|
|
||||||
|
select_subset() { |
||||||
|
local unknown i j |
||||||
|
unknown= |
||||||
|
RESULT= |
||||||
|
for i in $1 |
||||||
|
do |
||||||
|
is_in $i "$2" || unknown="$unknown $i" |
||||||
|
done |
||||||
|
if [ -n "$unknown" ] |
||||||
|
then |
||||||
|
RESULT=$unknown |
||||||
|
return 1 |
||||||
|
else |
||||||
|
for j in $2 |
||||||
|
do |
||||||
|
is_in $j "$1" && RESULT="$RESULT $j" |
||||||
|
done |
||||||
|
return 0 |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
# check command |
||||||
|
|
||||||
|
case ${COMMAND} |
||||||
|
in |
||||||
|
start|stop|restart) |
||||||
|
;; |
||||||
|
watchrestart) |
||||||
|
if [ -n "$ARG_DAEMONS" ] |
||||||
|
then |
||||||
|
echo "${ME}: watchrestart mode is only for use by watchquagga" |
||||||
|
exit 2 |
||||||
|
fi |
||||||
|
;; |
||||||
|
*) |
||||||
|
usage |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
# select daemons to start |
||||||
|
|
||||||
|
case ${COMMAND} |
||||||
|
in |
||||||
|
start|restart|watchrestart) |
||||||
|
START_DAEMONS= |
||||||
|
for d in ${DAEMONS_STARTSEQ} |
||||||
|
do |
||||||
|
[ -x "${BINDIR}/${d}" -a -f "${CONFDIR}/${d}.conf" ] \ |
||||||
|
&& START_DAEMONS="${START_DAEMONS}${d} " |
||||||
|
done |
||||||
|
WATCHQUAGGA_DAEMONS=${START_DAEMONS} |
||||||
|
if is_in watchquagga "${DAEMONS_STARTSEQ}" |
||||||
|
then |
||||||
|
START_DAEMONS="${START_DAEMONS} watchquagga" |
||||||
|
fi |
||||||
|
if [ -n "${ARG_DAEMONS}" ] |
||||||
|
then |
||||||
|
if select_subset "${ARG_DAEMONS}" "${DAEMONS}" |
||||||
|
then |
||||||
|
if select_subset "${ARG_DAEMONS}" "${START_DAEMONS}" |
||||||
|
then |
||||||
|
START_DAEMONS=${RESULT} |
||||||
|
else |
||||||
|
die "these daemons are not startable:${RESULT}." |
||||||
|
fi |
||||||
|
else |
||||||
|
die "unknown daemons:${RESULT}; choose from: ${DAEMONS}." |
||||||
|
fi |
||||||
|
fi |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
# select daemons to stop |
||||||
|
|
||||||
|
case ${COMMAND} |
||||||
|
in |
||||||
|
stop|restart|watchrestart) |
||||||
|
STOP_DAEMONS=${DAEMONS_STOPSEQ} |
||||||
|
if [ -n "${ARG_DAEMONS}" ] |
||||||
|
then |
||||||
|
if select_subset "${ARG_DAEMONS}" "${STOP_DAEMONS}" |
||||||
|
then |
||||||
|
STOP_DAEMONS=${RESULT} |
||||||
|
else |
||||||
|
die "unknown daemons:${RESULT}; choose from: ${DAEMONS}." |
||||||
|
fi |
||||||
|
fi |
||||||
|
stop_daemons= |
||||||
|
for d in ${STOP_DAEMONS} |
||||||
|
do |
||||||
|
pidfile=${STATEDIR}/${d}.pid |
||||||
|
if [ -f "${pidfile}" -o -n "$(pidof ${d})" ] |
||||||
|
then |
||||||
|
stop_daemons="${stop_daemons}${d} " |
||||||
|
elif [ -n "${ARG_DAEMONS}" ] |
||||||
|
then |
||||||
|
echo "${ME}: found no ${d} process running." |
||||||
|
fi |
||||||
|
done |
||||||
|
STOP_DAEMONS=${stop_daemons} |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
# stop daemons |
||||||
|
|
||||||
|
for d in $STOP_DAEMONS |
||||||
|
do |
||||||
|
echo -n "${ME}: Stopping ${d} ... " |
||||||
|
pidfile=${STATEDIR}/${d}.pid |
||||||
|
if [ -f "${pidfile}" ] |
||||||
|
then |
||||||
|
file_pid=$(cat ${pidfile}) |
||||||
|
if [ -z "${file_pid}" ] |
||||||
|
then |
||||||
|
echo -n "no pid file entry found ... " |
||||||
|
fi |
||||||
|
else |
||||||
|
file_pid= |
||||||
|
echo -n "no pid file found ... " |
||||||
|
fi |
||||||
|
proc_pid=$(pidof ${d}) |
||||||
|
if [ -z "${proc_pid}" ] |
||||||
|
then |
||||||
|
echo -n "found no ${d} process running ... " |
||||||
|
else |
||||||
|
count=0 |
||||||
|
notinpidfile= |
||||||
|
for p in ${proc_pid} |
||||||
|
do |
||||||
|
count=$((${count}+1)) |
||||||
|
if kill ${p} |
||||||
|
then |
||||||
|
echo -n "killed ${p} ... " |
||||||
|
else |
||||||
|
echo -n "failed to kill ${p} ... " |
||||||
|
fi |
||||||
|
[ "${p}" = "${file_pid}" ] \ |
||||||
|
|| notinpidfile="${notinpidfile} ${p}" |
||||||
|
done |
||||||
|
[ ${count} -le 1 ] \ |
||||||
|
|| echo -n "WARNING: ${count} ${d} processes were found running ... " |
||||||
|
for n in ${notinpidfile} |
||||||
|
do |
||||||
|
echo -n "WARNING: process ${n} was not in pid file ... " |
||||||
|
done |
||||||
|
fi |
||||||
|
count=0 |
||||||
|
survivors=$(pidof ${d}) |
||||||
|
while [ -n "${survivors}" ] |
||||||
|
do |
||||||
|
sleep 1 |
||||||
|
count=$((${count}+1)) |
||||||
|
survivors=$(pidof ${d}) |
||||||
|
[ -z "${survivors}" -o ${count} -gt 5 ] && break |
||||||
|
for p in ${survivors} |
||||||
|
do |
||||||
|
sleep 1 |
||||||
|
echo -n "${p} " |
||||||
|
kill ${p} |
||||||
|
done |
||||||
|
done |
||||||
|
survivors=$(pidof ${d}) |
||||||
|
[ -n "${survivors}" ] && \ |
||||||
|
if kill -KILL ${survivors} |
||||||
|
then |
||||||
|
echo -n "KILLed ${survivors} ... " |
||||||
|
else |
||||||
|
echo -n "failed to KILL ${survivors} ... " |
||||||
|
fi |
||||||
|
sleep 1 |
||||||
|
survivors=$(pidof ${d}) |
||||||
|
if [ -z "${survivors}" ] |
||||||
|
then |
||||||
|
echo -n "done." |
||||||
|
if [ -f "${pidfile}" ] |
||||||
|
then |
||||||
|
rm -f ${pidfile} \ |
||||||
|
|| echo -n " Failed to remove pidfile." |
||||||
|
fi |
||||||
|
else |
||||||
|
echo -n "failed to stop ${survivors} - giving up." |
||||||
|
if [ "${survivors}" != "${file_pid}" ] |
||||||
|
then |
||||||
|
if echo "${survivors}" > ${pidfile} |
||||||
|
then |
||||||
|
chown quagga:quagga ${pidfile} |
||||||
|
echo -n " Wrote ${survivors} to pidfile." |
||||||
|
else |
||||||
|
echo -n " Failed to write ${survivors} to pidfile." |
||||||
|
fi |
||||||
|
fi |
||||||
|
fi |
||||||
|
echo |
||||||
|
done |
||||||
|
|
||||||
|
# start daemons |
||||||
|
|
||||||
|
if [ -n "$START_DAEMONS" ] |
||||||
|
then |
||||||
|
[ -d ${CONFDIR} ] \ |
||||||
|
|| quit "${ME}: no config directory ${CONFDIR} - exiting." |
||||||
|
chown -R quagga:quagga ${CONFDIR} |
||||||
|
[ -d ${STATEDIR} ] || mkdir -p ${STATEDIR} \ |
||||||
|
|| die "${ME}: could not create state directory ${STATEDIR} - exiting." |
||||||
|
chown -R quagga:quagga ${STATEDIR} |
||||||
|
|
||||||
|
for d in $START_DAEMONS |
||||||
|
do |
||||||
|
echo -n "${ME}: Starting ${d} ... " |
||||||
|
proc_pid=$(pidof ${d}) |
||||||
|
pidfile=${STATEDIR}/${d}.pid |
||||||
|
file_pid= |
||||||
|
if [ -f "${pidfile}" ] |
||||||
|
then |
||||||
|
file_pid=$(cat ${pidfile}) |
||||||
|
if [ -n "${file_pid}" ] |
||||||
|
then |
||||||
|
echo -n "found old pid file entry ${file_pid} ... " |
||||||
|
fi |
||||||
|
fi |
||||||
|
if [ -n "${proc_pid}" ] |
||||||
|
then |
||||||
|
echo -n "found ${d} running (${proc_pid}) - skipping ${d}." |
||||||
|
if [ "${proc_pid}" != "${file_pid}" ] |
||||||
|
then |
||||||
|
if echo "${proc_pid}" > ${pidfile} |
||||||
|
then |
||||||
|
chown quagga:quagga ${pidfile} |
||||||
|
echo -n " Wrote ${proc_pid} to pidfile." |
||||||
|
else |
||||||
|
echo -n " Failed to write ${proc_pid} to pidfile." |
||||||
|
fi |
||||||
|
fi |
||||||
|
elif rm -f "${pidfile}" |
||||||
|
then |
||||||
|
if [ "${d}" = "watchquagga" ] |
||||||
|
then |
||||||
|
$("${BINDIR}/${d}" \ |
||||||
|
${WATCHQUAGGA_FLAGS} \ |
||||||
|
"${WATCHQUAGGA_CMD}" \ |
||||||
|
${WATCHQUAGGA_DAEMONS}) |
||||||
|
status=$? |
||||||
|
else |
||||||
|
$("${BINDIR}/${d}" ${DAEMON_FLAGS}) |
||||||
|
status=$? |
||||||
|
fi |
||||||
|
if [ $status -eq 0 ] |
||||||
|
then |
||||||
|
echo -n "done." |
||||||
|
else |
||||||
|
echo -n "failed." |
||||||
|
fi |
||||||
|
else |
||||||
|
echo -n " failed to remove pidfile." |
||||||
|
fi |
||||||
|
echo |
||||||
|
done |
||||||
|
fi |
@ -0,0 +1,8 @@ |
|||||||
|
Package: quagga-vtysh |
||||||
|
Priority: optional |
||||||
|
Section: net |
||||||
|
Maintainer: Johannes 5 Joemann <joemann@beefree.free.de> |
||||||
|
Source: buildroot internal |
||||||
|
Depends: quagga, libncurses, libreadline |
||||||
|
Description: integrated shell for interacting with Quagga |
||||||
|
routing software |
@ -0,0 +1,58 @@ |
|||||||
|
--- quagga-0.98.4/configure.orig Mon Jun 27 19:05:31 2005
|
||||||
|
+++ quagga-0.98.4/configure Thu Jul 28 07:02:12 2005
|
||||||
|
@@ -10937,7 +10937,7 @@
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
-LIBS="-lcurses $LIBS"
|
||||||
|
+#LIBS="-lcurses $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
@@ -11071,7 +11071,8 @@
|
||||||
|
#define HAVE_LIBNCURSES 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
- LIBS="-lncurses $LIBS"
|
||||||
|
+# LIBS="-lncurses $LIBS"
|
||||||
|
+CURSES=-lncurses
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
@@ -11088,7 +11089,7 @@
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
-LIBS="-lreadline $LIBS"
|
||||||
|
+LIBS="-lreadline $CURSES $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
@@ -11144,7 +11145,8 @@
|
||||||
|
#define HAVE_LIBREADLINE 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
- LIBS="-lreadline $LIBS"
|
||||||
|
+# LIBS="-lreadline $LIBS"
|
||||||
|
+CURSES="$CURSES -lreadline"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
@@ -11303,7 +11305,7 @@
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
-LIBS="-lreadline $LIBS"
|
||||||
|
+LIBS="-lreadline $CURSES $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
@@ -11365,7 +11367,7 @@
|
||||||
|
#define HAVE_LIBREADLINE 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
- LIBS="-lreadline $LIBS"
|
||||||
|
+# LIBS="-lreadline $LIBS"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in new issue