Blame contrib/ipmi.init.redhat

Packit Service ed0f68
#!/bin/sh
Packit Service ed0f68
#
Packit Service ed0f68
# chkconfig: 2345 11 60
Packit Service ed0f68
# description: start, stop, or query ipmi system monitoring tools
Packit Service ed0f68
# config: /etc/sysconfig/ipmi
Packit Service ed0f68
#
Packit Service ed0f68
# For Redhat, Fedora, or similar systems.  Handles both 2.4 and 2.6
Packit Service ed0f68
# configurations.  Requires an /etc/sysconfig/ipmi file to function,
Packit Service ed0f68
# see below.
Packit Service ed0f68
#
Packit Service ed0f68
# Phil Hollenback
Packit Service ed0f68
# philiph@pobox.com
Packit Service ed0f68
Packit Service ed0f68
# Source function library.
Packit Service ed0f68
. /etc/init.d/functions
Packit Service ed0f68
Packit Service ed0f68
# Exit silently if we don't have a sysconfig file,
Packit Service ed0f68
# and read IPMI setting from it to determine whether or
Packit Service ed0f68
# not to continue.
Packit Service ed0f68
# The only current setting is ipmi={YES|NO}, whether or not
Packit Service ed0f68
# to enable IPMI.
Packit Service ed0f68
[ -f /etc/sysconfig/ipmi ] || exit 0
Packit Service ed0f68
. /etc/sysconfig/ipmi
Packit Service ed0f68
[ "${IPMI}" = "yes" ] || exit 0
Packit Service ed0f68
Packit Service ed0f68
RETVAL=0
Packit Service ed0f68
Packit Service ed0f68
start() {
Packit Service ed0f68
	echo -n $"Starting ipmi: "
Packit Service ed0f68
Packit Service ed0f68
	# If ipmidev isn't listed in /proc/devices, try
Packit Service ed0f68
	# loading the modules.
Packit Service ed0f68
	if ! grep -q ipmidev /proc/devices
Packit Service ed0f68
	then
Packit Service ed0f68
	    /sbin/modprobe ipmi_msghandler || RETVAL=1
Packit Service ed0f68
	    /sbin/modprobe ipmi_devintf || RETVAL=1
Packit Service ed0f68
	    # Try loading new driver module, fall back to old
Packit Service ed0f68
	    # module if that fails.
Packit Service ed0f68
	    if ! /sbin/modprobe ipmi_si >/dev/null 2>&1
Packit Service ed0f68
	    then
Packit Service ed0f68
		/sbin/modprobe ipmi_si_drv || RETVAL=1
Packit Service ed0f68
	    fi
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
	# If ipmidev still isn't listed in /proc/devices after we load
Packit Service ed0f68
	# modules, this just isn't going to work.  Set RETVAL to mark
Packit Service ed0f68
	# this failure.
Packit Service ed0f68
	grep -q ipmidev /proc/devices || RETVAL=1
Packit Service ed0f68
Packit Service ed0f68
	# remove old device file always
Packit Service ed0f68
	# in case ipmi gets assigned new dynamic major number from kernel
Packit Service ed0f68
	if [ -c /dev/ipmi0 ]; then
Packit Service ed0f68
	    rm -f /dev/ipmi0
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	# Check if the device file exists and create if not.
Packit Service ed0f68
	if [ ! -c /dev/ipmi0 ] && [ $RETVAL -eq 0 ]
Packit Service ed0f68
	then
Packit Service ed0f68
	    major=$(awk '/ ipmidev$/{print $1}' /proc/devices)
Packit Service ed0f68
	    /bin/mknod -m 0600 /dev/ipmi0 c $major 0 || RETVAL=1
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	if [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ipmi ; then
Packit Service ed0f68
		echo_success
Packit Service ed0f68
		echo
Packit Service ed0f68
	else
Packit Service ed0f68
		echo_failure
Packit Service ed0f68
		echo
Packit Service ed0f68
	fi
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
stop() {
Packit Service ed0f68
	echo -n $"Shutting down ipmi: "
Packit Service ed0f68
Packit Service ed0f68
	# Stop doesn't actually do anything because we currently don't
Packit Service ed0f68
	# unload ipmi modules on stop.  That might change in the future
Packit Service ed0f68
 	# if we decide unloading the ipmi modules is safe.
Packit Service ed0f68
	RETVAL=0
Packit Service ed0f68
Packit Service ed0f68
	if [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ipmi ; then
Packit Service ed0f68
		echo_success
Packit Service ed0f68
		echo
Packit Service ed0f68
	else
Packit Service ed0f68
		echo_failure
Packit Service ed0f68
		echo
Packit Service ed0f68
	fi
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
dostatus() {
Packit Service ed0f68
	# Extract cpu temperatures from ipmitool output.
Packit Service ed0f68
Packit Service ed0f68
	# Abort if we don't have the ipmitool program.
Packit Service ed0f68
	if ! /usr/bin/ipmitool -V >/dev/null
Packit Service ed0f68
	then
Packit Service ed0f68
	    echo "/usr/bin/ipmitool not found!" >&2
Packit Service ed0f68
	    exit 1
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	# Abort if ipmi isn't loaded.
Packit Service ed0f68
	if ! grep -q ipmidev /proc/devices
Packit Service ed0f68
	then
Packit Service ed0f68
	    echo "ipmi not listed in /proc/devices!" >&2
Packit Service ed0f68
	    exit 1
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	# Check if we are running on a v1.0 IPMI system, and
Packit Service ed0f68
	# change our processor search string appropriately.
Packit Service ed0f68
	if /usr/bin/ipmitool -I open bmc info | \
Packit Service ed0f68
		grep -q "IPMI Version.*1.0"
Packit Service ed0f68
	then
Packit Service ed0f68
	    IpmiVersion="1.0"
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	# Determine # of running processors
Packit Service ed0f68
	NumProcs=$(grep -c processor /proc/cpuinfo)
Packit Service ed0f68
	if [ $NumProcs -eq 0 ]
Packit Service ed0f68
	then
Packit Service ed0f68
	    echo "Can't determine number of processors!" >&2
Packit Service ed0f68
	    exit 1
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	# Now build the query string.  Concatenate it into
Packit Service ed0f68
	# one string because that's more efficient on 2.4 systems.
Packit Service ed0f68
	Count=1
Packit Service ed0f68
	TempString=""
Packit Service ed0f68
	while [ $Count -le $NumProcs ]
Packit Service ed0f68
	do
Packit Service ed0f68
	    if [ x$IpmiVersion  = x"1.0" ]
Packit Service ed0f68
	    then
Packit Service ed0f68
		TempString="$TempString CPU\ $Count"
Packit Service ed0f68
	    else
Packit Service ed0f68
		TempString="$TempString Processor$Count\ Temp"
Packit Service ed0f68
	    fi
Packit Service ed0f68
	    Count=$((Count + 1))
Packit Service ed0f68
	done
Packit Service ed0f68
	# building TempString like this and eval'ing it is ugly, but
Packit Service ed0f68
	# it's the only way I could make the quoting work.  Sorry.
Packit Service ed0f68
	TempString="/usr/bin/ipmitool -I open sensor get $TempString"
Packit Service ed0f68
	eval $TempString | awk -v "c=$Count" '
Packit Service ed0f68
BEGIN {
Packit Service ed0f68
   n = 1
Packit Service ed0f68
}
Packit Service ed0f68
/Sensor Reading/ {
Packit Service ed0f68
   printf "CPU%s Temp: %s\n",n,$4
Packit Service ed0f68
   n++
Packit Service ed0f68
}
Packit Service ed0f68
END {
Packit Service ed0f68
   if ( n != c) {
Packit Service ed0f68
	printf "Error: found %s CPUs, but got temps for %s\n",--c,--n >"/dev/stderr"
Packit Service ed0f68
	exit 1
Packit Service ed0f68
   }
Packit Service ed0f68
   exit 0
Packit Service ed0f68
}'
Packit Service ed0f68
	RETVAL=$((RETVAL + $?))
Packit Service ed0f68
	return $RETVAL
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
restart() {
Packit Service ed0f68
	stop
Packit Service ed0f68
	start
Packit Service ed0f68
	RETVAL=$?
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
condrestart() {
Packit Service ed0f68
	[ -e /var/lock/subsys/ipmi ] && restart || :
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
remove () {
Packit Service ed0f68
	# Actually remove the drivers.  Don't do during stop in case
Packit Service ed0f68
	# this causes system to become unstable (a la lm_sensors)
Packit Service ed0f68
	if /sbin/lsmod | awk '{print $1}' | grep -q ipmi_
Packit Service ed0f68
	then
Packit Service ed0f68
	    # Try removing both 2.4 and 2.6 modules.
Packit Service ed0f68
	    /sbin/rmmod ipmi_si 2>/dev/null
Packit Service ed0f68
	    /sbin/rmmod ipmi_si_drv 2>/dev/null
Packit Service ed0f68
	    /sbin/rmmod ipmi_devintf
Packit Service ed0f68
	    /sbin/rmmod ipmi_msghandler
Packit Service ed0f68
	else
Packit Service ed0f68
	    echo "No ipmi modules loaded!" >&2
Packit Service ed0f68
	    RETVAL=1
Packit Service ed0f68
	    return $RETVAL
Packit Service ed0f68
	fi
Packit Service ed0f68
Packit Service ed0f68
	# Wait a sec to give modules time to unload.
Packit Service ed0f68
	sleep 1
Packit Service ed0f68
Packit Service ed0f68
	# Check if we failed to remove any modules, and complain if so.
Packit Service ed0f68
	if /sbin/lsmod | awk '{print $1}' | grep -q ipmi_
Packit Service ed0f68
	then
Packit Service ed0f68
	    echo "ipmi modules still loaded!" >&2
Packit Service ed0f68
	    RETVAL=1
Packit Service ed0f68
	    return $RETVAL
Packit Service ed0f68
	fi
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
# See how we were called.
Packit Service ed0f68
case "$1" in
Packit Service ed0f68
  start)
Packit Service ed0f68
	start
Packit Service ed0f68
	;;
Packit Service ed0f68
  stop)
Packit Service ed0f68
	stop
Packit Service ed0f68
	;;
Packit Service ed0f68
  status)
Packit Service ed0f68
	dostatus
Packit Service ed0f68
	;;
Packit Service ed0f68
  restart|reload)
Packit Service ed0f68
	restart
Packit Service ed0f68
	;;
Packit Service ed0f68
  condrestart)
Packit Service ed0f68
	condrestart
Packit Service ed0f68
	;;
Packit Service ed0f68
  remove)
Packit Service ed0f68
	remove
Packit Service ed0f68
	;;
Packit Service ed0f68
  *)
Packit Service ed0f68
	echo "Usage: ipmi {start|stop|status|restart|condrestart|remove}"
Packit Service ed0f68
	exit 1
Packit Service ed0f68
esac
Packit Service ed0f68
Packit Service ed0f68
exit $RETVAL