1*c18ec02fSPetter Reinholdtsen#!/bin/bash
2*c18ec02fSPetter Reinholdtsen#
3*c18ec02fSPetter Reinholdtsen#     System startup script for ipmievd
4*c18ec02fSPetter Reinholdtsen#     Based on skeleton.compat example script
5*c18ec02fSPetter Reinholdtsen#     Copyright (C) 1995--2005  Kurt Garloff, SUSE / Novell Inc.
6*c18ec02fSPetter Reinholdtsen#
7*c18ec02fSPetter Reinholdtsen#     This library is free software; you can redistribute it and/or modify it
8*c18ec02fSPetter Reinholdtsen#     under the terms of the GNU Lesser General Public License as published by
9*c18ec02fSPetter Reinholdtsen#     the Free Software Foundation; either version 2.1 of the License, or (at
10*c18ec02fSPetter Reinholdtsen#     your option) any later version.
11*c18ec02fSPetter Reinholdtsen#
12*c18ec02fSPetter Reinholdtsen#     This library is distributed in the hope that it will be useful, but
13*c18ec02fSPetter Reinholdtsen#     WITHOUT ANY WARRANTY; without even the implied warranty of
14*c18ec02fSPetter Reinholdtsen#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15*c18ec02fSPetter Reinholdtsen#     Lesser General Public License for more details.
16*c18ec02fSPetter Reinholdtsen#
17*c18ec02fSPetter Reinholdtsen#     You should have received a copy of the GNU Lesser General Public
18*c18ec02fSPetter Reinholdtsen#     License along with this library; if not, write to the Free Software
19*c18ec02fSPetter Reinholdtsen#     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
20*c18ec02fSPetter Reinholdtsen#     USA.
21*c18ec02fSPetter Reinholdtsen#
22*c18ec02fSPetter Reinholdtsen# Note: This template uses functions rc_XXX defined in /etc/rc.status on
23*c18ec02fSPetter Reinholdtsen# UnitedLinux/SUSE/Novell based Linux distributions. However, it will work
24*c18ec02fSPetter Reinholdtsen# on other distributions as well, by using the LSB (Linux Standard Base)
25*c18ec02fSPetter Reinholdtsen# or RH functions or by open coding the needed functions.
26*c18ec02fSPetter Reinholdtsen# Read http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/ if you prefer not
27*c18ec02fSPetter Reinholdtsen# to use this template.
28*c18ec02fSPetter Reinholdtsen#
29*c18ec02fSPetter Reinholdtsen# chkconfig: 345 99 00
30*c18ec02fSPetter Reinholdtsen# description: ipmievd daemon
31*c18ec02fSPetter Reinholdtsen#
32*c18ec02fSPetter Reinholdtsen### BEGIN INIT INFO
33*c18ec02fSPetter Reinholdtsen# Provides:          ipmievd
34*c18ec02fSPetter Reinholdtsen# Required-Start:    $syslog ipmi
35*c18ec02fSPetter Reinholdtsen# Should-Start: $time
36*c18ec02fSPetter Reinholdtsen# Required-Stop:     $syslog ipmi
37*c18ec02fSPetter Reinholdtsen# Should-Stop: $time
38*c18ec02fSPetter Reinholdtsen# Default-Start:     3 4 5
39*c18ec02fSPetter Reinholdtsen# Default-Stop:      0 1 2 6
40*c18ec02fSPetter Reinholdtsen# Short-Description: ipmievd daemon to send events to syslog
41*c18ec02fSPetter Reinholdtsen# Description:       Start ipmievd to read events from BMC and
42*c18ec02fSPetter Reinholdtsen#	log them to syslog.  Events correspond to hardware faults,
43*c18ec02fSPetter Reinholdtsen#	state transitions such as power on and off, and sensor
44*c18ec02fSPetter Reinholdtsen#	readings such as temperature, voltage and fan speed that
45*c18ec02fSPetter Reinholdtsen#	are abnormal.
46*c18ec02fSPetter Reinholdtsen### END INIT INFO
47*c18ec02fSPetter Reinholdtsen#
48*c18ec02fSPetter Reinholdtsen
49*c18ec02fSPetter Reinholdtsen# Check for missing binaries (stale symlinks should not happen)
50*c18ec02fSPetter Reinholdtsen# Note: Special treatment of stop for LSB conformance
51*c18ec02fSPetter ReinholdtsenIPMIEVD_BIN=/usr/sbin/ipmievd
52*c18ec02fSPetter Reinholdtsentest -x $IPMIEVD_BIN || { echo "$IPMIEVD_BIN not installed";
53*c18ec02fSPetter Reinholdtsen	if [ "$1" = "stop" ]; then exit 0;
54*c18ec02fSPetter Reinholdtsen	else exit 5; fi; }
55*c18ec02fSPetter Reinholdtsen
56*c18ec02fSPetter Reinholdtsen# Check for existence of needed config file and read it
57*c18ec02fSPetter ReinholdtsenIPMIEVD_CONFIG=/etc/sysconfig/ipmievd
58*c18ec02fSPetter Reinholdtsentest -r $IPMIEVD_CONFIG || { echo "$IPMIEVD_CONFIG does not exist";
59*c18ec02fSPetter Reinholdtsen	if [ "$1" = "stop" ]; then exit 0;
60*c18ec02fSPetter Reinholdtsen	else exit 6; fi; }
61*c18ec02fSPetter Reinholdtsen
62*c18ec02fSPetter Reinholdtsen# Read config
63*c18ec02fSPetter Reinholdtsen. $IPMIEVD_CONFIG
64*c18ec02fSPetter Reinholdtsen
65*c18ec02fSPetter Reinholdtsenif test -e /etc/rc.status; then
66*c18ec02fSPetter Reinholdtsen    # SUSE rc script library
67*c18ec02fSPetter Reinholdtsen    . /etc/rc.status
68*c18ec02fSPetter Reinholdtsenelse
69*c18ec02fSPetter Reinholdtsen    export LC_ALL=POSIX
70*c18ec02fSPetter Reinholdtsen    _cmd=$1
71*c18ec02fSPetter Reinholdtsen    declare -a _SMSG
72*c18ec02fSPetter Reinholdtsen    if test "${_cmd}" = "status"; then
73*c18ec02fSPetter Reinholdtsen	_SMSG=(running dead dead unused unknown reserved)
74*c18ec02fSPetter Reinholdtsen	_RC_UNUSED=3
75*c18ec02fSPetter Reinholdtsen    else
76*c18ec02fSPetter Reinholdtsen	_SMSG=(done failed failed missed failed skipped unused failed failed reserved)
77*c18ec02fSPetter Reinholdtsen	_RC_UNUSED=6
78*c18ec02fSPetter Reinholdtsen    fi
79*c18ec02fSPetter Reinholdtsen    if test -e /lib/lsb/init-functions; then
80*c18ec02fSPetter Reinholdtsen	# LSB
81*c18ec02fSPetter Reinholdtsen    	. /lib/lsb/init-functions
82*c18ec02fSPetter Reinholdtsen	echo_rc()
83*c18ec02fSPetter Reinholdtsen	{
84*c18ec02fSPetter Reinholdtsen	    if test ${_RC_RV} = 0; then
85*c18ec02fSPetter Reinholdtsen		log_success_msg "  [${_SMSG[${_RC_RV}]}] "
86*c18ec02fSPetter Reinholdtsen	    else
87*c18ec02fSPetter Reinholdtsen		log_failure_msg "  [${_SMSG[${_RC_RV}]}] "
88*c18ec02fSPetter Reinholdtsen	    fi
89*c18ec02fSPetter Reinholdtsen	}
90*c18ec02fSPetter Reinholdtsen	# TODO: Add checking for lockfiles
91*c18ec02fSPetter Reinholdtsen	checkproc() { return pidofproc ${1+"$@"} >/dev/null 2>&1; }
92*c18ec02fSPetter Reinholdtsen    elif test -e /etc/init.d/functions; then
93*c18ec02fSPetter Reinholdtsen	# RHAT
94*c18ec02fSPetter Reinholdtsen	. /etc/init.d/functions
95*c18ec02fSPetter Reinholdtsen	echo_rc()
96*c18ec02fSPetter Reinholdtsen	{
97*c18ec02fSPetter Reinholdtsen	    #echo -n "  [${_SMSG[${_RC_RV}]}] "
98*c18ec02fSPetter Reinholdtsen	    if test ${_RC_RV} = 0; then
99*c18ec02fSPetter Reinholdtsen		success "  [${_SMSG[${_RC_RV}]}] "
100*c18ec02fSPetter Reinholdtsen	    else
101*c18ec02fSPetter Reinholdtsen		failure "  [${_SMSG[${_RC_RV}]}] "
102*c18ec02fSPetter Reinholdtsen	    fi
103*c18ec02fSPetter Reinholdtsen	}
104*c18ec02fSPetter Reinholdtsen	checkproc() { return status ${1+"$@"}; }
105*c18ec02fSPetter Reinholdtsen	start_daemon() { return daemon ${1+"$@"}; }
106*c18ec02fSPetter Reinholdtsen    else
107*c18ec02fSPetter Reinholdtsen	# emulate it
108*c18ec02fSPetter Reinholdtsen	echo_rc() { echo "  [${_SMSG[${_RC_RV}]}] "; }
109*c18ec02fSPetter Reinholdtsen    fi
110*c18ec02fSPetter Reinholdtsen    rc_reset() { _RC_RV=0; }
111*c18ec02fSPetter Reinholdtsen    rc_failed()
112*c18ec02fSPetter Reinholdtsen    {
113*c18ec02fSPetter Reinholdtsen	if test -z "$1"; then
114*c18ec02fSPetter Reinholdtsen	    _RC_RV=1;
115*c18ec02fSPetter Reinholdtsen	elif test "$1" != "0"; then
116*c18ec02fSPetter Reinholdtsen	    _RC_RV=$1;
117*c18ec02fSPetter Reinholdtsen    	fi
118*c18ec02fSPetter Reinholdtsen	return ${_RC_RV}
119*c18ec02fSPetter Reinholdtsen    }
120*c18ec02fSPetter Reinholdtsen    rc_check()
121*c18ec02fSPetter Reinholdtsen    {
122*c18ec02fSPetter Reinholdtsen	return rc_failed $?
123*c18ec02fSPetter Reinholdtsen    }
124*c18ec02fSPetter Reinholdtsen    rc_status()
125*c18ec02fSPetter Reinholdtsen    {
126*c18ec02fSPetter Reinholdtsen	rc_failed $?
127*c18ec02fSPetter Reinholdtsen	if test "$1" = "-r"; then _RC_RV=0; shift; fi
128*c18ec02fSPetter Reinholdtsen	if test "$1" = "-s"; then rc_failed 5; echo_rc; rc_failed 3; shift; fi
129*c18ec02fSPetter Reinholdtsen	if test "$1" = "-u"; then rc_failed ${_RC_UNUSED}; echo_rc; rc_failed 3; shift; fi
130*c18ec02fSPetter Reinholdtsen	if test "$1" = "-v"; then echo_rc; shift; fi
131*c18ec02fSPetter Reinholdtsen	if test "$1" = "-r"; then _RC_RV=0; shift; fi
132*c18ec02fSPetter Reinholdtsen	return ${_RC_RV}
133*c18ec02fSPetter Reinholdtsen    }
134*c18ec02fSPetter Reinholdtsen    rc_exit() { exit ${_RC_RV}; }
135*c18ec02fSPetter Reinholdtsen    rc_active()
136*c18ec02fSPetter Reinholdtsen    {
137*c18ec02fSPetter Reinholdtsen	if test -z "$RUNLEVEL"; then read RUNLEVEL REST < <(/sbin/runlevel); fi
138*c18ec02fSPetter Reinholdtsen	if test -e /etc/init.d/S[0-9][0-9]${1}; then return 0; fi
139*c18ec02fSPetter Reinholdtsen	return 1
140*c18ec02fSPetter Reinholdtsen    }
141*c18ec02fSPetter Reinholdtsenfi
142*c18ec02fSPetter Reinholdtsen
143*c18ec02fSPetter Reinholdtsen# Reset status of this service
144*c18ec02fSPetter Reinholdtsenrc_reset
145*c18ec02fSPetter Reinholdtsen
146*c18ec02fSPetter Reinholdtsen# Return values acc. to LSB for all commands but status:
147*c18ec02fSPetter Reinholdtsen# 0	  - success
148*c18ec02fSPetter Reinholdtsen# 1       - generic or unspecified error
149*c18ec02fSPetter Reinholdtsen# 2       - invalid or excess argument(s)
150*c18ec02fSPetter Reinholdtsen# 3       - unimplemented feature (e.g. "reload")
151*c18ec02fSPetter Reinholdtsen# 4       - user had insufficient privileges
152*c18ec02fSPetter Reinholdtsen# 5       - program is not installed
153*c18ec02fSPetter Reinholdtsen# 6       - program is not configured
154*c18ec02fSPetter Reinholdtsen# 7       - program is not running
155*c18ec02fSPetter Reinholdtsen# 8--199  - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
156*c18ec02fSPetter Reinholdtsen#
157*c18ec02fSPetter Reinholdtsen# Note that starting an already running service, stopping
158*c18ec02fSPetter Reinholdtsen# or restarting a not-running service as well as the restart
159*c18ec02fSPetter Reinholdtsen# with force-reload (in case signaling is not supported) are
160*c18ec02fSPetter Reinholdtsen# considered a success.
161*c18ec02fSPetter Reinholdtsen
162*c18ec02fSPetter Reinholdtsencase "$1" in
163*c18ec02fSPetter Reinholdtsen    start)
164*c18ec02fSPetter Reinholdtsen	echo -n "Starting ipmievd "
165*c18ec02fSPetter Reinholdtsen	start_daemon $IPMIEVD_BIN $IPMIEVD_OPTIONS
166*c18ec02fSPetter Reinholdtsen	rc_status -v
167*c18ec02fSPetter Reinholdtsen	;;
168*c18ec02fSPetter Reinholdtsen    stop)
169*c18ec02fSPetter Reinholdtsen	echo -n "Shutting down ipmievd "
170*c18ec02fSPetter Reinholdtsen	killproc -TERM $IPMIEVD_BIN
171*c18ec02fSPetter Reinholdtsen	rc_status -v
172*c18ec02fSPetter Reinholdtsen	;;
173*c18ec02fSPetter Reinholdtsen    try-restart|condrestart)
174*c18ec02fSPetter Reinholdtsen	## Do a restart only if the service was active before.
175*c18ec02fSPetter Reinholdtsen	## Note: try-restart is now part of LSB (as of 1.9).
176*c18ec02fSPetter Reinholdtsen	## RH has a similar command named condrestart.
177*c18ec02fSPetter Reinholdtsen	if test "$1" = "condrestart"; then
178*c18ec02fSPetter Reinholdtsen		echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
179*c18ec02fSPetter Reinholdtsen	fi
180*c18ec02fSPetter Reinholdtsen	$0 status
181*c18ec02fSPetter Reinholdtsen	if test $? = 0; then
182*c18ec02fSPetter Reinholdtsen		$0 restart
183*c18ec02fSPetter Reinholdtsen	else
184*c18ec02fSPetter Reinholdtsen		rc_reset	# Not running is not a failure.
185*c18ec02fSPetter Reinholdtsen	fi
186*c18ec02fSPetter Reinholdtsen	rc_status
187*c18ec02fSPetter Reinholdtsen	;;
188*c18ec02fSPetter Reinholdtsen    restart)
189*c18ec02fSPetter Reinholdtsen	$0 stop
190*c18ec02fSPetter Reinholdtsen	$0 start
191*c18ec02fSPetter Reinholdtsen	rc_status
192*c18ec02fSPetter Reinholdtsen	;;
193*c18ec02fSPetter Reinholdtsen    force-reload)
194*c18ec02fSPetter Reinholdtsen	echo -n "Reload service ipmievd "
195*c18ec02fSPetter Reinholdtsen	$0 try-restart
196*c18ec02fSPetter Reinholdtsen	rc_status
197*c18ec02fSPetter Reinholdtsen	;;
198*c18ec02fSPetter Reinholdtsen    reload)
199*c18ec02fSPetter Reinholdtsen	rc_failed 3
200*c18ec02fSPetter Reinholdtsen	rc_status -v
201*c18ec02fSPetter Reinholdtsen	;;
202*c18ec02fSPetter Reinholdtsen    status)
203*c18ec02fSPetter Reinholdtsen	echo -n "Checking for service ipmievd "
204*c18ec02fSPetter Reinholdtsen	checkproc $IPMIEVD_BIN
205*c18ec02fSPetter Reinholdtsen	rc_status -v
206*c18ec02fSPetter Reinholdtsen	;;
207*c18ec02fSPetter Reinholdtsen    *)
208*c18ec02fSPetter Reinholdtsen	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload| reload}"
209*c18ec02fSPetter Reinholdtsen	exit 1
210*c18ec02fSPetter Reinholdtsen	;;
211*c18ec02fSPetter Reinholdtsenesac
212*c18ec02fSPetter Reinholdtsenrc_exit
213