Compare commits

...

3 Commits

Author SHA1 Message Date
Asif Bacchus 4aae61f97e feature(BACKUP): allow non-default borg location
- parameter to specify non-default borg program location

Closes github #10
2021-03-08 00:36:32 -07:00
Asif Bacchus 5ea25529b9 feature(BACKUP): add SSH port customization
- borgSSHPort variable in details file
- read and appended to RSH connection string
- default to standard port 22

Closes github #9
2021-03-08 00:08:22 -07:00
Asif Bacchus de76918e81 feature(BACKUP): parameterize log colourization
Closes github #9
2021-03-07 23:54:32 -07:00
2 changed files with 55 additions and 9 deletions

View File

@ -18,14 +18,17 @@
# base configuration directory for borg, all borg parameters use this directory
# as their 'root'. I recommend setups with this being "/var/borgbackup", the
# default is "$HOME" or "~$USER" in that order. If you're unsure, try "$HOME"
borgBaseDir="/var/borgbackup"
borgBaseDir = "/var/borgbackup"
# SSH port on which your borg server listens. By default, this is port 22.
borgSSHPort = 22
# full path to the SSH key used to connect to your remote backup server
borgSSHKey="/var/borgbackup/private.key"
borgSSHKey = "/var/borgbackup/private.key"
# connection string to access the borg repo on your remote backup server
# this is usually in the form user@servername.tld:repoName/
borgConnectRepo="jdoe123@borg.server.net:mailcow/"
borgConnectRepo = "jdoe123@borg.server.net:mailcow/"
# password to access repo
# this was set when the repo was initialized and, while optional, is HIGHLY

View File

@ -153,6 +153,10 @@ scriptHelp() {
newline
textblock "${magenta}--- script related parameters ---${norm}"
newline
switchTextblock "-b | --borg"
textblock "FULL path to borg executable file if not in the default location."
defaultsTextblock "(/usr/bin/borg)"
newline
switchTextblock "-c | --config | --details"
textblock "Path to the configuration key/value-pair file for this script."
defaultsTextblock "(scriptPath/scriptName.details)"
@ -164,6 +168,10 @@ scriptHelp() {
textblock "Path to write log file"
defaultsTextblock "(scriptPath/scriptName.log)"
newline
switchTextblock "[SWITCH] --nc | --no-color | --no-colour"
textblock "Do NOT use ANSI colourization in the log file (in case your preferred log viewer does not support it)."
defaultsTextblock "(use ANSI colourization to make log file look good)"
newline
switchTextblock "--compression"
textblock "Compression algorithm(s) that borg should use. Please run 'borg help compression' for details."
defaultsTextblock "(not specified, use borg default of lz4)"
@ -252,11 +260,13 @@ trapExit() {
scriptPath="$( CDPATH='' cd -- "$( dirname -- "$0" )" && pwd -P )"
scriptName="$( basename "$0" )"
logFile="$scriptPath/${scriptName%.*}.log"
colourizeLogFile=1
warnCount=0
configDetails="$scriptPath/${scriptName%.*}.details"
err503Copied=0
sqlDumpDirCreated=0
exclusions=0
borgPath="/usr/bin/borg"
# borg output verbosity -- normal
borgCreateParams='--stats'
borgPruneParams='--list'
@ -291,6 +301,19 @@ while [ $# -gt 0 ]; do
badParam empty "$@"
fi
;;
--nc|--no-color|--no-colour)
# do NOT colourize log file
colourizeLogFile=0
;;
-b|--borg)
# specify non-default borg path
if [ -n "$2" ]; then
borgPath="${2%/}"
shift
else
badParam empty "$@"
fi
;;
-c|--config|--details)
# location of config details file
if [ -n "$2" ]; then
@ -412,8 +435,8 @@ if [ ! -f "$configDetails" ]; then
badParam dne "(--details default)" "$configDetails"
fi
# is borg installed?
if ! command -v borg > /dev/null; then
printf "\n%sERROR: BORG is not installed on this system!%s\n\n" "$err" "$norm"
if ! find "$borgPath" -type f -executable > /dev/null 2>&1; then
printf "\n%sERROR: BORG cannot be found in the specified or default location on this system!%s\n\n" "$err" "$norm"
exit 3
fi
# if 503 functionality is enabled, do 503 related files exist?
@ -436,6 +459,17 @@ fi
if [ -n "$borgCompression" ]; then
borgCreateParams="${borgCreateParams} --compression ${borgCompression}"
fi
# remove colourization if parameter specified
if [ "$colourizeLogFile" -eq 0 ]; then
bold=""
cyan=""
err=""
magenta=""
norm=""
ok=""
warn=""
yellow=""
fi
### read mailcow.conf and set vars as needed
# shellcheck source=./mailcow.conf.shellcheck
@ -509,7 +543,16 @@ elif [ ! -f "${borgSSHKey}" ]; then
fi
printf "%sdetails:borgSSHKey %s-- %s[OK]%s\n" \
"$magenta" "$norm" "$ok" "$norm" >> "$logFile"
export BORG_RSH="ssh -i ${borgSSHKey}"
## check SSH port
if [ -z "${borgSSHPort}" ]; then
borgSSHPort=22
printf "%sdetails:borgSSHPort %s-- %s[DEFAULT]%s\n" \
"$magenta" "$norm" "$ok" "$norm" >> "$logFile"
else
printf "%sdetails:borgSSHPort %s-- %s[CUSTOM]%s\n" \
"$magenta" "$norm" "$ok" "$norm" >> "$logFile"
fi
export BORG_RSH="ssh -i ${borgSSHKey} -p ${borgSSHPort}"
## check borg repo connect string
if [ -z "${borgConnectRepo}" ]; then
@ -690,7 +733,7 @@ printf "%s[%s] -- [INFO] Pre-backup tasks completed, calling borgbackup --%s\n"
## construct the proper borg commandline
# base command
if [ "$exclusions" -eq 0 ]; then
borgCMD="borg create --show-rc ${borgCreateParams} \
borgCMD="${borgPath} create --show-rc ${borgCreateParams} \
::$(date +%Y-%m-%d_%H%M%S) \
${mcConfig%/*} \
${sqlDumpDir} \
@ -701,7 +744,7 @@ if [ "$exclusions" -eq 0 ]; then
${dockerVolumeCrypt} \
${xtraList}"
elif [ "$exclusions" -eq 1 ]; then
borgCMD="borg create --show-rc ${borgCreateParams} \
borgCMD="${borgPath} create --show-rc ${borgCreateParams} \
--exclude-from ${borgExcludeListPath} \
::$(date +%Y-%m-%d_%H%M%S) \
${mcConfig%/*} \
@ -745,7 +788,7 @@ fi
if [ -n "${borgPruneSettings}" ]; then
printf "%s[%s] -- [INFO] Executing borg prune operation --%s\n" \
"$cyan" "$(stamp)" "$norm" >> "$logFile"
borg prune --show-rc -v ${borgPruneParams} ${borgPruneSettings} \
"${borgPath}" prune --show-rc -v ${borgPruneParams} ${borgPruneSettings} \
2>> "$logFile"
borgPruneResult="$?"
else