style(script): reformat and fix typos

- reformat spacing, indentation
- fix spelling mistakes
- change textblock functions to camelCase
- add shellcheck exceptions
This commit is contained in:
Asif Bacchus 2021-05-15 10:09:15 -06:00
parent a4221ae6e4
commit 276de6d890

View File

@ -4,10 +4,9 @@
### Backup exported email from piler (bare-metal) ### Backup exported email from piler (bare-metal)
####### #######
### set environment variables ### set environment variables
if [ -z "$TERM" ]; then if [ -z "$TERM" ]; then
export TERM=dumb; export TERM=dumb
fi fi
export PATH=$PATH:/usr/local/bin export PATH=$PATH:/usr/local/bin
@ -34,11 +33,9 @@ else
yellow="" yellow=""
fi fi
### trap ### trap
trap trapExit 1 2 3 6 trap trapExit 1 2 3 6
### functions ### functions
# bad configuration value passed in details file # bad configuration value passed in details file
@ -76,6 +73,7 @@ cleanup () {
# cleanup 503 if copied # cleanup 503 if copied
if [ "$err503Copied" -eq 1 ]; then if [ "$err503Copied" -eq 1 ]; then
if ! rm -f "$webroot/$err503File" 2>>"$logFile"; then if ! rm -f "$webroot/$err503File" 2>>"$logFile"; then
# shellcheck disable=SC2129
printf "%s[%s] -- [WARNING] Could not remove 503 error page." \ printf "%s[%s] -- [WARNING] Could not remove 503 error page." \
"$warn" "$(stamp)" >>"$logFile" "$warn" "$(stamp)" >>"$logFile"
printf " Web interface will not function until this file is " \ printf " Web interface will not function until this file is " \
@ -89,6 +87,7 @@ cleanup () {
fi fi
# remove EML temporary directory # remove EML temporary directory
if ! rm -rf "$exportDir" 2>>"$logFile"; then if ! rm -rf "$exportDir" 2>>"$logFile"; then
# shellcheck disable=SC2129
printf "%s[%s] -- [WARNING] Could not remove EML export tmp dir:" \ printf "%s[%s] -- [WARNING] Could not remove EML export tmp dir:" \
"$warn" "$(stamp)" >>"$logFile" "$warn" "$(stamp)" >>"$logFile"
printf "\n%s\n" "$exportDir" >>"$logFile" printf "\n%s\n" "$exportDir" >>"$logFile"
@ -116,56 +115,56 @@ exitError () {
scriptHelp() { scriptHelp() {
newline newline
printf "%sUsage: %s [parameters]%s\n\n" "$bold" "$scriptName" "$norm" printf "%sUsage: %s [parameters]%s\n\n" "$bold" "$scriptName" "$norm"
textblock "There are no mandatory parameters. If a parameter is not supplied, its default value will be used. In the case of a switch parameter, it will remain DEactivated by default." textBlock "There are no mandatory parameters. If a parameter is not supplied, its default value will be used. In the case of a switch parameter, it will remain DEACTIVATED by default."
newline newline
textblock "Parameters are listed then followed by a description of their effect on the following line. Finally, if a default value exists, it will be listed on the next line in (parentheses)." textBlock "Parameters are listed then followed by a description of their effect on the following line. Finally, if a default value exists, it will be listed on the next line in (parentheses)."
newline newline
textblock "${magenta}--- script related ---${norm}" textBlock "${magenta}--- script related ---${norm}"
newline newline
switchTextblock "-c | --config | --details" textBlockSwitch "-c | --config | --details"
textblock "Path to the configuration key/value pair file for this script." textBlock "Path to the configuration key/value pair file for this script."
defaultsTextblock "(scriptPath/scriptName.details)" textBlockDefaults "(scriptPath/scriptName.details)"
newline newline
switchTextblock "-h | -? | --help" textBlockSwitch "-h | -? | --help"
textblock "This help screen." textBlock "This help screen."
newline newline
switchTextblock "-l | --log" textBlockSwitch "-l | --log"
textblock "Path to write log file." textBlock "Path to write log file."
defaultsTextblock "(scriptPath/scriptName.log)" textBlockDefaults "(scriptPath/scriptName.log)"
newline newline
switchTextblock "[SWITCH] -v | --verbose" textBlockSwitch "[SWITCH] -v | --verbose"
textblock "Log borg output with increased verbosity (list all files). Careful! Your log file can get very large very quickly!" textBlock "Log borg output with increased verbosity (list all files). Careful! Your log file can get very large very quickly!"
defaultsTextblock "(normal output, option is OFF)" textBlockDefaults "(normal output, option is OFF)"
newline newline
textblock "${magenta}--- export options ---${norm}" textBlock "${magenta}--- export options ---${norm}"
newline newline
switchTextblock "[SWITCH] -a | --all" textBlockSwitch "[SWITCH] -a | --all"
textblock "Export ALL email saved by piler. This is generally only useful for an initial backup. Setting this switch will override any specified start/end dates." textBlock "Export ALL email saved by piler. This is generally only useful for an initial backup. Setting this switch will override any specified start/end dates."
defaultsTextblock "(use start/end dates, option is OFF)" textBlockDefaults "(use start/end dates, option is OFF)"
newline newline
switchTextblock "--start" textBlockSwitch "--start"
textblock "Export email starting from this date (inclusive). Date MUST be provided in YYYY.MM.DD format." textBlock "Export email starting from this date (inclusive). Date MUST be provided in YYYY.MM.DD format."
defaultsTextblock "(yesterday's date)" textBlockDefaults "(yesterday's date)"
newline newline
switchTextblock "--end" textBlockSwitch "--end"
textblock "Export email ending at this date (inclusive). Date MUST be provided in YYYY.MM.DD format." textBlock "Export email ending at this date (inclusive). Date MUST be provided in YYYY.MM.DD format."
defaultsTextblock "(yesterday's date)" textBlockDefaults "(yesterday's date)"
newline newline
textblock "${magenta}--- 503 functionality ---${norm}" textBlock "${magenta}--- 503 functionality ---${norm}"
newline newline
switchTextblock "[SWITCH] -5 | --use-503" textBlockSwitch "[SWITCH] -5 | --use-503"
textblock "Copy an 'error 503' page/indicator file to your webroot for your webserver to find. Specifying this option will enable other 503 options." textBlock "Copy an 'error 503' page/indicator file to your webroot for your webserver to find. Specifying this option will enable other 503 options."
defaultsTextblock "(do NOT copy, option is OFF)" textBlockDefaults "(do NOT copy, option is OFF)"
newline newline
switchTextblock "--503-path" textBlockSwitch "--503-path"
textblock "Path to the file you want copied to your webroot as the 'error 503' page." textBlock "Path to the file you want copied to your webroot as the 'error 503' page."
defaultsTextblock "(scriptPath/503_backup.html)" textBlockDefaults "(scriptPath/503_backup.html)"
newline newline
switchTextblock "-w | --webroot" textBlockSwitch "-w | --webroot"
textblock "Path to where the 'error 503' file should be copied." textBlock "Path to where the 'error 503' file should be copied."
defaultsTextblock "(/usr/share/nginx/html/)" textBlockDefaults "(/usr/share/nginx/html/)"
newline newline
textblock "More details and examples of script usage can be found in the repo wiki at ${yellow}https://git.asifbacchus.app/asif/pilerBackup/wiki${norm}" textBlock "More details and examples of script usage can be found in the repo wiki at ${yellow}https://git.asifbacchus.app/asif/pilerBackup/wiki${norm}"
newline newline
} }
@ -174,15 +173,15 @@ stamp () {
(date +%F" "%T) (date +%F" "%T)
} }
textblock() { textBlock() {
printf "%s\n" "$1" | fold -w "$width" -s printf "%s\n" "$1" | fold -w "$width" -s
} }
defaultsTextblock() { textBlockDefaults() {
printf "%s%s%s\n" "$yellow" "$1" "$norm" printf "%s%s%s\n" "$yellow" "$1" "$norm"
} }
switchTextblock() { textBlockSwitch() {
printf "%s%s%s\n" "$cyan" "$1" "$norm" printf "%s%s%s\n" "$cyan" "$1" "$norm"
} }
@ -203,7 +202,6 @@ trapExit () {
### end of functions ### end of functions
### default variable values ### default variable values
## script related ## script related
@ -233,7 +231,6 @@ exportStart=$( date -d 'yesterday' +'%Y.%m.%d' )
exportEnd=$(date -d 'yesterday' +'%Y.%m.%d') exportEnd=$(date -d 'yesterday' +'%Y.%m.%d')
pilerUser='piler' pilerUser='piler'
### process startup parameters ### process startup parameters
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
@ -344,10 +341,9 @@ while [ $# -gt 0 ]; do
shift shift
done done
### check pre-requisites and default values ### check pre-requisites and default values
# check if running as root, otherwise exit # check if running as root, otherwise exit
if [ $( id -u ) -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
printf "\n%sERROR: script MUST be run as ROOT%s\n\n" "$err" "$norm" printf "\n%sERROR: script MUST be run as ROOT%s\n\n" "$err" "$norm"
exit 2 exit 2
fi fi
@ -375,21 +371,18 @@ if [ "$use503" -eq 1 ]; then
fi fi
fi fi
### start logging ### start logging
printf "%s[%s] --- Start %s execution ---%s\n" \ printf "%s[%s] --- Start %s execution ---%s\n" \
"$magenta" "$(stamp)" "$scriptName" "$norm" >>"$logFile" "$magenta" "$(stamp)" "$scriptName" "$norm" >>"$logFile"
printf "%s[%s] -- [INFO] Log located at %s%s%s --%s\n" \ printf "%s[%s] -- [INFO] Log located at %s%s%s --%s\n" \
"$cyan" "$(stamp)" "$yellow" "$logFile" "$cyan" "$norm" >>"$logFile" "$cyan" "$(stamp)" "$yellow" "$logFile" "$cyan" "$norm" >>"$logFile"
### 503 functionality ### 503 functionality
if [ "$use503" -eq 1 ]; then if [ "$use503" -eq 1 ]; then
printf "%s[%s] -- [INFO] Copying 503 error page to " \ printf "%s[%s] -- [INFO] Copying 503 error page to " \
"$cyan" "$(stamp)" >>"$logFile" "$cyan" "$(stamp)" >>"$logFile"
printf "webroot -- %s\n" "$norm" >>"$logFile" printf "webroot -- %s\n" "$norm" >>"$logFile"
if ! \cp --force "${err503Path}" "${webroot}/${err503File}" 2>> "$logFile" if ! \cp --force "${err503Path}" "${webroot}/${err503File}" 2>>"$logFile"; then
then
printf "%s[%s] -- [WARNING] Failed to copy 503 error page. " \ printf "%s[%s] -- [WARNING] Failed to copy 503 error page. " \
"$warn" "$(stamp)" >>"$logFile" "$warn" "$(stamp)" >>"$logFile"
printf "Web users will NOT be notified --%s\n" "$norm" >>"$logFile" printf "Web users will NOT be notified --%s\n" "$norm" >>"$logFile"
@ -402,23 +395,23 @@ if [ "$use503" -eq 1 ]; then
fi fi
fi fi
### read details file to get variables needed to dump sql and run borg ### read details file to get variables needed to dump sql and run borg
# check if config details file was provided as a relative or absolute path # check if config details file was provided as a relative or absolute path
case "${configDetails}" in case "${configDetails}" in
/*) /*)
# absolute path, no need to rewrite variable # absolute path, no need to rewrite variable
# shellcheck source=pilerbackup.details
. "${configDetails}" . "${configDetails}"
;; ;;
*) *)
# relative path, prepend './' to create absolute path # relative path, prepend './' to create absolute path
# shellcheck source=pilerbackup.details
. "./${configDetails}" . "./${configDetails}"
;; ;;
esac esac
printf "%s[%s] -- [INFO] %s%s%s imported --%s\n" \ printf "%s[%s] -- [INFO] %s%s%s imported --%s\n" \
"$cyan" "$(stamp)" "$yellow" "$configDetails" "$cyan" "$norm" >>"$logFile" "$cyan" "$(stamp)" "$yellow" "$configDetails" "$cyan" "$norm" >>"$logFile"
## create tmp directory and change to it for export operations ## create tmp directory and change to it for export operations
# create temporary directory to dump exported email from piler # create temporary directory to dump exported email from piler
tmpdir="/tmp/emailbackup/$(date +%F_%T)" tmpdir="/tmp/emailbackup/$(date +%F_%T)"
@ -426,12 +419,15 @@ if ! exportDir=$( mkdir -p "${tmpdir}" 2>>"$logFile" ); then
exitError 111 "Could not create temporary directory for exported EML files" exitError 111 "Could not create temporary directory for exported EML files"
fi fi
# grant pilerUser permission to write to temporary directory # grant pilerUser permission to write to temporary directory
if ! (chown root:${pilerUser} "$exportDir" && chmod 770 "$exportDir"); then if # shellcheck disable=SC2086
! (chown root:${pilerUser} "$exportDir" && chmod 770 "$exportDir")
then
exitError 112 "Could not set permissions on temporary directory" exitError 112 "Could not set permissions on temporary directory"
fi fi
if ! cd "$exportDir"; then if ! cd "$exportDir"; then
exitError 113 "Unable to change to temporary export directory" exitError 113 "Unable to change to temporary export directory"
fi fi
# shellcheck disable=SC2129
printf "%s[%s] -- [INFO] EML files will be temporarily stored in:" \ printf "%s[%s] -- [INFO] EML files will be temporarily stored in:" \
"$cyan" "$(stamp)" >>"$logFile" "$cyan" "$(stamp)" >>"$logFile"
printf "\n\t%s%s/%s --%s\n" "$yellow" "$exportDir" "$cyan" "$norm" >>"$logFile" printf "\n\t%s%s/%s --%s\n" "$yellow" "$exportDir" "$cyan" "$norm" >>"$logFile"
@ -453,12 +449,10 @@ else
"$ok" "$(stamp)" "$norm" >>"$logFile" "$ok" "$(stamp)" "$norm" >>"$logFile"
fi fi
### pre-backup tasks completed -- move to borg tasks ### pre-backup tasks completed -- move to borg tasks
printf "%s[%s] -- [SUCCESS] Pre-backup tasks completed --%s\n" \ printf "%s[%s] -- [SUCCESS] Pre-backup tasks completed --%s\n" \
"$ok" "$(stamp)" "$norm" >>"$logFile" "$ok" "$(stamp)" "$norm" >>"$logFile"
### Run borg variable checks ### Run borg variable checks
printf "%s[%s] -- [INFO] Verifying supplied borg details --%s\n" \ printf "%s[%s] -- [INFO] Verifying supplied borg details --%s\n" \
"$cyan" "$(stamp)" "$norm" >>"$logFile" "$cyan" "$(stamp)" "$norm" >>"$logFile"
@ -543,7 +537,7 @@ printf "%sdetails:borgXtraListPath%s -- %s[OK]%s\n" \
includeXtra=1 includeXtra=1
fi fi
## check if exlusion list file is specified ## check if exclusion list file is specified
if [ -n "${borgExcludeListPath}" ]; then if [ -n "${borgExcludeListPath}" ]; then
# check if the file actually exists # check if the file actually exists
if [ ! -f "${borgExcludeListPath}" ]; then if [ ! -f "${borgExcludeListPath}" ]; then
@ -552,7 +546,6 @@ if [ -n "${borgExcludeListPath}" ]; then
exclusions=1 exclusions=1
fi fi
### create borg temp dir: ### create borg temp dir:
## python requires a writable temporary directory when unpacking borg and ## python requires a writable temporary directory when unpacking borg and
## executing commands. This defaults to /tmp but many systems mount /tmp with ## executing commands. This defaults to /tmp but many systems mount /tmp with
@ -571,7 +564,6 @@ if [ ! -d "${borgBaseDir}/tmp" ]; then
fi fi
export TMPDIR="${borgBaseDir}/tmp" export TMPDIR="${borgBaseDir}/tmp"
### execute borg depending on whether extra files and/or exclusions are defined ### execute borg depending on whether extra files and/or exclusions are defined
## construct the proper borg commandline ## construct the proper borg commandline
@ -618,11 +610,11 @@ else
warnCount=$((warnCount + 1)) warnCount=$((warnCount + 1))
fi fi
### execute borg prune if parameters are provided, otherwise skip with a warning
### execute borg prune if paramters are provided, otherwise skip with a warning
if [ -n "${borgPruneSettings}" ]; then if [ -n "${borgPruneSettings}" ]; then
printf "%s[%s] -- [INFO] Executing borg prune operation --%s\n" \ printf "%s[%s] -- [INFO] Executing borg prune operation --%s\n" \
"$cyan" "$(stamp)" "$norm" >>"$logFile" "$cyan" "$(stamp)" "$norm" >>"$logFile"
# shellcheck disable=SC2086
borg prune --show-rc -v ${borgPruneParams} ${borgPruneSettings} \ borg prune --show-rc -v ${borgPruneParams} ${borgPruneSettings} \
2>>"$logFile" 2>>"$logFile"
borgPruneResult="$?" borgPruneResult="$?"
@ -657,7 +649,6 @@ if [ -n "${borgPruneResult}" ]; then
fi fi
fi fi
### all processes successfully completed, cleanup and exit gracefully ### all processes successfully completed, cleanup and exit gracefully
# note successful completion of borg commands # note successful completion of borg commands
@ -679,8 +670,6 @@ else
fi fi
exit 0 exit 0
### error codes ### error codes
# 1: parameter error # 1: parameter error
# 2: not run as root # 2: not run as root