#!/usr/bin/sh #---------------------------------------------------------------------------------- # /var/install/bin/nut-debug-driver-load - Load driver in debug mode # # Copyright (c) 2014-2024 The Eisfair Team, team(at)eisfair(dot)org # # Creation: 2014-05-18 jed # Last Update: $Id: nut-pre-view-log 35516 2014-05-04 21:06:12Z jed $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------------- # load eislib etc. . /var/install/include/eislib # exec 2>/tmp/nut-debug-driver-load-trace-$$.log # set -x clean_up () { sleep 1 mecho mecho "- debug messages have been written to '${tmp_file}'!" } module_name=nut driver_path=/usr/libexec/ups/driver configfile=/etc/config.d/${module_name} tmp_file=/tmp/nut-debug-driver-load.log # name 'ups' need to be used for Synology diskstation compatibility # upsname="`hostname`-ups`" default_upsname='ups' . ${configfile} idx=1 ups_idx=1 ups_list=':' while [ ${idx} -le ${NUT_SERVER_N} ] do eval active='$NUT_SERVER_'${idx}'_ACTIVE' if [ "${active}" = "yes" ] then eval uname='$NUT_SERVER_'${idx}'_UPSNAME' eval desc='$NUT_SERVER_'${idx}'_COMMENT' eval driver='$NUT_SERVER_'${idx}'_DRIVER' eval port='$NUT_SERVER_'${idx}'_PORT' eval cable='$NUT_SERVER_'${idx}'_CABLE' eval order='$NUT_SERVER_'${idx}'_ORDER' eval delay='$NUT_SERVER_'${idx}'_DELAY' if [ -n "${uname}" ] then upsname="${uname}" else upsname="${default_upsname}" fi # check if ups name has already been used echo "${ups_list}" | grep -q ":${upsname}," if [ $? -ne 0 ] then # ups name is uniq, use it ups_list="${ups_list}${upsname}:" else # create individual ups name upsname="${upsname}-${idx}" ups_list="${ups_list}${upsname}:" fi eval ups_${ups_idx}_upsname="${upsname}" eval ups_${ups_idx}_driver="${driver}" eval ups_${ups_idx}_desc="${desc}" eval ups_${ups_idx}_port="${port}" ups_idx=`expr ${ups_idx} + 1` fi idx=`expr ${idx} + 1` done ups_n=`expr ${ups_idx} - 1` clrhome mecho --info "Load UPS driver in debug mode" mecho techo --begin '4r 10 15 30' techo --row --info "Nbr" --info "name" --info "driver" --info "comment" idx=1 while [ ${idx} -le ${ups_n} ] do eval upsname='$ups_'${idx}'_upsname' eval driver='$ups_'${idx}'_driver' eval desc='$ups_'${idx}'_desc' techo --row "${idx}" "${upsname}" "${driver}" "${desc}" idx=`expr ${idx} + 1` done techo --end mecho endflag=0 until [ ${endflag} -eq 1 ] do /var/install/bin/ask "Please enter ups number (1-${ups_n}) or (q)uit:" '' '+' > /tmp/ask.$$ rc=$? nbr=`cat /tmp/ask.$$` rm -f /tmp/ask.$$ if [ $rc = 255 ] then exit 1 fi case "${nbr}" in [qQ]) endflag=1 exit 1 ;; [0-9]|[1-9][0-9]) ### number entered ### if [ ${nbr} -ge 1 -a ${nbr} -le ${ups_n} ] then mecho --info "Trying to load driver in debug mode ..." eval upsname='$ups_'${nbr}'_upsname' eval driver='$ups_'${nbr}'_driver' eval desc='$ups_'${nbr}'_desc' eval port='$ups_'${nbr}'_port' # check if driver has already been loaded stopflag=0 ps -ef| grep -v "grep" | grep -q -w "${driver_path}/${driver}" if [ $? -eq 0 ] then # stop all processes mecho mecho "- stopping all running nut instances ..." /etc/init.d/nut stop stopflag=1 fi mecho # catch ctrl-c etc. to be able to continue with script execution trap clean_up SIGHUP SIGINT SIGTERM # start driver program in debug mode rm -f ${tmp_file} ${driver_path}/${driver} -DDDDD -a ${upsname} 2>&1 | tee -a ${tmp_file} # if message 'is locked by another process' is shown # run lsof to identify the program locking the # port. grep -q "is locked by another process" ${tmp_file} if [ $? -eq 0 ] then lsof ${port} >> ${tmp_file} fi if [ ${stopflag} -eq 1 ] then /etc/init.d/nut start fi endflag=1 else mecho --warn "Number not in range, try again!" fi ;; *) ;; esac done exit 0