From 5c7064e2bdd0914591bce0e9d21815f6cb995e9e Mon Sep 17 00:00:00 2001 From: Asif Bacchus Date: Fri, 5 Feb 2021 03:11:10 -0700 Subject: [PATCH] style(RESTORE): reformat --- backup/restore.sh | 117 +++++++++++++++++++++------------------------- 1 file changed, 52 insertions(+), 65 deletions(-) diff --git a/backup/restore.sh b/backup/restore.sh index 1bb4608..1bb7c60 100644 --- a/backup/restore.sh +++ b/backup/restore.sh @@ -9,7 +9,7 @@ ####### ### text-formatting presets -if command -v tput > /dev/null; then +if command -v tput >/dev/null; then bold=$(tput bold) cyan=$(tput bold)$(tput setaf 6) err=$(tput bold)$(tput setaf 1) @@ -31,7 +31,6 @@ else yellow='' fi - ### trap trap trapExit 1 2 3 6 @@ -49,14 +48,14 @@ badDetails() { fi } -consoleError(){ +consoleError() { printf "\n%s%s\n" "$err" "$2" printf "Exiting.\n\n%s" "$norm" exit "$1" } exitError() { - printf "%s[%s] --- %s execution completed with error ---\n%s" "$err" "$(stamp)" "$scriptName" "$norm" >> "$logfile" + printf "%s[%s] --- %s execution completed with error ---\n%s" "$err" "$(stamp)" "$scriptName" "$norm" >>"$logfile" exit "$1" } @@ -96,38 +95,38 @@ textNewline() { } trapExit() { - printf "%s[%s] -- [ERROR] 99: Caught signal --%s\n" "$err" "$(stamp)" "$norm" >> "$logfile" + printf "%s[%s] -- [ERROR] 99: Caught signal --%s\n" "$err" "$(stamp)" "$norm" >>"$logfile" cleanup - printf "%s[%s] --- %s execution terminated via signal ---\n%s" "$err" "$(stamp)" "$scriptName" "$norm" >> "$logfile" + printf "%s[%s] --- %s execution terminated via signal ---\n%s" "$err" "$(stamp)" "$scriptName" "$norm" >>"$logfile" exit 99 } writeLog() { if [ "$1" = "task" ]; then - printf "%s[%s] -- [INFO] %s... " "$info" "$(stamp)" "$2" >> "$logfile" + printf "%s[%s] -- [INFO] %s... " "$info" "$(stamp)" "$2" >>"$logfile" elif [ "$1" = "done" ]; then if [ -z "$2" ]; then - printf "%sdone%s --\n%s" "$ok" "$info" "$norm" >> "$logfile" + printf "%sdone%s --\n%s" "$ok" "$info" "$norm" >>"$logfile" elif [ "$2" = "error" ]; then - printf "%sERROR%s --\n%s" "$err" "$info" "$norm" >> "$logfile" + printf "%sERROR%s --\n%s" "$err" "$info" "$norm" >>"$logfile" elif [ "$2" = "warn" ]; then - printf "%swarning%s --\n%s" "$yellow" "$info" "$norm" >> "$logfile" + printf "%swarning%s --\n%s" "$yellow" "$info" "$norm" >>"$logfile" fi elif [ "$1" = "error" ]; then - printf "%s[%s] -- [ERROR] %s: %s --\n%s" "$err" "$(stamp)" "$2" "$3" "$norm" >> "$logfile" + printf "%s[%s] -- [ERROR] %s: %s --\n%s" "$err" "$(stamp)" "$2" "$3" "$norm" >>"$logfile" elif [ "$1" = "warn" ]; then - printf "%s[%s] -- [WARNING] %s --\n%s" "$yellow" "$(stamp)" "$2" "$norm" >> "$logfile" + printf "%s[%s] -- [WARNING] %s --\n%s" "$yellow" "$(stamp)" "$2" "$norm" >>"$logfile" elif [ "$1" = "info" ]; then - printf "%s[%s] -- [INFO] %s --\n%s" "$info" "$(stamp)" "$2" "$norm" >> "$logfile" + printf "%s[%s] -- [INFO] %s --\n%s" "$info" "$(stamp)" "$2" "$norm" >>"$logfile" elif [ "$1" = "success" ]; then - printf "%s[%s] -- [SUCCESS] %s --\n%s" "$ok" "$(stamp)" "$2" "$norm" >> "$logfile" + printf "%s[%s] -- [SUCCESS] %s --\n%s" "$ok" "$(stamp)" "$2" "$norm" >>"$logfile" fi } ### parameter defaults # script related -scriptPath="$( CDPATH='' cd -- "$( dirname -- "$0" )" && pwd -P )" -scriptName="$( basename "$0" )" +scriptPath="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" +scriptName="$(basename "$0")" configDetails="$scriptPath/${scriptName%.*}.details" errorCount=0 warnCount=0 @@ -139,37 +138,34 @@ mcDockerCompose='/opt/mailcow-dockerized/docker-compose.yml' dockerStartTimeout=180 dockerStopTimeout=120 - ### check if user is root -if [ "$( id -u )" -ne 0 ]; then +if [ "$(id -u)" -ne 0 ]; then consoleError '2' "This script must be run as ROOT." fi - ### process startup parameters while [ $# -gt 0 ]; do case "$1" in - -h|-\?|--help) - # display help - scriptHelp - ;; - *) - printf "\n%Unknown option: %s\n" "$err" "$1" - printf "Use '--help' for valid options.%s\n\n" "$norm" - exit 1 - ;; + -h | -\? | --help) + # display help + scriptHelp + ;; + *) + printf "\n%Unknown option: %s\n" "$err" "$1" + printf "Use '--help' for valid options.%s\n\n" "$norm" + exit 1 + ;; esac shift done - ### pre-flight checks # docker installed? -if ! command -v docker > /dev/null; then +if ! command -v docker >/dev/null; then consoleError '3' 'docker does not seem to be installed!' fi # borg installed? -if ! command -v borg > /dev/null; then +if ! command -v borg >/dev/null; then consoleError '3' 'borgbackup does not seem to be installed!' fi # details file? @@ -185,78 +181,73 @@ if [ ! -f "$mcDockerCompose" ]; then consoleError '1' "docker-compose configuration ($mcDockerCompose) cannot be found." fi - ### read mailcow.conf and import vars # shellcheck source=./mailcow.conf.shellcheck . "$mcConfig" export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" export COMPOSE_HTTP_TIMEOUT="$dockerStartTimeout" - ### start logging # verify logfile specification is valid -if ! printf "%s" "$logfile" | grep -o / > /dev/null; then +if ! printf "%s" "$logfile" | grep -o / >/dev/null; then # no slashes -> filename provided, save in scriptdir logfile="$scriptPath/$logfile" -elif [ "$( printf "%s" "$logfile" | tail -c 1 )" = '/' ]; then +elif [ "$(printf "%s" "$logfile" | tail -c 1)" = '/' ]; then # ends in '/' --> directory provided, does it exist? if [ ! -d "$logfile" ]; then - if ! mkdir -p "$logfile" > /dev/null 2>&1; then + if ! mkdir -p "$logfile" >/dev/null 2>&1; then consoleError '1' "Unable to make specified log file directory." fi fi - logdir="$( cd "$logfile" 2> /dev/null && pwd -P )" + logdir="$(cd "$logfile" 2>/dev/null && pwd -P)" logfile="${logdir}/${scriptName%.*}.log" else # full path provided, does the parent directory exist? if [ ! -d "${logfile%/*}" ]; then # make parent path - if ! mkdir -p "${logfile%/*}" > /dev/null 2>&1; then + if ! mkdir -p "${logfile%/*}" >/dev/null 2>&1; then consoleError '1' "Unable to make specified log file path." fi fi fi # write initial log entries -if ! printf "%s[%s] --- Start %s execution ---\n%s" "$magenta" "$(stamp)" "$scriptName" "$norm" 2>/dev/null >> "$logfile"; then +if ! printf "%s[%s] --- Start %s execution ---\n%s" "$magenta" "$(stamp)" "$scriptName" "$norm" 2>/dev/null >>"$logfile"; then consoleError '1' "Unable to write to log file ($logfile)" fi writeLog 'info' "Log located at $logfile" - ### get location of docker volumes dockerVolumeMail=$(docker volume inspect -f '{{ .Mountpoint }}' ${COMPOSE_PROJECT_NAME}_vmail-vol-1) printf "%s[%s] -- [INFO] Using MAIL volume: %s --%s\n" \ - "$cyan" "$(stamp)" "$dockerVolumeMail" "$norm" >> "$logfile" + "$cyan" "$(stamp)" "$dockerVolumeMail" "$norm" >>"$logfile" dockerVolumeRspamd=$(docker volume inspect -f '{{ .Mountpoint }}' ${COMPOSE_PROJECT_NAME}_rspamd-vol-1) printf "%s[%s] -- [INFO] Using RSPAMD volume: %s --%s\n" \ - "$cyan" "$(stamp)" "$dockerVolumeRspamd" "$norm" >> "$logfile" + "$cyan" "$(stamp)" "$dockerVolumeRspamd" "$norm" >>"$logfile" dockerVolumePostfix=$(docker volume inspect -f '{{ .Mountpoint }}' ${COMPOSE_PROJECT_NAME}_postfix-vol-1) printf "%s[%s] -- [INFO] Using POSTFIX volume: %s --%s\n" \ - "$cyan" "$(stamp)" "$dockerVolumePostfix" "$norm" >> "$logfile" + "$cyan" "$(stamp)" "$dockerVolumePostfix" "$norm" >>"$logfile" dockerVolumeRedis=$(docker volume inspect -f '{{ .Mountpoint }}' ${COMPOSE_PROJECT_NAME}_redis-vol-1) printf "%s[%s] -- [INFO] Using REDIS volume: %s --%s\n" \ - "$cyan" "$(stamp)" "$dockerVolumeRedis" "$norm" >> "$logfile" + "$cyan" "$(stamp)" "$dockerVolumeRedis" "$norm" >>"$logfile" dockerVolumeCrypt=$(docker volume inspect -f '{{ .Mountpoint }}' ${COMPOSE_PROJECT_NAME}_crypt-vol-1) printf "%s[%s] -- [INFO] Using MAILCRYPT volume: %s --%s\n" \ - "$cyan" "$(stamp)" "$dockerVolumeCrypt" "$norm" >> "$logfile" - + "$cyan" "$(stamp)" "$dockerVolumeCrypt" "$norm" >>"$logfile" ### source configuration details file case "${configDetails}" in - /*) - # absolute path, no need to rewrite variable - # shellcheck source=./backup.details - . "${configDetails}" - ;; - *) - # relative path, prepend './' to create absolute path - # shellcheck source=./backup.details - . "./${configDetails}" - ;; +/*) + # absolute path, no need to rewrite variable + # shellcheck source=./backup.details + . "${configDetails}" + ;; +*) + # relative path, prepend './' to create absolute path + # shellcheck source=./backup.details + . "./${configDetails}" + ;; esac writeLog 'info' "Configuration file: ${yellow}${configDetails}${info} imported" - ### verify borg variables # verify borg base directory writeLog 'task' 'Verify details:borgBaseDir' @@ -294,7 +285,7 @@ elif [ "${borgRepoPassphrase}" = 'NONE' ]; then export BORG_PASSPHRASE='' writeLog 'done' 'warn' writeLog 'warn' 'Using a borg repo with a blank password is an insecure configuration!' - warnCount=$((warnCount+1)) + warnCount=$((warnCount + 1)) else export BORG_PASSPHRASE="${borgRepoPassphrase}" writeLog 'done' @@ -315,7 +306,6 @@ fi # export borg remote path, if specified if [ -n "${borgRemote}" ]; then export BORG_REMOTE_PATH="${borgRemote}"; fi - ### create borg temp dir ## python requires a writable temporary directory when unpacking borg and ## executing commands. This defaults to /tmp but many systems mount /tmp with @@ -331,7 +321,6 @@ if [ ! -d "${borgBaseDir}/tmp" ]; then fi export TMPDIR="${borgBaseDir}/tmp" - ### change to mailcow directory so docker commands run properly cd "$(dirname ${mcConfig})" || writeLog 'error' '100' "Could not change to mailcow directory." && exitError 100 @@ -343,21 +332,19 @@ cd "$(dirname ${mcConfig})" || writeLog 'error' '100' "Could not change to mailc #TODO: optionally reindex dovecot (parameter) #TODO: delete downloaded backup (parameter) - ### exit gracefully writeLog 'success' "All processes completed" -printf "%s[%s] --- %s execution completed ---\n%s" "$magenta" "$(stamp)" "$scriptName" "$norm" >> "$logfile" +printf "%s[%s] --- %s execution completed ---\n%s" "$magenta" "$(stamp)" "$scriptName" "$norm" >>"$logfile" # note non-terminating errors if [ "$errorCount" -gt 0 ]; then - printf "%s%s errors encountered!%s\n" "$err" "$errorCount" "$norm" >> "$logfile" + printf "%s%s errors encountered!%s\n" "$err" "$errorCount" "$norm" >>"$logfile" fi # note warnings if [ "$warnCount" -gt 0 ]; then - printf "%s%s warnings issued!%s\n" "$yellow" "$warnCount" "$norm" >> "$logfile" + printf "%s%s warnings issued!%s\n" "$yellow" "$warnCount" "$norm" >>"$logfile" fi exit 0 - ### error codes: # 1: parameter error # 2: not run as root