Added common files from osync

This commit is contained in:
deajan 2016-12-20 21:19:58 +01:00
parent 7967251206
commit 1dbd3e9a72
2 changed files with 74 additions and 133 deletions

View File

@ -3,14 +3,14 @@ SUBPROGRAM=[prgname]
PROGRAM="$SUBPROGRAM-batch" # Batch program to run osync / obackup instances sequentially and rerun failed ones PROGRAM="$SUBPROGRAM-batch" # Batch program to run osync / obackup instances sequentially and rerun failed ones
AUTHOR="(L) 2013-2016 by Orsiris de Jong" AUTHOR="(L) 2013-2016 by Orsiris de Jong"
CONTACT="http://www.netpower.fr - ozy@netpower.fr" CONTACT="http://www.netpower.fr - ozy@netpower.fr"
PROGRAM_BUILD=2016112402 PROGRAM_BUILD=2016120401
## Runs an osync /obackup instance for every conf file found ## Runs an osync /obackup instance for every conf file found
## If an instance fails, run it again if time permits ## If an instance fails, run it again if time permits
if ! type "$BASH" > /dev/null; then if ! type "$BASH" > /dev/null; then
echo "Please run this script only with bash shell. Tested on bash >= 3.2" echo "Please run this script only with bash shell. Tested on bash >= 3.2"
exit 127 exit 127
fi fi
## If maximum execution time is not reached, failed instances will be rerun. Max exec time is in seconds. Example is set to 10 hours. ## If maximum execution time is not reached, failed instances will be rerun. Max exec time is in seconds. Example is set to 10 hours.
@ -66,6 +66,7 @@ function CheckEnvironment {
SUBPROGRAM_EXECUTABLE=/usr/local/bin/$SUBPROGRAM.sh SUBPROGRAM_EXECUTABLE=/usr/local/bin/$SUBPROGRAM.sh
else else
Logger "Could not find [/usr/local/bin/$SUBPROGRAM.sh]" "CRITICAL" Logger "Could not find [/usr/local/bin/$SUBPROGRAM.sh]" "CRITICAL"
( >&2 echo "Could not find [/usr/local/bin/$SUBPROGRAM.sh]" )
exit 1 exit 1
fi fi
else else
@ -78,62 +79,49 @@ function CheckEnvironment {
} }
function Batch { function Batch {
local runs=0 # Number of batch runs local runs=1 # Number of batch runs
local runList # Actual conf file list to run local runList # Actual conf file list to run
local runAgainList # List of failed conf files sto run again local runAgainList # List of failed conf files sto run again
local confFile local confFile
local result local result
## Check for CONF_FILE_PATH local i
if [ -d "$CONF_FILE_PATH" ]; then
## Get list of .conf files
for confFile in $CONF_FILE_PATH/*.conf
do
if [ -f "$confFile" ]; then
if [ "$runList" == "" ]; then
runList="$confFile"
else
runList=$runList" $confFile"
fi
fi
done
elif [ -f "$CONF_FILE_PATH" ] && [ "${CONF_FILE_PATH##*.}" == "conf" ]; then
runList="$CONF_FILE_PATH"
fi
if [ "$runList" == "" ]; then # Using -e because find will accept directories or files
if [ ! -e "$CONF_FILE_PATH" ]; then
Logger "Cannot find conf file path [$CONF_FILE_PATH]." "CRITICAL" Logger "Cannot find conf file path [$CONF_FILE_PATH]." "CRITICAL"
Usage Usage
fi else
# Ugly hack to read files into an array while preserving special characters
runList=()
while IFS= read -d $'\0' -r file; do runList+=("$file"); done < <(find "$CONF_FILE_PATH" -maxdepth 1 -iname "*.conf" -print0)
while ([ $MAX_EXECUTION_TIME -gt $SECONDS ] || [ $MAX_EXECUTION_TIME -eq 0 ]) && [ "$runList" != "" ] && [ $MAX_RUNS -gt $runs ] while ([ $MAX_EXECUTION_TIME -gt $SECONDS ] || [ $MAX_EXECUTION_TIME -eq 0 ]) && [ "${#runList[@]}" -gt 0 ] && [ $runs -le $MAX_RUNS ]; do
do runAgainList=()
Logger "$SUBPROGRAM instances will be run for: $runList" "NOTICE" Logger "Sequential run n°$runs of $SUBPROGRAM instances for:" "NOTICE"
for confFile in $runList for confFile in "${runList[@]}"; do
do Logger "$(basename $confFile)" "NOTICE"
$SUBPROGRAM_EXECUTABLE "$confFile" --silent $opts & done
wait $! for confFile in "${runList[@]}"; do
result=$? $SUBPROGRAM_EXECUTABLE "$confFile" --silent $opts &
if [ $result != 0 ]; then wait $!
if [ $result == 1 ] || [ $result == 128 ]; then # Do not handle exit code 127 because it is already handled here result=$?
Logger "Run instance $(basename $confFile) failed with exit code [$result]." "ERROR" if [ $result != 0 ]; then
if [ "$runAgainList" == "" ]; then if [ $result == 1 ] || [ $result == 128 ]; then # Do not handle exit code 128 because it is already handled here
runAgainList="$confFile" Logger "Instance $(basename $confFile) failed with exit code [$result]." "ERROR"
else runAgainList+=("$confFile")
runAgainList=$runAgainList" $confFile" elif [ $result == 2 ]; then
Logger "Instance $(basename $confFile) finished with warnings." "WARN"
fi fi
elif [ $result == 2 ]; then else
Logger "Run instance $(basename $confFile) finished with warnings." "WARN" Logger "Instance $(basename $confFile) succeed." "NOTICE"
fi fi
else done
Logger "Run instance $(basename $confFile) succeed." "NOTICE" runList=("${runAgainList[@]}")
fi runs=$(($runs + 1))
done done
runList="$runAgainList" fi
runAgainList=""
runs=$(($runs + 1))
done
} }
function Usage { function Usage {
@ -174,7 +162,7 @@ do
Usage Usage
;; ;;
*) *)
opts="$i " opts="$opts$i "
;; ;;
esac esac
done done

View File

@ -1,17 +1,17 @@
#!/usr/bin/env bash #!/usr/bin/env bash
include #### _OFUNCTIONS_BOOTSTRAP SUBSET ####
PROGRAM=[prgname] PROGRAM=[prgname]
PROGRAM_VERSION=[version] PROGRAM_VERSION=[version]
PROGRAM_BINARY=$PROGRAM".sh" PROGRAM_BINARY=$PROGRAM".sh"
PROGRAM_BATCH=$PROGRAM"-batch.sh" PROGRAM_BATCH=$PROGRAM"-batch.sh"
SCRIPT_BUILD=2016112401 SCRIPT_BUILD=2016121301
## osync / obackup / pmocr / zsnap install script ## osync / obackup / pmocr / zsnap install script
## Tested on RHEL / CentOS 6 & 7, Fedora 23, Debian 7 & 8, Mint 17 and FreeBSD 8 & 10 ## Tested on RHEL / CentOS 6 & 7, Fedora 23, Debian 7 & 8, Mint 17 and FreeBSD 8, 10 and 11
## Please adapt this to fit your distro needs ## Please adapt this to fit your distro needs
#TODO: silent mode and no stats mode
# Get current install.sh path from http://stackoverflow.com/a/246128/2635443 # Get current install.sh path from http://stackoverflow.com/a/246128/2635443
SCRIPT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -35,80 +35,27 @@ PMOCR_SERVICE_FILE_SYSTEMD_SYSTEM="pmocr-srv@.service"
## Default log file ## Default log file
if [ -w $FAKEROOT/var/log ]; then if [ -w $FAKEROOT/var/log ]; then
LOG_FILE="$FAKEROOT/var/log/$PROGRAM-install.log" LOG_FILE="$FAKEROOT/var/log/$PROGRAM-install.log"
elif ([ "$HOME" != "" ] && [ -w "$HOME" ]); then elif ([ "$HOME" != "" ] && [ -w "$HOME" ]); then
LOG_FILE="$HOME/$PROGRAM-install.log" LOG_FILE="$HOME/$PROGRAM-install.log"
else else
LOG_FILE="./$PROGRAM-install.log" LOG_FILE="./$PROGRAM-install.log"
fi fi
# Generic quick logging function include #### QuickLogger SUBSET ####
function _QuickLogger { include #### UrlEncode SUBSET ####
local value="${1}" include #### GetLocalOS SUBSET ####
local destination="${2}" # Destination: stdout, log, both function SetLocalOSSettings {
if ([ "$destination" == "log" ] || [ "$destination" == "both" ]); then
echo -e "$(date) - $value" >> "$LOG_FILE"
elif ([ "$destination" == "stdout" ] || [ "$destination" == "both" ]); then
echo -e "$value"
fi
}
function QuickLogger {
local value="${1}"
if [ "$_SILENT" -eq 1 ]; then
_QuickLogger "$value" "log"
else
_QuickLogger "$value" "stdout"
fi
}
function urlencode() {
# urlencode <string>
local LANG=C
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
}
function SetOSSettings {
local localOsVar
USER=root USER=root
# There's no good way to tell if currently running in BusyBox shell. Using sluggish way. case $LOCAL_OS in
if ls --help 2>&1 | grep -i "BusyBox" > /dev/null; then
localOsVar="BusyBox"
else
# Detecting the special ubuntu userland in Windows 10 bash
if grep -i Microsoft /proc/sys/kernel/osrelease > /dev/null 2>&1; then
localOsVar="Microsoft"
else
localOsVar="$(uname -spio 2>&1)"
if [ $? != 0 ]; then
localOsVar="$(uname -v 2>&1)"
if [ $? != 0 ]; then
localOsVar="$(uname)"
fi
fi
fi
fi
case $localOsVar in
*"BSD"*) *"BSD"*)
GROUP=wheel GROUP=wheel
;; ;;
*"Darwin"*) *"MacOSX"*)
GROUP=admin GROUP=admin
;; ;;
*"MINGW"*|*"CYGWIN"*) *"msys"*|*"Cygwin"*)
USER="" USER=""
GROUP="" GROUP=""
;; ;;
@ -117,12 +64,17 @@ function SetOSSettings {
;; ;;
esac esac
if ([ "$USER" != "" ] && [ "$(whoami)" != "$USER" ] && [ "$FAKEROOT" == "" ]); then if [ "$LOCAL_OS" == "Android" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "BusyBox" ]; then
QuickLogger "Must be run as $USER." QuickLogger "Cannot be installed on [$LOCAL_OS]. Please use $PROGRAM.sh directly."
exit 1 exit 1
fi fi
OS=$(urlencode "$localOsVar") if ([ "$USER" != "" ] && [ "$(whoami)" != "$USER" ] && [ "$FAKEROOT" == "" ]); then
QuickLogger "Must be run as $USER."
exit 1
fi
OS=$(UrlEncode "$localOsVar")
} }
function GetInit { function GetInit {
@ -262,22 +214,22 @@ function CopyServiceFiles {
} }
function Statistics { function Statistics {
if type wget > /dev/null; then if type wget > /dev/null; then
wget -qO- "$STATS_LINK" > /dev/null 2>&1 wget -qO- "$STATS_LINK" > /dev/null 2>&1
if [ $? == 0 ]; then if [ $? == 0 ]; then
return 0 return 0
fi fi
fi fi
if type curl > /dev/null; then if type curl > /dev/null; then
curl "$STATS_LINK" -o /dev/null > /dev/null 2>&1 curl "$STATS_LINK" -o /dev/null > /dev/null 2>&1
if [ $? == 0 ]; then if [ $? == 0 ]; then
return 0 return 0
fi fi
fi fi
QuickLogger "Neiter wget nor curl could be used for. Cannot run statistics. Use the provided link please." QuickLogger "Neiter wget nor curl could be used for. Cannot run statistics. Use the provided link please."
return 1 return 1
} }
function Usage { function Usage {
@ -288,13 +240,13 @@ function Usage {
exit 127 exit 127
} }
_SILENT=0 _LOGGER_SILENT=false
_STATS=1 _STATS=1
for i in "$@" for i in "$@"
do do
case $i in case $i in
--silent) --silent)
_SILENT=1 _LOGGER_SILENT=true
;; ;;
--no-stats) --no-stats)
_STATS=0 _STATS=0
@ -308,7 +260,8 @@ if [ "$FAKEROOT" != "" ]; then
mkdir -p "$SERVICE_DIR_SYSTEMD_SYSTEM" "$SERVICE_DIR_SYSTEMD_USER" "$BIN_DIR" mkdir -p "$SERVICE_DIR_SYSTEMD_SYSTEM" "$SERVICE_DIR_SYSTEMD_USER" "$BIN_DIR"
fi fi
SetOSSettings GetLocalOS
SetLocalOSSettings
CreateConfDir CreateConfDir
CopyExampleFiles CopyExampleFiles
CopyProgram CopyProgram
@ -319,7 +272,7 @@ STATS_LINK="http://instcount.netpower.fr?program=$PROGRAM&version=$PROGRAM_VERSI
QuickLogger "$PROGRAM installed. Use with $BIN_DIR/$PROGRAM" QuickLogger "$PROGRAM installed. Use with $BIN_DIR/$PROGRAM"
if [ $_STATS -eq 1 ]; then if [ $_STATS -eq 1 ]; then
if [ $_SILENT -eq 1 ]; then if [ $_LOGGER_SILENT == true ]; then
Statistics Statistics
else else
QuickLogger "In order to make install statistics, the script would like to connect to $STATS_LINK" QuickLogger "In order to make install statistics, the script would like to connect to $STATS_LINK"