diff options
author | Paul Jakma <paul.jakma@sun.com> | 2006-03-30 13:38:28 +0000 |
---|---|---|
committer | Paul Jakma <paul.jakma@sun.com> | 2006-03-30 13:38:28 +0000 |
commit | 75db03ebb169da26102275c70eff0a0ebaae04cb (patch) | |
tree | 8ac5dd58bc3b37ead3c8932138052348b8c66629 /solaris/quagga.init.in | |
parent | e6d7d054d9b787c597319ec528ea8f64a7f949f6 (diff) |
[solaris] SMF manifest, method and depend updates.
2006-03-13 Alan Maguire <alan.maguire@sun.com>
* quagga.xml.in: Change the naming of services and instances.
network/routing/quagga:<daemon> may be neat and tidy, but
it's at odds with SMF convention elsewhere that demands
the service be named for what it does, and the instance name
describe the implementation (e.g. network/smtp:sendmail).
Remove call to method script for 'stop', SMF can do that
itself.
Enumerate the privileges required in the SMF manifest, with the
method_credential element.
Dont try provide seperate properties for each argument, it's
just tedious, particularly when they can no longer be
inherited from a common quagga service - use a single
"daemon-args" property, defaulting to -P 0.
Specify authorisation for the 'routeadm' utility and for
RBAC.
2006-03-13 Paul Jakma <paul.jakma@sun.com>
* quagga.init.in: Update to match SMF manifest changes.
If run from an SMF environment, assume method is start.
Offer a more tradition init script interface for pre-SMF.
Enable zebra for the link-state daemons.
Don't allow daemons to start in non-global zones, except
for bgpd - it doesn't have to care about underlying
networking much.
Remove all the svcprop calls, SMF or the user will supply any
arguments on the command-line.
* depend.smf.in: Add dependency on SUNWroute, which provides
routeadm, which provides /var/svc/manifest/network/routing
* prototype.smf.in: Install manifest to
var/svc/manifest/network/routing.
Diffstat (limited to 'solaris/quagga.init.in')
-rwxr-xr-x | solaris/quagga.init.in | 130 |
1 files changed, 70 insertions, 60 deletions
diff --git a/solaris/quagga.init.in b/solaris/quagga.init.in index 1fa98765..9fc2fe74 100755 --- a/solaris/quagga.init.in +++ b/solaris/quagga.init.in @@ -1,94 +1,104 @@ #!/sbin/sh # -# Copyright 2001,2003 Sun Microsystems, Inc. All rights reserved. +# Copyright 2001,2003 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # -# $Id: quagga.init.in,v 1.5 2006/02/19 18:59:26 paul Exp $ +# $Id: quagga.init.in,v 1.6 2006/03/30 13:38:28 paul Exp $ # -# Starts/stops the appropriate daemon +# Starts/stops the given daemon SMFINCLUDE=/lib/svc/share/smf_include.sh +DAEMON_PATH=@sbindir@ +quagga_is_globalzone () { + if [ "${QUAGGA_INIT_ZONENAME:=`/sbin/zonename`}" != "global" ]; then + return 1 + else + return 0 + fi +} + +# Include smf functions, if available. If not, define smf_present to indicate +# there is no SMF. Should allow this script to work pre-S10. if [ -f "$SMFINCLUDE" ] ; then . "$SMFINCLUDE"; +else + # pre-SMF system, fake up any functions and exit codes + # which SMFINCLUDE usually provides. + smf_present () { + return 1 + } + SMF_EXIT_OK=0; + SMF_EXIT_ERR_CONFIG=96; + SMF_EXIT_ERR_FATAL=95; fi + +# if there's no SMF, set some default DAEMON_ARGS +smf_present || DAEMON_ARGS="" usage () { - echo "Usage: $0 (start|stop) <fmri> <instance>"; -} + if smf_present ; then + echo "Usage: $0 <daemon> <daemon arguments>"; + else + echo "Usage: $0 <stop|start> <daemon> <daemon arguments>"; + fi + echo "The --pid_file argument is implied"; + echo "This help message: $0 <help|usage>"; +} +# parse arguments, different according to SMF or not. case $1 in 'help' | 'usage') - usage - ;; + usage + exit SMF_EXIT_OK + ;; esac -# fmri and instance must be given. -FMRI="$2" -INSTANCE="$3" -if [ -z "$FMRI" -o -z "$INSTANCE" ]; then - usage - exit $SMF_EXIT_ERR_CONFIG +if smf_present ; then + QUAGGA_METHOD="start" +else + QUAGGA_METHOD="$1" + shift; fi -# fmri must exist -svcs ${FMRI} > /dev/null 2>&1 || exit $SMF_EXIT_ERR_CONFIG +DAEMON="$1" +shift +DAEMON_ARGS="$@" -case ${INSTANCE} in - zebra | bgpd ) +# daemon path must be given +if [ -z "$DAEMON_PATH/$DAEMON" ]; then + usage + exit $SMF_EXIT_ERR_FATAL +fi + +# only bgpd is suitable for running in a non-global zone, at this +# time. +case "${DAEMON}" in + zebra) + quagga_is_globalzone || exit $SMF_EXIT_OK + ;; + bgpd) ;; ospfd | ospf6d | ripd | ripngd ) - /usr/sbin/svcadm enable zebra + quagga_is_globalzone || exit $SMF_EXIT_OK ;; *) - usage - exit $SMF_EXIT_ERR_CONFIG; + usage + exit $SMF_EXIT_ERR_CONFIG; ;; esac -svcprop -q -p @PACKAGE_TARNAME@/config_file ${FMRI} && \ - CONFFILE=`svcprop -p @PACKAGE_TARNAME@/config_file ${FMRI}` -svcprop -q -p @PACKAGE_TARNAME@/pid_file ${FMRI} && \ - PIDFILE=`svcprop -p @PACKAGE_TARNAME@/pid_file ${FMRI}` -svcprop -q -p @PACKAGE_TARNAME@/user ${FMRI} && \ - USER=`svcprop -p @PACKAGE_TARNAME@/user ${FMRI}` -svcprop -q -p @PACKAGE_TARNAME@/group ${FMRI} && \ - GROUP=`svcprop -p @PACKAGE_TARNAME@/group ${FMRI}` -svcprop -q -p @PACKAGE_TARNAME@/vty_addr ${FMRI} && \ - VTYADDR=`svcprop -p @PACKAGE_TARNAME@/vty_addr ${FMRI}` -svcprop -q -p @PACKAGE_TARNAME@/vty_port ${FMRI} && \ - VTYPORT=`svcprop -p @PACKAGE_TARNAME@/vty_port ${FMRI}` - -[ -n "${CONFFILE}" ] && ARGS=" -f ${CONFFILE}" -[ -n "${PIDFILE}" ] && ARGS="${ARGS} --pid_file ${PIDFILE}" -[ -n "${USER}" ] && ARGS="${ARGS} --user ${USER}" -[ -n "${GROUP}" ] && ARGS="${ARGS} --group ${GROUP}" - -# vty should default to disabled, ie port == 0 -[ -z "${VTYPORT}" ] && VTYPORT=0 -ARGS="${ARGS} --vty_port ${VTYPORT}" - -# default listen address should be localhost -[ -z "${VTYADDR}" ] && VTYADDR=127.1 -ARGS="${ARGS} --vty_addr ${VTYADDR}" - -# have to have a pid file for script to work -# we can assume it otherwise -if [ -z "${PIDFILE}" ]; then - PIDFILE="@quagga_statedir@/${INSTANCE}.pid" -else - ARGS="${ARGS} --pid_file ${PIDFILE}" -fi - -# we need @quagga_statedir@ to exist, it might be on tmpfs. +# we need @quagga_statedir@ to exist, it probably is on tmpfs. if [ ! -d @quagga_statedir@ ] ; then mkdir -p @quagga_statedir@ chown @enable_user@:@enable_group@ @quagga_statedir@ chmod 751 @quagga_statedir@ fi +PIDFILE="@quagga_statedir@/${DAEMON}.pid" + start () { - @sbindir@/${INSTANCE} ${ARGS} & + $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} & } stop () { @@ -97,17 +107,17 @@ stop () { fi } -case $1 in +case "$QUAGGA_METHOD" in 'start') - start ${2} + start ;; 'stop') - stop ${2} + stop ;; *) usage - exit 1 + exit SMF_EXIT_ERR_FATAL ;; esac |