Package: openipmi
Version: 2.0.16-1
Severity: wishlist
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu karmic ubuntu-patch


Hello dear maintainer,


In Ubuntu, we've applied the attached patch to achieve the following:

  * debian/rules: debian/openipmi.init: added init-script.

We thought you might be interested in doing the same. 


-- System Information:
Debian Release: lenny/sid
  APT prefers hardy-updates
  APT policy: (500, 'hardy-updates'), (500, 'hardy-security'), (500, 
'hardy-proposed'), (500, 'hardy-backports'), (500, 'hardy')
Architecture: i386 (i686)

Kernel: Linux 2.6.24-16-generic (SMP w/2 CPU cores)
Locale: LANG=en_IN, LC_CTYPE=en_IN (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -u openipmi-2.0.16/debian/rules openipmi-2.0.16/debian/rules
--- openipmi-2.0.16/debian/rules
+++ openipmi-2.0.16/debian/rules
@@ -91,7 +91,7 @@
 #      dh_installemacsen
 #      dh_installpam
 #      dh_installmime
-#      dh_installinit
+       dh_installinit -p openipmi --name openipmi --no-start -- defaults 21 20
 #      dh_installcron
 #      dh_installinfo
        dh_installman
--- openipmi-2.0.16.orig/debian/openipmi.init
+++ openipmi-2.0.16/debian/openipmi.init
@@ -0,0 +1,533 @@
+#!/bin/bash
+#############################################################################
+#
+# ipmi:                OpenIPMI Driver init script
+#
+# Authors:     Matt Domsch <matt_dom...@dell.com>
+#               Chris Poblete <chris_pobl...@dell.com>
+#
+# chkconfig: - 13 87
+# description: OpenIPMI Driver init script
+#
+### BEGIN INIT INFO
+# Provides: ipmidrv
+# Required-Start: $local_fs $remote_fs $syslog
+# Required-Stop: $local_fs $remote_fs $syslog
+# Default-Start:
+# Default-Stop:
+# Short-Description: OpenIPMI Driver init script
+# Description: OpenIPMI Driver init script
+### END INIT INFO
+#
+# Status return code bits
+# no bits set = no errors
+# bit 0 set = minimum modules aren't loaded
+# bit 1 set = requested feature module isn't loaded
+# bit 2 set = /dev/ipmi0 (or /dev/imb if using that instead) doesn't exist
+# bit 3 set = /dev/watchdog doesn't exist
+# bit 4 set = lockfile doesn't exist
+# bit 5 set = modules are loaded even when asked to be unloaded
+
+#
+#############################################################################
+. /lib/lsb/init-functions
+
+CONFIGFILE=/etc/sysconfig/ipmi
+# source config info
+[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
+
+#############################################################################
+# GLOBALS
+#############################################################################
+MODULE_NAME="ipmi"
+INTF_NUM=0
+
+IPMI_SMB_MODULE_NAME="ipmi_smb"
+IPMI_SI_MODULE_NAME="ipmi_si"
+kernel=`uname -r | cut -d. -f1-2`
+if [ "${kernel}" == "2.4" ]; then
+    IPMI_SMB_MODULE_NAME="ipmi_smb_intf"
+    IPMI_SI_MODULE_NAME="ipmi_si_drv"
+fi
+
+MODULES_INTERFACES=""
+[ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} 
ipmi_devintf"
+[ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} 
ipmi_imb"
+
+MODULES_FEATURES=""
+[ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} 
ipmi_watchdog"
+[ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} 
ipmi_poweroff"
+
+MODULES_HW=""
+[ "${IPMI_SI}"  = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}"
+[ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}"
+
+MODULES_BASE="ipmi_msghandler"
+MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} 
${MODULES_BASE}"
+
+RETVAL=0
+LOCKFILE=/var/lock/subsys/ipmi
+DEV_IPMI_TIMEOUT=15
+
+UDEV_EXISTS=0
+if [ -e /sbin/udev -o -e /sbin/udevd ]; then
+    UDEV_EXISTS=1
+fi
+
+#############################################################################
+# NOTES:
+# * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload,
+#   because SLES9 and RHEL4 kernels don't send a message for udev to delete
+#   it for us.
+# 
+#############################################################################
+
+modules_loaded_verbose()
+{
+       OnePlusLoaded=0
+       OnePlusUnloaded=0
+       for m in $@; do
+               if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
+                       echo "$m module loaded."
+                       OnePlusLoaded=1
+               else
+                       echo "$m module not loaded."
+                       OnePlusUnloaded=1
+               fi
+       done
+}
+
+modules_loaded()
+{
+       OnePlusLoaded=0
+       OnePlusUnloaded=0
+       for m in $@; do
+               if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
+                       OnePlusLoaded=1
+               else
+                       OnePlusUnloaded=1
+               fi
+       done
+}
+
+device_node_exists ()
+{
+       if [ -e "$1" ]; then
+               echo "$1 exists."
+               return 1
+       fi
+       echo "$1 does not exist."
+       return 0
+}
+
+minimum_modules_loaded()
+{
+        rc_base=1
+       rc_hw=1
+        modules_loaded_verbose "${MODULES_BASE}"
+       [ ${OnePlusLoaded} -eq 0 ] && rc_base=0
+           
+       modules_loaded_verbose "${MODULES_HW}"
+       [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0
+       
+       return $((rc_base && rc_hw))
+}
+
+#############################################################################
+
+load_si()
+{
+       if [ "${IPMI_SI}" = "yes" ]; then
+               modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1
+               modules_loaded ${IPMI_SI_MODULE_NAME}
+               [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
+       fi
+}
+
+load_smb()
+{
+       if [ "${IPMI_SMB}" = "yes" ]; then
+               modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1
+               modules_loaded ${IPMI_SMB_MODULE_NAME}
+               [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
+       fi
+}
+
+load_hw_modules()
+{
+       load_si
+       load_smb
+}
+
+start_watchdog_common()
+{
+       load_hw_modules
+       modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1
+       modules_loaded ipmi_watchdog
+       [ ${OnePlusUnloaded} -ne 0 ] &&
+               RETVAL=$((RETVAL | 2)) &&
+               log_end_msg &&
+               return
+       if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then
+               mknod -m 0600 /dev/watchdog c 10 130
+               [ $? -ne 0 ] &&
+                       RETVAL=$((RETVAL | 8)) &&
+                       log_end_msg &&
+                       return
+       fi
+       #log_success_msg
+}
+
+start_watchdog_quiet()
+{
+       [ "${IPMI_WATCHDOG}" != "yes" ] &&
+               return
+       start_watchdog_common
+}
+
+start_watchdog()
+{
+       log_begin_msg $"Starting ipmi_watchdog driver: "
+       [ "${IPMI_WATCHDOG}" != "yes" ] &&
+               RETVAL=$((RETVAL | 2)) &&
+               log_failure_msg "not configured" &&
+               return
+       start_watchdog_common
+       log_end_msg 0
+}
+
+stop_watchdog()
+{
+       log_begin_msg $"Stopping ipmi_watchdog driver: "
+       modprobe -q -r ipmi_watchdog > /dev/null 2>&1
+       modules_loaded ipmi_watchdog
+       if [ ${OnePlusLoaded} -ne 0 ]; then
+           RETVAL=$((RETVAL | 32))
+           log_failure_msg "failed"
+       else
+           if [ "${IPMI_WATCHDOG}" = "yes" ]; then
+               [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
+           fi
+           log_success_msg "success"
+       fi
+       log_end_msg 0
+}
+
+stop_watchdog_quiet()
+{
+       modprobe -q -r ipmi_watchdog > /dev/null 2>&1
+       modules_loaded ipmi_watchdog
+       if [ ${OnePlusLoaded} -ne 0 ]; then
+           RETVAL=$((RETVAL | 32))
+       else
+           if [ "${IPMI_WATCHDOG}" = "yes" ]; then
+               [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
+           fi
+       fi
+}
+
+start_powercontrol_common()
+{
+       local poweroff_opts=""
+       load_hw_modules
+       if [ "${IPMI_POWERCYCLE}" == "yes" ]; then
+           modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > 
/dev/null 2>&1 && \
+               poweroff_opts="poweroff_control=2"
+           modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > 
/dev/null 2>&1 && \
+               poweroff_opts="poweroff_powercycle=1"
+       fi
+       modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1
+       modules_loaded ipmi_poweroff
+       [ ${OnePlusUnloaded} -ne 0 ] &&
+               RETVAL=$((RETVAL | 2)) &&
+               log_failure_msg &&
+               return
+       log_success_msg
+}
+
+start_powercontrol_quiet()
+{
+       [ "${IPMI_POWEROFF}" != "yes" ] &&
+               return
+       log_begin_msg "Starting ipmi_poweroff driver: "
+       start_powercontrol_common
+       log_end_msg 0
+}
+
+start_powercontrol()
+{
+       log_begin_msg "Starting ipmi_poweroff driver."
+       [ "${IPMI_POWEROFF}" != "yes" ] &&
+               RETVAL=$((RETVAL | 2)) &&
+               log_failure_msg "not configured" &&
+               return
+       start_powercontrol_common
+       log_end_msg 0
+}
+
+stop_powercontrol()
+{
+       log_being_msg "Stopping ipmi_poweroff driver."
+       modprobe -q -r ipmi_poweroff > /dev/null 2>&1
+       modules_loaded ipmi_poweroff
+       if [ ${OnePlusLoaded} -ne 0 ]; then
+           RETVAL=$((RETVAL | 32))
+           log_failure_msg
+       else
+           log_success_msg
+       fi
+       log_end_msg 0
+}
+
+stop_powercontrol_quiet()
+{
+       modprobe -q -r ipmi_poweroff > /dev/null 2>&1
+       modules_loaded ipmi_poweroff
+       [ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32))
+}
+
+#############################################################################
+unload_all_ipmi_modules()
+{
+       stop_watchdog_quiet
+       stop_powercontrol_quiet
+       for m in ${MODULES}; do
+               modprobe -q -r ${m} > /dev/null 2>&1
+       done
+        # delete interface node ONLY if ipmi_devintf is unloaded
+        [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
+               rm -f "/dev/ipmi${INTF_NUM}"
+}
+
+unload_ipmi_modules_leave_features()
+{
+       for m in ${MODULES_INTERFACES}; do
+               modprobe -q -r ${m} > /dev/null 2>&1
+       done
+        # delete interface node ONLY if ipmi_devintf is unloaded
+        [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
+               rm -f "/dev/ipmi${INTF_NUM}"
+       lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1
+       if [ "$?" -ne "0" ]; then
+               stop_watchdog_quiet
+               stop_powercontrol_quiet
+               for m in ${MODULES}; do
+                       modprobe -q -r ${m} > /dev/null 2>&1
+               done
+       fi
+}
+
+#############################################################################
+load_ipmi_modules ()
+{
+       local locdelay
+       modprobe ipmi_msghandler > /dev/null 2>&1
+       modules_loaded ipmi_msghandler
+       [ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && 
RETVAL=$((RETVAL | 1)) && return
+       load_hw_modules
+       [ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && 
RETVAL=$((RETVAL | 1)) && return
+
+       if [ "${DEV_IPMI}" = "yes" ]; then
+               modprobe ipmi_devintf > /dev/null 2>&1
+               modules_loaded ipmi_devintf
+               RETVAL=$((RETVAL & ~2))
+               [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+               if [ ${OnePlusLoaded} -eq 1 ]; then
+                       if [ ${UDEV_EXISTS} -eq 0 ]; then
+                               DEVMAJOR=`cat /proc/devices | awk 
'/ipmidev/{print $1}'`
+                               rm -f /dev/ipmi${INTF_NUM}
+                               mknod -m 0600 /dev/ipmi${INTF_NUM} c 
${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
+                       fi
+
+                       # udev can take several seconds to create /dev/ipmi0, 
+                       # but it happens asynchronously, so delay here
+                       locdelay=${DEV_IPMI_TIMEOUT}
+                       while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 
]; do
+                               locdelay=$((locdelay - 1))
+                               sleep 1
+                       done
+               fi
+       fi
+
+       if [ "${IPMI_IMB}" = "yes" ]; then
+               modprobe ipmi_imb > /dev/null 2>&1
+               modules_loaded ipmi_imb
+               RETVAL=$((RETVAL & ~2))
+               [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+               if [ ${OnePlusLoaded} -eq 1 ]; then
+                       DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'`
+                       rm -f /dev/imb
+                       mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || 
RETVAL=$((RETVAL | 4))
+               fi
+       fi
+
+       # Per Corey Minyard, essentially no one uses ipmi_radisys
+       # and we don't want to encourage its further use
+       # so it won't be handled here.
+       return
+}
+
+#############################################################################
+start()
+{
+       log_begin_msg "Starting ${MODULE_NAME} drivers" "${MODULE_NAME}"
+       load_ipmi_modules
+       if [ ${RETVAL} -eq 0 ]; then
+               touch ${LOCKFILE}
+       else
+               if [ $((RETVAL & 1)) -eq 1 ]; then
+                       log_end_msg 1
+               else
+                       touch ${LOCKFILE}
+               fi
+       fi
+       start_watchdog_quiet
+       start_powercontrol_quiet
+       log_end_msg 0
+}
+
+#############################################################################
+stop()
+{
+       log_begin_msg "Stopping ${MODULE_NAME} drivers."
+       unload_ipmi_modules_leave_features
+       modules_loaded ${MODULES_INTERFACES}
+       if [ ${OnePlusLoaded} -ne 0 ]; then
+               RETVAL=$((RETVAL | 32))
+               log_failure_msg "may be in use"
+       else
+               rm -f ${LOCKFILE}
+       fi
+       log_end_msg 0
+}
+
+stop_all()
+{
+       log_begin_msg "Stopping ${MODULE_NAME} drivers."
+       unload_all_ipmi_modules
+       modules_loaded ${MODULES}
+       if [ ${OnePlusLoaded} -ne 0 ]; then
+               RETVAL=$((RETVAL | 32))
+               log_failure_msg "may be in use"
+       else
+               rm -f ${LOCKFILE}
+               log_success_msg
+       fi
+       log_end_msg 0
+}
+
+#############################################################################
+restart()
+{
+       stop_all
+       RETVAL=0
+       start
+}
+
+#############################################################################
+
+status_all()
+{
+       minimum_modules_loaded
+       [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+       
+       modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES}
+       [ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2))
+
+       if [ "${DEV_IPMI}" = "yes" ]; then 
+           device_node_exists /dev/ipmi${INTF_NUM}
+           [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+       fi
+
+       if [ "${IPMI_IMB}" = "yes" ]; then
+           device_node_exists /dev/imb
+           [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+       fi
+
+       if [ "${IPMI_WATCHDOG}" = "yes" ]; then
+           device_node_exists /dev/watchdog
+           [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
+       fi
+
+       [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16))
+}
+
+status()
+{
+       minimum_modules_loaded
+       [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+       
+       if [ "${DEV_IPMI}" = "yes" ]; then 
+           modules_loaded_verbose ipmi_devintf
+           [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+
+           device_node_exists /dev/ipmi${INTF_NUM}
+           [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+       fi
+
+       if [ "${IPMI_IMB}" = "yes" ]; then
+           device_node_exists /dev/imb
+           [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+       fi
+}
+
+status_watchdog()
+{
+       minimum_modules_loaded
+       [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+
+       modules_loaded_verbose ipmi_watchdog
+       [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+
+       device_node_exists /dev/watchdog
+       [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
+}
+
+status_powercontrol()
+{
+       minimum_modules_loaded
+       [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+
+       modules_loaded_verbose ipmi_powercontrol
+       [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+}
+
+#############################################################################
+usage ()
+{
+       log_action_msg "Usage: $0 
{start|stop|status|restart|condrestart|try-restart|start-watchdog|stop-watchdog|status-watchdog|start-powercontrol|stop-powercontrol|status-powercontrol|stop-all|status-all}"
+       RETVAL=1
+}
+
+condrestart ()
+{
+       [ -e ${LOCKFILE} ] && restart
+}
+
+#############################################################################
+# MAIN
+#############################################################################
+case "$1" in
+       start) start ;;
+       stop)  stop ;;
+       restart) restart ;;
+       status) status ;;
+       status-all) status_all ;;
+       condrestart) condrestart ;;
+       try-restart) condrestart ;;
+       start-watchdog) start_watchdog ;;
+       stop-watchdog) stop_watchdog ;;
+       status-watchdog) status_watchdog ;;
+       start-powercontrol) start_powercontrol ;;
+       stop-powercontrol) stop_powercontrol ;;
+       status-powercontrol) status_powercontrol ;;
+       stop-all) stop_all ;;
+       *) usage ;;
+esac
+
+exit ${RETVAL}
+
+#############################################################################
+# end of file
+#############################################################################
+

Reply via email to