Compare commits

...

8 Commits

Author SHA1 Message Date
Asif Bacchus
d9c662bb45 move sql temp dir creation and 503-copy
moved to after borg configuration checks to consoldate checks vs actions
2020-05-06 23:02:07 -06:00
Asif Bacchus
e9884a347f note err code for sql temp dir creation fail 2020-05-06 22:59:35 -06:00
Asif Bacchus
8a5a87db12 add SQL directory to cleanup 2020-05-06 22:57:41 -06:00
Asif Bacchus
0d32aaf40a change sql temp dir creation process 2020-05-06 22:56:52 -06:00
Asif Bacchus
bb952a3aba get and report mc volumes, sql backup location 2020-05-06 22:30:58 -06:00
Asif Bacchus
dccf5e17d0 source and use mailcow.conf 2020-05-06 22:30:19 -06:00
Asif Bacchus
35ce452dec fix var declaration 2020-05-06 22:30:03 -06:00
Asif Bacchus
604d3da07d add mc params, defaults and pre-req checks 2020-05-06 22:15:55 -06:00

View File

@ -71,7 +71,7 @@ badParam () {
# cleanup
cleanup () {
# cleanup 503 if copied
# cleanup 503 if copied
if [ "$err503Copied" -eq 1 ]; then
if ! rm -f "$webroot/$err503File" 2>>"$logFile"; then
printf "%s[%s] -- [WARNING] Could not remove 503 error page." \
@ -85,6 +85,16 @@ cleanup () {
"$cyan" "$(stamp)" "$norm" >> "$logFile"
fi
fi
# cleanup SQL dump directory if created
if [ "$sqlDumpDirCreated" -eq 1 ]; then
if ! rm -rf "$sqlDumpDir" 2>>"$logFile"; then
printf "%s[%s] -- [WARNING] Could not remove temporary SQL-dump directory. Sorry for the mess. --%s\n" \
"$warn" "$(stamp)" "$norm" >> "$logFile"
else
printf "%s[%s] -- [INFO] Temporary SQL-dump directory removed successfully --%s\n" \
"$cyan" "$(stamp)" "$norm" >> "$logFile"
fi
fi
}
# call cleanup and then exit with error report
@ -199,6 +209,12 @@ err503Path="$scriptPath/503_backup.html"
err503File="${err503Path##*/}"
webroot="/usr/share/nginx/html"
# mailcow/docker related
mcConfig='/opt/mailcow-dockerized/mailcow.conf'
mcDockerCompose="${mcConfig}/docker-compose.yml"
dockerStartTimeout=180
dockerStopTimeout=120
### process startup parameters
while [ $# -gt 0 ]; do
@ -217,11 +233,6 @@ while [ $# -gt 0 ]; do
badParam empty "$@"
fi
;;
-v|--verbose)
# set verbose logging from borg
borgCreateParams='--list --stats'
borgPruneParams='--list'
;;
-c|--config|--details)
# location of config details file
if [ -n "$2" ]; then
@ -235,6 +246,11 @@ while [ $# -gt 0 ]; do
badParam empty "$@"
fi
;;
-v|--verbose)
# set verbose logging from borg
borgCreateParams='--list --stats'
borgPruneParams='--list'
;;
-5|--use-503)
# enable copying 503 error page to webroot
use503=1
@ -266,6 +282,46 @@ while [ $# -gt 0 ]; do
badParam empty "$@"
fi
;;
-d|--docker-compose)
# path to mailcow docker-compose file
if [ -n "$2" ]; then
if [ -f "$2" ]; then
mcDockerCompose="${2%/}"
shift
else
badParam dne "$@"
fi
else
badParam empty "$@"
fi
;;
-m|--mailcow-config)
# path to mailcow configuration file
if [ -n "$2" ]; then
if [ -f "$2" ]; then
mcConfig="${2%/}"
shift
else
badParam dne "$@"
fi
else
badParam empty "$@"
fi
;;
-t1|--timeout-start)
if [ -z "$2" ]; then
badParam empty "$@"
else
dockerStartTimeout="$2"
fi
;;
-t2|--timeout-stop)
if [ -z "$2" ]; then
badParam empty "$@"
else
dockerStopTimeout="$2"
fi
;;
*)
printf "\n%sUnknown option: %s\n" "$err" "$1"
printf "%sUse '--help' for valid options.%s\n\n" "$cyan" "$norm"
@ -299,6 +355,23 @@ if [ "$use503" -eq 1 ]; then
badParam dne "(--webroot default)" "$webroot"
fi
fi
# verify mailcow.conf location and extract path
if [ -f "$mcConfig" ]; then
# strip filename and get path
mcPath=${mcConfig%/*/}
else
badParam dne "(--mailcow-config)" "$mcConfig"
fi
# verify docker-compose file exists
if [ ! -f "$mcDockerCompose" ]; then
badParam dne "(--docker-compose)" "$mcDockerCompose"
fi
### read mailcow.conf and set vars as needed
. "$mcConfig"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export COMPOSE_HTTP_TIMEOUT="$dockerStartTimeout"
### start logging
@ -308,24 +381,22 @@ printf "%s[%s] -- [INFO] Log located at %s%s%s --%s\n" \
"$cyan" "$(stamp)" "$yellow" "$logFile" "$cyan" "$norm" >> "$logFile"
### 503 functionality
if [ "$use503" -eq 1 ]; then
printf "%s[%s] -- [INFO] Copying 503 error page to " \
"$cyan" "$(stamp)" >> "$logFile"
printf "webroot -- %s\n" "$norm">> "$logFile"
if ! cp --force "${err503Path}" "${webroot}/${err503File}" 2>> "$logFile"
then
printf "%s[%s] -- [WARNING] Failed to copy 503 error page. " \
"$warn" "$(stamp)" >> "$logFile"
printf "Web users will NOT be notified --%s\n" "$norm" >> "$logFile"
warnCount=$((warnCount+1))
else
printf "%s[%s] -- [SUCCESS] 503 error page copied --%s\n" \
"$ok" "$(stamp)" "$norm" >> "$logFile"
# set cleanup flag
err503Copied=1
fi
fi
### 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"
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"
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"
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"
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"
### read details file to get variables needed run borg
@ -458,6 +529,37 @@ fi
export TMPDIR="${borgBaseDir}/tmp"
### set location of sql dump
if ! sqlDumpDir=$( mktemp -d 2>/dev/null ); then
exitError 115 'Unable to create temp directory for SQL dump.'
else
sqlDumpFile="backup-$( date +%Y%m%d_%H%M%S ).sql"
sqlDumpDirCreated=1
printf "%s[%s] -- [INFO] SQL dump file will be stored at: %s --%s\n" \
"$cyan" "$(stamp)" "$sqlDumpDir/$sqlDumpFile" "$norm" >> "$logFile"
fi
### 503 functionality
if [ "$use503" -eq 1 ]; then
printf "%s[%s] -- [INFO] Copying 503 error page to " \
"$cyan" "$(stamp)" >> "$logFile"
printf "webroot -- %s\n" "$norm">> "$logFile"
if ! cp --force "${err503Path}" "${webroot}/${err503File}" 2>> "$logFile"
then
printf "%s[%s] -- [WARNING] Failed to copy 503 error page. " \
"$warn" "$(stamp)" >> "$logFile"
printf "Web users will NOT be notified --%s\n" "$norm" >> "$logFile"
warnCount=$((warnCount+1))
else
printf "%s[%s] -- [SUCCESS] 503 error page copied --%s\n" \
"$ok" "$(stamp)" "$norm" >> "$logFile"
# set cleanup flag
err503Copied=1
fi
fi
### execute borg depending on whether exclusions are defined
## construct the proper borg commandline
@ -566,6 +668,7 @@ exit 0
# 2: not run as root
# 3: borg not installed
# 99: TERM signal trapped
# 115: unable to create temp dir for SQL dump
# 130: null configuration variable in details file
# 131: invalid configuration variable in details file
# 138: borg exited with a critical error