fixed dos line-endings
This commit is contained in:
parent
b3b3292022
commit
9ab589cae7
3 changed files with 467 additions and 455 deletions
200
install.sh
200
install.sh
|
|
@ -1,101 +1,101 @@
|
|||
#!/bin/bash
|
||||
# initial vars
|
||||
rundir=${0%/*}
|
||||
source ${rundir}/functions
|
||||
scriptname=${0##*/}
|
||||
runuser=$(whoami)
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Parameters
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
VERSION=1.0
|
||||
bashrc_append="if [ -n \"$BASH_VERSION\" ]; then
|
||||
# include .bashrc if it exists
|
||||
if [ -d \"$HOME/.bashrc.d\" ]; then
|
||||
for file in $HOME/.bashrc.d/*.bashrc ; do
|
||||
source \"$file\"
|
||||
done
|
||||
fi
|
||||
fi"
|
||||
|
||||
packages=(
|
||||
git
|
||||
vim
|
||||
nfs-kernel-server
|
||||
nfs-common
|
||||
)
|
||||
globalinstalldir="/usr/lib/pyr0-bash"
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Funcitons
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
usage(){
|
||||
boxtop
|
||||
boxline "${lyl}$scriptname - v${VERSION}:${dfl}"
|
||||
boxline "${lbl}Usage:${dfl}"
|
||||
boxline "${lyl}$scriptname ${bld}[args]"
|
||||
boxseparator
|
||||
boxline "[args:]"
|
||||
boxline " -i [--install]"
|
||||
boxline " -r [--remove]"
|
||||
boxline " -u [--update]"
|
||||
boxline " -h [--help]"
|
||||
boxbottom
|
||||
}
|
||||
|
||||
install(){
|
||||
mkdir -p ${globalinstalldir}
|
||||
cp ${rundir}/functions ${globalinstalldir}/functions
|
||||
cp -r $rundir/lib/skel/* $HOME
|
||||
cp $rundir/lib/vimfiles/crystallite.vim /usr/share/vim/vim*/colors/crystallite.vim
|
||||
cp $rundir/lib/vimfiles/vimrc.local /etc/vim/vimrc.local
|
||||
echo -e $bashrc_append >> $HOME/.bashrc
|
||||
|
||||
}
|
||||
|
||||
remove(){
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
update(){
|
||||
pushd $rundir
|
||||
remove
|
||||
git fetch && git pull
|
||||
install
|
||||
popd
|
||||
}
|
||||
|
||||
#------------------------------------------------------#
|
||||
# Options and Arguments Parser
|
||||
#------------------------------------------------------#
|
||||
|
||||
if [[ $runuser == root ]] ; then
|
||||
case $1 in
|
||||
-i | --install)
|
||||
install
|
||||
;;
|
||||
-r | --remove)
|
||||
remove
|
||||
;;
|
||||
-u | --update)
|
||||
update
|
||||
#sleep $ratelimit
|
||||
exit 0
|
||||
;;
|
||||
-h | --help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
warn "Invalid argument $@"
|
||||
usage
|
||||
#exit 2
|
||||
;;
|
||||
esac
|
||||
else
|
||||
fail "Must be run as user 'root'"
|
||||
fi
|
||||
#------------------------------------------------------#
|
||||
# Script begins here
|
||||
#!/bin/bash
|
||||
# initial vars
|
||||
rundir=${0%/*}
|
||||
source ${rundir}/functions
|
||||
scriptname=${0##*/}
|
||||
runuser=$(whoami)
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Parameters
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
VERSION=1.0
|
||||
bashrc_append="if [ -n \"$BASH_VERSION\" ]; then
|
||||
# include .bashrc if it exists
|
||||
if [ -d \"$HOME/.bashrc.d\" ]; then
|
||||
for file in $HOME/.bashrc.d/*.bashrc ; do
|
||||
source \"$file\"
|
||||
done
|
||||
fi
|
||||
fi"
|
||||
|
||||
packages=(
|
||||
git
|
||||
vim
|
||||
nfs-kernel-server
|
||||
nfs-common
|
||||
)
|
||||
globalinstalldir="/usr/lib/pyr0-bash"
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Funcitons
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
usage(){
|
||||
boxtop
|
||||
boxline "${lyl}$scriptname - v${VERSION}:${dfl}"
|
||||
boxline "${lbl}Usage:${dfl}"
|
||||
boxline "${lyl}$scriptname ${bld}[args]"
|
||||
boxseparator
|
||||
boxline "[args:]"
|
||||
boxline " -i [--install]"
|
||||
boxline " -r [--remove]"
|
||||
boxline " -u [--update]"
|
||||
boxline " -h [--help]"
|
||||
boxbottom
|
||||
}
|
||||
|
||||
install(){
|
||||
mkdir -p ${globalinstalldir}
|
||||
cp ${rundir}/functions ${globalinstalldir}/functions
|
||||
cp -r $rundir/lib/skel/* $HOME
|
||||
cp $rundir/lib/vimfiles/crystallite.vim /usr/share/vim/vim*/colors/crystallite.vim
|
||||
cp $rundir/lib/vimfiles/vimrc.local /etc/vim/vimrc.local
|
||||
echo -e $bashrc_append >> $HOME/.bashrc
|
||||
|
||||
}
|
||||
|
||||
remove(){
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
update(){
|
||||
pushd $rundir
|
||||
remove
|
||||
git fetch && git pull
|
||||
install
|
||||
popd
|
||||
}
|
||||
|
||||
#------------------------------------------------------#
|
||||
# Options and Arguments Parser
|
||||
#------------------------------------------------------#
|
||||
|
||||
if [[ $runuser == root ]] ; then
|
||||
case $1 in
|
||||
-i | --install)
|
||||
install
|
||||
;;
|
||||
-r | --remove)
|
||||
remove
|
||||
;;
|
||||
-u | --update)
|
||||
update
|
||||
#sleep $ratelimit
|
||||
exit 0
|
||||
;;
|
||||
-h | --help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
warn "Invalid argument $@"
|
||||
usage
|
||||
#exit 2
|
||||
;;
|
||||
esac
|
||||
else
|
||||
fail "Must be run as user 'root'"
|
||||
fi
|
||||
#------------------------------------------------------#
|
||||
# Script begins here
|
||||
#------------------------------------------------------#
|
||||
|
|
@ -29,4 +29,16 @@ case `select_opt "${options[@]}"` in
|
|||
0) echo "selected Yes";;
|
||||
1) echo "selected No";;
|
||||
*) echo "selected ${options[$?]}";;
|
||||
esac
|
||||
esac
|
||||
|
||||
# Example for above multiselect functions
|
||||
my_options=( "Option 1" "Option 2" "Option 3" )
|
||||
preselection=( "true" "true" "false" )
|
||||
|
||||
multiselect result my_options preselection
|
||||
|
||||
idx=0
|
||||
for option in "${my_options[@]}"; do
|
||||
echo -e "$option\t=> ${result[idx]}"
|
||||
((idx++))
|
||||
done
|
||||
708
scriptexample.sh
708
scriptexample.sh
|
|
@ -1,354 +1,354 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Moxa NPort Driver loader and watchdog script
|
||||
|
||||
# initial vars
|
||||
scriptname=${0##*/}
|
||||
rundir=${0%/*}
|
||||
|
||||
source ${rundir}/functions
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Parameters
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
VERSION=1.0
|
||||
logfile=/var/log/bdv/moxaloader.log
|
||||
ratelimit=15
|
||||
rst_threshold=1
|
||||
god=/opt/ruby-enterprise/bin/god
|
||||
pingfile=/usr/lib/npreal2/driver/pingup
|
||||
daemonpid=$(ps -ef | grep -v grep | grep moxaloader.*daemon | awk {'print $2'})
|
||||
config_sh=$(grep DNS /.AVC-X/etc/networking/profiles/default/ifcfg-Public)
|
||||
resolv_conf=$(grep nameserver /.AVC-X/etc/networking/profiles/default/resolv.conf)
|
||||
config_dev=$(grep DNS /.AVC-X/etc/networking/devices/ifcfg-Public)
|
||||
sys_resolv_conf=$(grep nameserver /etc/resolv.conf)
|
||||
etc_net_sh=$(grep DNS /etc/network-scripts/ifcfg-Public)
|
||||
dns=$(grep DNS1 /.AVC-X/etc/networking/profiles/default/ifcfg-Public | cut -c 6-)
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Funcitons
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
|
||||
usage(){
|
||||
boxtop
|
||||
boxline "${lyl}Moxa NPort Watchdog & Recovery v$VERSION${dfl}"
|
||||
boxseparator
|
||||
boxline "Usage:"
|
||||
boxline "$scriptname [FUNCTIONS][-d|--daemon|--usage|--version]"
|
||||
boxseparator
|
||||
boxline "-s | --start - Initializes the Moxa NPort Driver only and exits"
|
||||
boxline "-S | --stop - stops the NPort driver and any ongoing daemonized watchdog"
|
||||
boxline "-r | --restart - Restarts all BDV hardware services, and re-initialized moxa if DNS is valid"
|
||||
boxline "-R | --force-restart - forces a restart of both the NPort driver and BDV services (assume -9)"
|
||||
boxline "-p | --ping - Detect nPort online and write 'pingup' file if true or remove if false"
|
||||
boxline "-P | --pid - returns the PID's of any ongoing NPort Driver processes"
|
||||
boxline "-d | --daemon - daemonizes the service as a watchdog"
|
||||
boxline "-F | --fix-dns - Checks system's DNS config and removes entries if invalid"
|
||||
boxline "-u | --usage - Show this help text"
|
||||
boxline "-h | --help - Show this help text"
|
||||
boxline "-v | --version - returns the version of this script"
|
||||
boxbottom
|
||||
}
|
||||
|
||||
removedns(){
|
||||
# Look for existing DNS entries if there are any
|
||||
config_sh=$(grep DNS /.AVC-X/etc/networking/profiles/default/ifcfg-Public)
|
||||
resolv_conf=$(grep nameserver /.AVC-X/etc/networking/profiles/default/resolv.conf)
|
||||
resolv_search=$(grep search /.AVC-X/etc/networking/profiles/default/resolv.conf)
|
||||
config_dev=$(grep DNS /.AVC-X/etc/networking/devices/ifcfg-Public)
|
||||
sys_resolv_conf=$(grep nameserver /etc/resolv.conf)
|
||||
sys_resolv_search=$(grep search /etc/resolv.conf)
|
||||
etc_net_sh=$(grep DNS /etc/network-scripts/ifcfg-Public)
|
||||
# Checks if the above variables are empty, and if all are, exits the function only
|
||||
if [[ -z "$config_sh" && -z "$resolv_conf" && -z "$resolv_search" && -z "$config_dev" && -z "$sys_resolv_conf" && -z "$sys_resolv_search" && -z "$etc_net_sh" ]] ; then
|
||||
logger echo -e "${grn}No DNS entries found${dfl}"
|
||||
return 0
|
||||
else
|
||||
# If either of the above variables are not empty, proceeds with checking
|
||||
# and printing their contents
|
||||
if [[ ! -z "$config_sh" ]] ; then
|
||||
logger echo -e "${lbl}Current DNS is set to:${dfl}"
|
||||
logger echo -e "$config_sh"
|
||||
# sed uses regex to detect and delete lines out of the configuration script
|
||||
# files that contain DNS entries
|
||||
sudo sed -i '/DNS/d' /.AVC-X/etc/networking/profiles/default/ifcfg-Public && logger echo -e "${ylw}Successfully removed DNS entries from ifcfg-Public${dfl}\n" || logger fail "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/ifcfg-Public${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$resolv_conf" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf entry is${dfl}"
|
||||
logger echo -e "$resolv_conf"
|
||||
sudo sed -i '/nameserver/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$resolv_conf" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf is searching${dfl}"
|
||||
logger echo -e "$resolv_search"
|
||||
sudo sed -i '/search/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$config_dev" ]] ; then
|
||||
logger echo -e "${lbl}Current DNS is set to:${dfl}"
|
||||
logger echo -e "$config_dev"
|
||||
# sed uses regex to detect and delete lines out of the configuration script
|
||||
# files that contain DNS entries
|
||||
sudo sed -i '/DNS/d' /.AVC-X/etc/networking/devices/ifcfg-Public && logger echo -e "${ylw}Successfully removed DNS entries from ifcfg-Public${dfl}\n" || logger fail "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/devices/ifcfg-Public${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$sys_resolv_conf" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf entry is${dfl}"
|
||||
logger echo -e "$sys_resolv_conf"
|
||||
sudo sed -i '/nameserver/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from /etc/resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /etc/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$sys_resolv_search" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf is searching${dfl}"
|
||||
logger echo -e "$sys_resolv_search"
|
||||
sudo sed -i '/search/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from /etc/resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /etc/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$etc_net_sh" ]] ; then
|
||||
logger echo -e "${lbl}Current DNS is set to:${dfl}"
|
||||
logger echo -e "$etc_net_sh"
|
||||
# sed uses regex to detect and delete lines out of the configuration script
|
||||
# files that contain DNS entries
|
||||
sudo sed -i '/DNS/d' /etc/network-scripts/ifcfg-Public && logger echo -e "${ylw}Successfully removed DNS entries from ifcfg-Public${dfl}\n" || logger fail "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/ifcfg-Public${dfl}"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
dnscheck(){
|
||||
# The Moxa drivers are built in such a way that they will hang if no outside
|
||||
# network is available, unless DNS entries are not present. Below checks for
|
||||
# external network access, then removes dns entries if outside network is unavailable
|
||||
|
||||
# Check if dns entries exist
|
||||
if [[ ! -z "$config_sh" || ! -z "$resolv_conf" || ! -z "$config_dev" || ! -z "$sys_resolv_conf" || ! -z "$etc_net_sh" ]] ; then
|
||||
# If DNS entries are found, check that the server can ping them
|
||||
logger echo -e "DNS Entries found, checking for internet connection"
|
||||
ping -c 1 $dns >/dev/null 2>&1
|
||||
if [[ $? != 0 ]] ; then
|
||||
# If DNS entries are found, but not responding,
|
||||
# remove DNS entries to prevent drivers from hanging on boot
|
||||
logger echo -e "${ong}DNS $dns is not responding to ping${dfl}"
|
||||
logger echo -e "Removing DNS entries from network configuration"
|
||||
return 1
|
||||
else
|
||||
# If DNS entries are found, but responding, leave the entries intact
|
||||
logger echo -e "${grn}DNS is responding, entries valid.${dfl}"
|
||||
logger echo -e "${lyl}Proceeding with initialization.${dfl}"
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
logger echo -e "DNS Entries not found, skipping DNS pingcheck"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dnspurge(){
|
||||
# Run first dns check and removal
|
||||
removedns
|
||||
# Run network reset
|
||||
sudo /sbin/service network restart
|
||||
# Run second dns check for lingering entries
|
||||
logger echo -e "${pur}Re-checking dns entries${dfl}"
|
||||
removedns
|
||||
}
|
||||
|
||||
moxatty(){
|
||||
ls /dev/tty* | grep -c ttyr00
|
||||
}
|
||||
|
||||
# Checks moxa's online status and stores state via external 'pingtest' file
|
||||
online(){
|
||||
if [ ! -f $pingfile ] ; then
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 2
|
||||
else
|
||||
echo 1
|
||||
fi
|
||||
else
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 0
|
||||
else
|
||||
echo 3
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks moxa's online status and stores state in a variable
|
||||
pingtest(){
|
||||
if [[ $moxaonline == true ]] ; then
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 0
|
||||
else
|
||||
echo 3
|
||||
fi
|
||||
else
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 2
|
||||
else
|
||||
echo 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Launch the Moxa NPort loader application
|
||||
start(){
|
||||
/usr/lib/npreal2/driver/mxloadsvr
|
||||
}
|
||||
|
||||
# Force terminate any instances of the Moxa NPort application
|
||||
stop(){
|
||||
sudo pkill -9 npreal2d
|
||||
}
|
||||
|
||||
# Force stop of any daemonized instances of this script
|
||||
fullstop(){
|
||||
stop
|
||||
sudo kill -9 $daemonpid
|
||||
}
|
||||
|
||||
# Restart of multiple services is required to re-establish device control after
|
||||
# the NPort loses its connection. The order of restarting these services is
|
||||
# significant, and should be maintained.
|
||||
restart(){
|
||||
stop
|
||||
start
|
||||
god restart rs232
|
||||
sudo /sbin/service SimpleHttpDeviceServer restart_noscript
|
||||
sudo /sbin/service BDVHardwareManager restart
|
||||
god restart steris_act
|
||||
}
|
||||
|
||||
conditionalrestart(){
|
||||
if [[ $(dnscheck) == 0 ]] ; then
|
||||
stop
|
||||
start
|
||||
fi
|
||||
god restart rs232
|
||||
sudo /sbin/service SimpleHttpDeviceServer restart_noscript
|
||||
sudo /sbin/service BDVHardwareManager restart
|
||||
god restart steris_act
|
||||
}
|
||||
|
||||
# Clears loop flag variables
|
||||
clearflags(){
|
||||
moxaonline=
|
||||
pingfails=
|
||||
state=
|
||||
}
|
||||
|
||||
#------------------------------------------------------#
|
||||
# Options and Arguments Parser
|
||||
#------------------------------------------------------#
|
||||
|
||||
case $1 in
|
||||
-s | start | --start)
|
||||
start
|
||||
exit 0
|
||||
;;
|
||||
-S | stop | --stop)
|
||||
fullstop
|
||||
exit $?
|
||||
;;
|
||||
-R | --force-restart)
|
||||
fullstop
|
||||
restart
|
||||
exit 0
|
||||
;;
|
||||
-r | restart | --restart)
|
||||
conditionalrestart
|
||||
exit 0
|
||||
;;
|
||||
-p | ping | --ping)
|
||||
online moxa
|
||||
exit $?
|
||||
;;
|
||||
-P | pid | --pid)
|
||||
echo -e "$daemonpid"
|
||||
exit $?
|
||||
;;
|
||||
-d | daemon | --daemon)
|
||||
start
|
||||
;;
|
||||
-u | --usage)
|
||||
usage
|
||||
exit -1
|
||||
;;
|
||||
-h | --help)
|
||||
usage
|
||||
exit -1
|
||||
;;
|
||||
-v | --version)
|
||||
echo $VERSION
|
||||
exit 0
|
||||
;;
|
||||
-F | --fix-dns)
|
||||
purgedns
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
warn "Invalid argument $@"
|
||||
usage
|
||||
exit -1
|
||||
;;
|
||||
esac
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Process substitution to fork log output
|
||||
# Only uncomment if all script output should be logged!
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
# exec &> >(tee $logfile)
|
||||
|
||||
#------------------------------------------------------#
|
||||
# Script begins here
|
||||
#------------------------------------------------------#
|
||||
|
||||
logger boxtop
|
||||
logger boxline "${lbl}Moxa NPort Driver Loader v$VERSION${dfl}"
|
||||
logger boxbottom
|
||||
|
||||
# Unset flags
|
||||
clearflags
|
||||
|
||||
while true ; do
|
||||
state=$(online moxa)
|
||||
case $state in
|
||||
0) # State 0 = Moxa is online, and was online in previous loop. No action needed
|
||||
boxtop
|
||||
boxline "${grn}Moxa NPort Online...${dfl}"
|
||||
boxbottom
|
||||
moxaonline=true
|
||||
;;
|
||||
1) # State 1 = Moxa is offline, and was offline in previous loop. No action needed
|
||||
boxtop
|
||||
boxline "${lrd}Moxa NPort Offline${dfl}"
|
||||
boxbottom
|
||||
moxaonline=false
|
||||
failpings=$((failpings+1))
|
||||
;;
|
||||
2) # State 2 = Moxa is online, but was offline in previous loop. Service Restart required to restore functionality and update moxaonline state
|
||||
#if [[ $rst_threshold -gt $failpings ]] ; then
|
||||
logger boxtop
|
||||
logger boxline "${grn}Moxa NPort Came Online!${dfl}"
|
||||
logger boxline "... ${lyl}Restarting Services${dfl} ..."
|
||||
logger boxbottom
|
||||
moxaonline=true
|
||||
touch $pingfile
|
||||
conditionalrestart
|
||||
#fi
|
||||
;;
|
||||
3) # State 3 = Moxa is offline, but was online in previous loop. Start counting failed pings, and update moxaonline state
|
||||
logger boxtop
|
||||
logger boxline "${grn}Moxa NPort Has Gone Offline${dfl}"
|
||||
logger boxline "${lyl}Awaiting Response before Restart${dfl} ..."
|
||||
logger boxbottom
|
||||
moxaonline=false
|
||||
rm $pingfile
|
||||
failpings=1
|
||||
;;
|
||||
esac
|
||||
boxtop
|
||||
boxline "Moxa Online = $moxaonline"
|
||||
boxline "Checking again in $ratelimit seconds..."
|
||||
boxbottom
|
||||
sleep $ratelimit
|
||||
done
|
||||
#!/bin/bash
|
||||
|
||||
# Moxa NPort Driver loader and watchdog script
|
||||
|
||||
# initial vars
|
||||
scriptname=${0##*/}
|
||||
rundir=${0%/*}
|
||||
|
||||
source ${rundir}/functions
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Parameters
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
VERSION=1.0
|
||||
logfile=/var/log/bdv/moxaloader.log
|
||||
ratelimit=15
|
||||
rst_threshold=1
|
||||
god=/opt/ruby-enterprise/bin/god
|
||||
pingfile=/usr/lib/npreal2/driver/pingup
|
||||
daemonpid=$(ps -ef | grep -v grep | grep moxaloader.*daemon | awk {'print $2'})
|
||||
config_sh=$(grep DNS /.AVC-X/etc/networking/profiles/default/ifcfg-Public)
|
||||
resolv_conf=$(grep nameserver /.AVC-X/etc/networking/profiles/default/resolv.conf)
|
||||
config_dev=$(grep DNS /.AVC-X/etc/networking/devices/ifcfg-Public)
|
||||
sys_resolv_conf=$(grep nameserver /etc/resolv.conf)
|
||||
etc_net_sh=$(grep DNS /etc/network-scripts/ifcfg-Public)
|
||||
dns=$(grep DNS1 /.AVC-X/etc/networking/profiles/default/ifcfg-Public | cut -c 6-)
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Script-specific Funcitons
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
|
||||
usage(){
|
||||
boxtop
|
||||
boxline "${lyl}Moxa NPort Watchdog & Recovery v$VERSION${dfl}"
|
||||
boxseparator
|
||||
boxline "Usage:"
|
||||
boxline "$scriptname [FUNCTIONS][-d|--daemon|--usage|--version]"
|
||||
boxseparator
|
||||
boxline "-s | --start - Initializes the Moxa NPort Driver only and exits"
|
||||
boxline "-S | --stop - stops the NPort driver and any ongoing daemonized watchdog"
|
||||
boxline "-r | --restart - Restarts all BDV hardware services, and re-initialized moxa if DNS is valid"
|
||||
boxline "-R | --force-restart - forces a restart of both the NPort driver and BDV services (assume -9)"
|
||||
boxline "-p | --ping - Detect nPort online and write 'pingup' file if true or remove if false"
|
||||
boxline "-P | --pid - returns the PID's of any ongoing NPort Driver processes"
|
||||
boxline "-d | --daemon - daemonizes the service as a watchdog"
|
||||
boxline "-F | --fix-dns - Checks system's DNS config and removes entries if invalid"
|
||||
boxline "-u | --usage - Show this help text"
|
||||
boxline "-h | --help - Show this help text"
|
||||
boxline "-v | --version - returns the version of this script"
|
||||
boxbottom
|
||||
}
|
||||
|
||||
removedns(){
|
||||
# Look for existing DNS entries if there are any
|
||||
config_sh=$(grep DNS /.AVC-X/etc/networking/profiles/default/ifcfg-Public)
|
||||
resolv_conf=$(grep nameserver /.AVC-X/etc/networking/profiles/default/resolv.conf)
|
||||
resolv_search=$(grep search /.AVC-X/etc/networking/profiles/default/resolv.conf)
|
||||
config_dev=$(grep DNS /.AVC-X/etc/networking/devices/ifcfg-Public)
|
||||
sys_resolv_conf=$(grep nameserver /etc/resolv.conf)
|
||||
sys_resolv_search=$(grep search /etc/resolv.conf)
|
||||
etc_net_sh=$(grep DNS /etc/network-scripts/ifcfg-Public)
|
||||
# Checks if the above variables are empty, and if all are, exits the function only
|
||||
if [[ -z "$config_sh" && -z "$resolv_conf" && -z "$resolv_search" && -z "$config_dev" && -z "$sys_resolv_conf" && -z "$sys_resolv_search" && -z "$etc_net_sh" ]] ; then
|
||||
logger echo -e "${grn}No DNS entries found${dfl}"
|
||||
return 0
|
||||
else
|
||||
# If either of the above variables are not empty, proceeds with checking
|
||||
# and printing their contents
|
||||
if [[ ! -z "$config_sh" ]] ; then
|
||||
logger echo -e "${lbl}Current DNS is set to:${dfl}"
|
||||
logger echo -e "$config_sh"
|
||||
# sed uses regex to detect and delete lines out of the configuration script
|
||||
# files that contain DNS entries
|
||||
sudo sed -i '/DNS/d' /.AVC-X/etc/networking/profiles/default/ifcfg-Public && logger echo -e "${ylw}Successfully removed DNS entries from ifcfg-Public${dfl}\n" || logger fail "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/ifcfg-Public${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$resolv_conf" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf entry is${dfl}"
|
||||
logger echo -e "$resolv_conf"
|
||||
sudo sed -i '/nameserver/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$resolv_conf" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf is searching${dfl}"
|
||||
logger echo -e "$resolv_search"
|
||||
sudo sed -i '/search/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$config_dev" ]] ; then
|
||||
logger echo -e "${lbl}Current DNS is set to:${dfl}"
|
||||
logger echo -e "$config_dev"
|
||||
# sed uses regex to detect and delete lines out of the configuration script
|
||||
# files that contain DNS entries
|
||||
sudo sed -i '/DNS/d' /.AVC-X/etc/networking/devices/ifcfg-Public && logger echo -e "${ylw}Successfully removed DNS entries from ifcfg-Public${dfl}\n" || logger fail "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/devices/ifcfg-Public${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$sys_resolv_conf" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf entry is${dfl}"
|
||||
logger echo -e "$sys_resolv_conf"
|
||||
sudo sed -i '/nameserver/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from /etc/resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /etc/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$sys_resolv_search" ]] ; then
|
||||
logger echo -e "${lbl}Current resolv.conf is searching${dfl}"
|
||||
logger echo -e "$sys_resolv_search"
|
||||
sudo sed -i '/search/d' /.AVC-X/etc/networking/profiles/default/resolv.conf && logger echo -e "${ylw}Successfully removed DNS entries from /etc/resolv.conf${dfl}\n" || logger warn "${red}Unable to remove DNS entries from /etc/resolv.conf${dfl}"
|
||||
fi
|
||||
if [[ ! -z "$etc_net_sh" ]] ; then
|
||||
logger echo -e "${lbl}Current DNS is set to:${dfl}"
|
||||
logger echo -e "$etc_net_sh"
|
||||
# sed uses regex to detect and delete lines out of the configuration script
|
||||
# files that contain DNS entries
|
||||
sudo sed -i '/DNS/d' /etc/network-scripts/ifcfg-Public && logger echo -e "${ylw}Successfully removed DNS entries from ifcfg-Public${dfl}\n" || logger fail "${red}Unable to remove DNS entries from /.AVC-X/etc/networking/profiles/default/ifcfg-Public${dfl}"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
dnscheck(){
|
||||
# The Moxa drivers are built in such a way that they will hang if no outside
|
||||
# network is available, unless DNS entries are not present. Below checks for
|
||||
# external network access, then removes dns entries if outside network is unavailable
|
||||
|
||||
# Check if dns entries exist
|
||||
if [[ ! -z "$config_sh" || ! -z "$resolv_conf" || ! -z "$config_dev" || ! -z "$sys_resolv_conf" || ! -z "$etc_net_sh" ]] ; then
|
||||
# If DNS entries are found, check that the server can ping them
|
||||
logger echo -e "DNS Entries found, checking for internet connection"
|
||||
ping -c 1 $dns >/dev/null 2>&1
|
||||
if [[ $? != 0 ]] ; then
|
||||
# If DNS entries are found, but not responding,
|
||||
# remove DNS entries to prevent drivers from hanging on boot
|
||||
logger echo -e "${ong}DNS $dns is not responding to ping${dfl}"
|
||||
logger echo -e "Removing DNS entries from network configuration"
|
||||
return 1
|
||||
else
|
||||
# If DNS entries are found, but responding, leave the entries intact
|
||||
logger echo -e "${grn}DNS is responding, entries valid.${dfl}"
|
||||
logger echo -e "${lyl}Proceeding with initialization.${dfl}"
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
logger echo -e "DNS Entries not found, skipping DNS pingcheck"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
dnspurge(){
|
||||
# Run first dns check and removal
|
||||
removedns
|
||||
# Run network reset
|
||||
sudo /sbin/service network restart
|
||||
# Run second dns check for lingering entries
|
||||
logger echo -e "${pur}Re-checking dns entries${dfl}"
|
||||
removedns
|
||||
}
|
||||
|
||||
moxatty(){
|
||||
ls /dev/tty* | grep -c ttyr00
|
||||
}
|
||||
|
||||
# Checks moxa's online status and stores state via external 'pingtest' file
|
||||
online(){
|
||||
if [ ! -f $pingfile ] ; then
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 2
|
||||
else
|
||||
echo 1
|
||||
fi
|
||||
else
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 0
|
||||
else
|
||||
echo 3
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks moxa's online status and stores state in a variable
|
||||
pingtest(){
|
||||
if [[ $moxaonline == true ]] ; then
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 0
|
||||
else
|
||||
echo 3
|
||||
fi
|
||||
else
|
||||
if ping -c 1 -W 1 $@ &> /dev/null ; then
|
||||
echo 2
|
||||
else
|
||||
echo 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Launch the Moxa NPort loader application
|
||||
start(){
|
||||
/usr/lib/npreal2/driver/mxloadsvr
|
||||
}
|
||||
|
||||
# Force terminate any instances of the Moxa NPort application
|
||||
stop(){
|
||||
sudo pkill -9 npreal2d
|
||||
}
|
||||
|
||||
# Force stop of any daemonized instances of this script
|
||||
fullstop(){
|
||||
stop
|
||||
sudo kill -9 $daemonpid
|
||||
}
|
||||
|
||||
# Restart of multiple services is required to re-establish device control after
|
||||
# the NPort loses its connection. The order of restarting these services is
|
||||
# significant, and should be maintained.
|
||||
restart(){
|
||||
stop
|
||||
start
|
||||
god restart rs232
|
||||
sudo /sbin/service SimpleHttpDeviceServer restart_noscript
|
||||
sudo /sbin/service BDVHardwareManager restart
|
||||
god restart steris_act
|
||||
}
|
||||
|
||||
conditionalrestart(){
|
||||
if [[ $(dnscheck) == 0 ]] ; then
|
||||
stop
|
||||
start
|
||||
fi
|
||||
god restart rs232
|
||||
sudo /sbin/service SimpleHttpDeviceServer restart_noscript
|
||||
sudo /sbin/service BDVHardwareManager restart
|
||||
god restart steris_act
|
||||
}
|
||||
|
||||
# Clears loop flag variables
|
||||
clearflags(){
|
||||
moxaonline=
|
||||
pingfails=
|
||||
state=
|
||||
}
|
||||
|
||||
#------------------------------------------------------#
|
||||
# Options and Arguments Parser
|
||||
#------------------------------------------------------#
|
||||
|
||||
case $1 in
|
||||
-s | start | --start)
|
||||
start
|
||||
exit 0
|
||||
;;
|
||||
-S | stop | --stop)
|
||||
fullstop
|
||||
exit $?
|
||||
;;
|
||||
-R | --force-restart)
|
||||
fullstop
|
||||
restart
|
||||
exit 0
|
||||
;;
|
||||
-r | restart | --restart)
|
||||
conditionalrestart
|
||||
exit 0
|
||||
;;
|
||||
-p | ping | --ping)
|
||||
online moxa
|
||||
exit $?
|
||||
;;
|
||||
-P | pid | --pid)
|
||||
echo -e "$daemonpid"
|
||||
exit $?
|
||||
;;
|
||||
-d | daemon | --daemon)
|
||||
start
|
||||
;;
|
||||
-u | --usage)
|
||||
usage
|
||||
exit -1
|
||||
;;
|
||||
-h | --help)
|
||||
usage
|
||||
exit -1
|
||||
;;
|
||||
-v | --version)
|
||||
echo $VERSION
|
||||
exit 0
|
||||
;;
|
||||
-F | --fix-dns)
|
||||
purgedns
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
warn "Invalid argument $@"
|
||||
usage
|
||||
exit -1
|
||||
;;
|
||||
esac
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Process substitution to fork log output
|
||||
# Only uncomment if all script output should be logged!
|
||||
#-----------------------------------------------------------------#
|
||||
|
||||
# exec &> >(tee $logfile)
|
||||
|
||||
#------------------------------------------------------#
|
||||
# Script begins here
|
||||
#------------------------------------------------------#
|
||||
|
||||
logger boxtop
|
||||
logger boxline "${lbl}Moxa NPort Driver Loader v$VERSION${dfl}"
|
||||
logger boxbottom
|
||||
|
||||
# Unset flags
|
||||
clearflags
|
||||
|
||||
while true ; do
|
||||
state=$(online moxa)
|
||||
case $state in
|
||||
0) # State 0 = Moxa is online, and was online in previous loop. No action needed
|
||||
boxtop
|
||||
boxline "${grn}Moxa NPort Online...${dfl}"
|
||||
boxbottom
|
||||
moxaonline=true
|
||||
;;
|
||||
1) # State 1 = Moxa is offline, and was offline in previous loop. No action needed
|
||||
boxtop
|
||||
boxline "${lrd}Moxa NPort Offline${dfl}"
|
||||
boxbottom
|
||||
moxaonline=false
|
||||
failpings=$((failpings+1))
|
||||
;;
|
||||
2) # State 2 = Moxa is online, but was offline in previous loop. Service Restart required to restore functionality and update moxaonline state
|
||||
#if [[ $rst_threshold -gt $failpings ]] ; then
|
||||
logger boxtop
|
||||
logger boxline "${grn}Moxa NPort Came Online!${dfl}"
|
||||
logger boxline "... ${lyl}Restarting Services${dfl} ..."
|
||||
logger boxbottom
|
||||
moxaonline=true
|
||||
touch $pingfile
|
||||
conditionalrestart
|
||||
#fi
|
||||
;;
|
||||
3) # State 3 = Moxa is offline, but was online in previous loop. Start counting failed pings, and update moxaonline state
|
||||
logger boxtop
|
||||
logger boxline "${grn}Moxa NPort Has Gone Offline${dfl}"
|
||||
logger boxline "${lyl}Awaiting Response before Restart${dfl} ..."
|
||||
logger boxbottom
|
||||
moxaonline=false
|
||||
rm $pingfile
|
||||
failpings=1
|
||||
;;
|
||||
esac
|
||||
boxtop
|
||||
boxline "Moxa Online = $moxaonline"
|
||||
boxline "Checking again in $ratelimit seconds..."
|
||||
boxbottom
|
||||
sleep $ratelimit
|
||||
done
|
||||
|
|
|
|||
Loading…
Reference in a new issue