|
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
|