Hello,
On Fri, 25 Jan 2019 15:19:15 -0500 Adam Di Carlo <a.p.dica...@gmail.com> wrote: > > Jan 25 15:16:37 salsa systemd[1]: Starting LSB: OpenIPMI Driver init script... > Jan 25 15:16:37 salsa openipmi[3081]: /etc/init.d/openipmi: 55: [: 4.17: > unexpected operator > Jan 25 15:16:37 salsa openipmi[3081]: Starting ipmi drivers ipmi. > Jan 25 15:16:37 salsa systemd[1]: Started LSB: OpenIPMI Driver init script. attached you find a patch that fixes the bashisms (comparisons and string localizations). Additionally most shellcheck issues of the script are corrected (except for the sourcing tests, that should usually get skipped). No functional change is introduced. Cheers, Lars PS: the script feels a bit ugly and overly complicated in relation to its limited purpose (load or unload some kernel modules). But at least it should be in a better maintainable state now.
--- openipmi.orig 2019-09-27 19:37:51.981164100 +0200 +++ openipmi 2019-09-27 20:41:51.774647124 +0200 @@ -34,7 +34,7 @@ CONFIGFILE=/etc/default/openipmi # source config info -[ -r ${CONFIGFILE} ] && . ${CONFIGFILE} +[ -r "${CONFIGFILE}" ] && . "${CONFIGFILE}" ############################################################################# # GLOBALS @@ -51,8 +51,8 @@ *) IPMI_SI_MODULE_NAME="ipmi_si" ;; esac -kernel=`uname -r | cut -d. -f1-2` -if [ "${kernel}" == "2.4" ]; then +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 @@ -77,7 +77,7 @@ DEV_IPMI_TIMEOUT=15 UDEV_EXISTS=0 -if [ -e /sbin/udev -o -e /sbin/udevd ]; then +if [ -e /sbin/udev ] || [ -e /sbin/udevd ]; then UDEV_EXISTS=1 fi @@ -93,8 +93,8 @@ { OnePlusLoaded=0 OnePlusUnloaded=0 - for m in $@; do - if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then + for m in "$@"; do + if /sbin/lsmod | grep -qFw "$m"; then echo "$m module loaded." OnePlusLoaded=1 elif [ -d "/sys/module/$m" ]; then @@ -111,8 +111,8 @@ { OnePlusLoaded=0 OnePlusUnloaded=0 - for m in $@; do - if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then + for m in "$@"; do + if /sbin/lsmod | grep -qFw "$m"; then OnePlusLoaded=1 elif [ -d "/sys/module/$m" ]; then OnePlusLoaded=1 @@ -136,12 +136,14 @@ { rc_base=1 rc_hw=1 - modules_loaded_verbose "${MODULES_BASE}" + # shellcheck disable=SC2086 + modules_loaded_verbose ${MODULES_BASE} [ ${OnePlusLoaded} -eq 0 ] && rc_base=0 - - modules_loaded_verbose "${MODULES_HW}" + + # shellcheck disable=SC2086 + modules_loaded_verbose ${MODULES_HW} [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0 - + return $((rc_base && rc_hw)) } @@ -174,18 +176,19 @@ start_watchdog_common() { load_hw_modules + # shellcheck disable=SC2086 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 && + if [ ${UDEV_EXISTS} -eq 0 ] && [ ! -e /dev/watchdog ]; then + if ! mknod -m 0600 /dev/watchdog c 10 130; then + RETVAL=$((RETVAL | 8)) + log_end_msg return + fi fi #log_success_msg } @@ -199,7 +202,7 @@ start_watchdog() { - log_begin_msg $"Starting ipmi_watchdog driver: " + log_begin_msg "Starting ipmi_watchdog driver: " [ "${IPMI_WATCHDOG}" != "yes" ] && RETVAL=$((RETVAL | 2)) && log_failure_msg "not configured" && @@ -210,7 +213,7 @@ stop_watchdog() { - log_begin_msg $"Stopping ipmi_watchdog driver: " + 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 @@ -242,7 +245,7 @@ { local poweroff_opts="" load_hw_modules - if [ "${IPMI_POWERCYCLE}" == "yes" ]; then + 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 && \ @@ -304,27 +307,28 @@ stop_watchdog_quiet stop_powercontrol_quiet for m in ${MODULES}; do - modprobe -q -r ${m} > /dev/null 2>&1 + 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 ] && + if ! lsmod | grep -qFw "ipmi_devintf"; then rm -f "/dev/ipmi${INTF_NUM}" + fi } unload_ipmi_modules_leave_features() { for m in ${MODULES_INTERFACES}; do - modprobe -q -r ${m} > /dev/null 2>&1 + 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 ] && + if ! lsmod | grep -qFw "ipmi_devintf"; then rm -f "/dev/ipmi${INTF_NUM}" - lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1 - if [ "$?" -ne "0" ]; then + fi + if ! lsmod | grep -Eqw "ipmi_(poweroff|watchdog)"; then stop_watchdog_quiet stop_powercontrol_quiet for m in ${MODULES}; do - modprobe -q -r ${m} > /dev/null 2>&1 + modprobe -q -r "${m}" > /dev/null 2>&1 done fi } @@ -346,15 +350,15 @@ [ ${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)) + DEVMAJOR=$(awk '/ipmidev/{print $1}' /proc/devices) + 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 + while [ ! -e "/dev/ipmi${INTF_NUM}" ] && [ "${locdelay}" -gt 0 ]; do locdelay=$((locdelay - 1)) sleep 1 done @@ -367,9 +371,9 @@ RETVAL=$((RETVAL & ~2)) [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) if [ ${OnePlusLoaded} -eq 1 ]; then - DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'` + DEVMAJOR=$(awk '/imb/{print $1}' /proc/devices) rm -f /dev/imb - mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) + mknod -m 0600 /dev/imb c "${DEVMAJOR}" 0 || RETVAL=$((RETVAL | 4)) fi fi @@ -384,13 +388,13 @@ { log_begin_msg "Starting ${MODULE_NAME} drivers" "${MODULE_NAME}" load_ipmi_modules - if [ ${RETVAL} -eq 0 ]; then - touch ${LOCKFILE} + if [ "${RETVAL}" -eq 0 ]; then + touch "${LOCKFILE}" else if [ $((RETVAL & 1)) -eq 1 ]; then log_end_msg 1 else - touch ${LOCKFILE} + touch "${LOCKFILE}" fi fi start_watchdog_quiet @@ -403,12 +407,13 @@ { log_begin_msg "Stopping ${MODULE_NAME} drivers." unload_ipmi_modules_leave_features + # shellcheck disable=SC2086 modules_loaded ${MODULES_INTERFACES} if [ ${OnePlusLoaded} -ne 0 ]; then RETVAL=$((RETVAL | 32)) log_failure_msg "may be in use" else - rm -f ${LOCKFILE} + rm -f "${LOCKFILE}" fi log_end_msg 0 } @@ -417,12 +422,13 @@ { log_begin_msg "Stopping ${MODULE_NAME} drivers." unload_all_ipmi_modules + # shellcheck disable=SC2086 modules_loaded ${MODULES} if [ ${OnePlusLoaded} -ne 0 ]; then RETVAL=$((RETVAL | 32)) log_failure_msg "may be in use" else - rm -f ${LOCKFILE} + rm -f "${LOCKFILE}" log_success_msg fi log_end_msg 0 @@ -440,65 +446,70 @@ status_all() { - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + if minimum_modules_loaded; then + RETVAL=$((RETVAL | 1)) + fi + # shellcheck disable=SC2086 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)) + if [ "${DEV_IPMI}" = "yes" ] && device_node_exists "/dev/ipmi${INTF_NUM}"; then + RETVAL=$((RETVAL | 4)) fi - if [ "${IPMI_IMB}" = "yes" ]; then - device_node_exists /dev/imb - [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + if [ "${IPMI_IMB}" = "yes" ] && device_node_exists /dev/imb; then + RETVAL=$((RETVAL | 4)) fi - if [ "${IPMI_WATCHDOG}" = "yes" ]; then - device_node_exists /dev/watchdog - [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) + if [ "${IPMI_WATCHDOG}" = "yes" ] && device_node_exists /dev/watchdog; then + RETVAL=$((RETVAL | 8)) fi - [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16)) + if [ ! -e "${LOCKFILE}" ]; then + RETVAL=$((RETVAL | 16)) + fi } status() { - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + if minimum_modules_loaded; then + RETVAL=$((RETVAL | 1)) + fi 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)) + if device_node_exists "/dev/ipmi${INTF_NUM}"; then + RETVAL=$((RETVAL | 4)) + fi fi - if [ "${IPMI_IMB}" = "yes" ]; then - device_node_exists /dev/imb - [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + if [ "${IPMI_IMB}" = "yes" ] && device_node_exists /dev/imb; then + RETVAL=$((RETVAL | 4)) fi } status_watchdog() { - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + if minimum_modules_loaded; then + RETVAL=$((RETVAL | 1)) + fi modules_loaded_verbose ipmi_watchdog [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) - device_node_exists /dev/watchdog - [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) + if device_node_exists /dev/watchdog; then + RETVAL=$((RETVAL | 8)) + fi } status_powercontrol() { - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + if minimum_modules_loaded; then + RETVAL=$((RETVAL | 1)) + fi modules_loaded_verbose ipmi_powercontrol [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) @@ -513,7 +524,9 @@ condrestart () { - [ -e ${LOCKFILE} ] && restart + if [ -e "${LOCKFILE}" ]; then + restart + fi } #############################################################################