1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
|
#!/bin/sh
#
# chkconfig: 2345 11 60
# description: start, stop, or query ipmi system monitoring tools
# config: /etc/sysconfig/ipmi
#
# For Redhat, Fedora, or similar systems. Handles both 2.4 and 2.6
# configurations. Requires an /etc/sysconfig/ipmi file to function,
# see below.
#
# Phil Hollenback
# philiph@pobox.com
# Source function library.
. /etc/init.d/functions
# Exit silently if we don't have a sysconfig file,
# and read IPMI setting from it to determine whether or
# not to continue.
# The only current setting is ipmi={YES|NO}, whether or not
# to enable IPMI.
[ -f /etc/sysconfig/ipmi ] || exit 0
. /etc/sysconfig/ipmi
[ "${IPMI}" = "yes" ] || exit 0
RETVAL=0
start() {
echo -n $"Starting ipmi: "
# If ipmidev isn't listed in /proc/devices, try
# loading the modules.
if ! grep -q ipmidev /proc/devices
then
/sbin/modprobe ipmi_msghandler || RETVAL=1
/sbin/modprobe ipmi_devintf || RETVAL=1
# Try loading new driver module, fall back to old
# module if that fails.
if ! /sbin/modprobe ipmi_si >/dev/null 2>&1
then
/sbin/modprobe ipmi_si_drv || RETVAL=1
fi
fi
# If ipmidev still isn't listed in /proc/devices after we load
# modules, this just isn't going to work. Set RETVAL to mark
# this failure.
grep -q ipmidev /proc/devices || RETVAL=1
# remove old device file always
# in case ipmi gets assigned new dynamic major number from kernel
if [ -c /dev/ipmi0 ]; then
rm -f /dev/ipmi0
fi
# Check if the device file exists and create if not.
if [ ! -c /dev/ipmi0 ] && [ $RETVAL -eq 0 ]
then
major=$(awk '/ ipmidev$/{print $1}' /proc/devices)
/bin/mknod -m 0600 /dev/ipmi0 c $major 0 || RETVAL=1
fi
if [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ipmi ; then
echo_success
echo
else
echo_failure
echo
fi
}
stop() {
echo -n $"Shutting down ipmi: "
# Stop doesn't actually do anything because we currently don't
# unload ipmi modules on stop. That might change in the future
# if we decide unloading the ipmi modules is safe.
RETVAL=0
if [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ipmi ; then
echo_success
echo
else
echo_failure
echo
fi
}
dostatus() {
# Extract cpu temperatures from ipmitool output.
# Abort if we don't have the ipmitool program.
if ! /usr/bin/ipmitool -V >/dev/null
then
echo "/usr/bin/ipmitool not found!" >&2
exit 1
fi
# Abort if ipmi isn't loaded.
if ! grep -q ipmidev /proc/devices
then
echo "ipmi not listed in /proc/devices!" >&2
exit 1
fi
# Check if we are running on a v1.0 IPMI system, and
# change our processor search string appropriately.
if /usr/bin/ipmitool -I open bmc info | \
grep -q "IPMI Version.*1.0"
then
IpmiVersion="1.0"
fi
# Determine # of running processors
NumProcs=$(grep -c processor /proc/cpuinfo)
if [ $NumProcs -eq 0 ]
then
echo "Can't determine number of processors!" >&2
exit 1
fi
# Now build the query string. Concatenate it into
# one string because that's more efficient on 2.4 systems.
Count=1
TempString=""
while [ $Count -le $NumProcs ]
do
if [ x$IpmiVersion = x"1.0" ]
then
TempString="$TempString CPU\ $Count"
else
TempString="$TempString Processor$Count\ Temp"
fi
Count=$((Count + 1))
done
# building TempString like this and eval'ing it is ugly, but
# it's the only way I could make the quoting work. Sorry.
TempString="/usr/bin/ipmitool -I open sensor get $TempString"
eval $TempString | awk -v "c=$Count" '
BEGIN {
n = 1
}
/Sensor Reading/ {
printf "CPU%s Temp: %s\n",n,$4
n++
}
END {
if ( n != c) {
printf "Error: found %s CPUs, but got temps for %s\n",--c,--n >"/dev/stderr"
exit 1
}
exit 0
}'
RETVAL=$((RETVAL + $?))
return $RETVAL
}
restart() {
stop
start
RETVAL=$?
}
condrestart() {
[ -e /var/lock/subsys/ipmi ] && restart || :
}
remove () {
# Actually remove the drivers. Don't do during stop in case
# this causes system to become unstable (a la lm_sensors)
if /sbin/lsmod | awk '{print $1}' | grep -q ipmi_
then
# Try removing both 2.4 and 2.6 modules.
/sbin/rmmod ipmi_si 2>/dev/null
/sbin/rmmod ipmi_si_drv 2>/dev/null
/sbin/rmmod ipmi_devintf
/sbin/rmmod ipmi_msghandler
else
echo "No ipmi modules loaded!" >&2
RETVAL=1
return $RETVAL
fi
# Wait a sec to give modules time to unload.
sleep 1
# Check if we failed to remove any modules, and complain if so.
if /sbin/lsmod | awk '{print $1}' | grep -q ipmi_
then
echo "ipmi modules still loaded!" >&2
RETVAL=1
return $RETVAL
fi
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
dostatus
;;
restart|reload)
restart
;;
condrestart)
condrestart
;;
remove)
remove
;;
*)
echo "Usage: ipmi {start|stop|status|restart|condrestart|remove}"
exit 1
esac
exit $RETVAL
|