99 lines
2.0 KiB
Bash
Executable File
99 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 2024-01-29 Hyperling
|
|
# Create a backup file with a generic name for polling.
|
|
|
|
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
|
|
PROG="$(basename -- "${BASH_SOURCE[0]}")"
|
|
echo "$DIR/$PROG"
|
|
source "$DIR/../source.env"
|
|
|
|
## Variables ##
|
|
|
|
TAG="Docker"
|
|
DATE="`date "+%Y%m%d-%H%M%S"`"
|
|
BACKUP_DIR="/srv/backup"
|
|
BASENAME="Backup"
|
|
file="$BACKUP_DIR/$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
|
|
time="`which time`"
|
|
|
|
## Functions ##
|
|
|
|
function usage {
|
|
cat <<- EOF
|
|
Backup script for Hyperling's self-managed Docker setup.
|
|
|
|
Usage: $PROG [-u] [-d] [-h]
|
|
-u : Bring all containers up after the backup has finished.
|
|
-d : Bring all containers down before taking the backup.
|
|
-h : Display this help text.
|
|
|
|
Example:
|
|
$PROG -ud
|
|
EOF
|
|
|
|
exit $1
|
|
}
|
|
|
|
## Parameters ##
|
|
|
|
up=FALSE
|
|
down=FALSE
|
|
|
|
while getopts ':udh' opt; do
|
|
case "$opt" in
|
|
u) up=TRUE ;;
|
|
d) down=TRUE ;;
|
|
h) usage 0 ;;
|
|
*) echo "ERROR: Option $OPTARG not recognized." >&2
|
|
usage 1 ;;
|
|
esac
|
|
done
|
|
|
|
## Main ##
|
|
|
|
# Ensure backup directory exists with correct permissions.
|
|
mkdir -pv "$BACKUP_DIR"
|
|
mkdir -pv "$BACKUP_DIR/TRASH"
|
|
chmod -Rv 775 "$BACKUP_DIR"
|
|
chown -Rv root:root "$BACKUP_DIR"
|
|
|
|
# Remove the last backup.
|
|
echo "`date` - Removing existing files."
|
|
cd "$BACKUP_DIR"
|
|
mv -v "$BASENAME"*"$TAG"* TRASH/
|
|
rm -v TRASH/*
|
|
|
|
if [[ "$down" == "TRUE" ]]; then
|
|
echo -e "\n`date` - Take down services for a cold backup."
|
|
manage.sh -d
|
|
else
|
|
echo -e "\n`date` - Skipping take down."
|
|
fi
|
|
|
|
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
|
|
$time zip -r "$file.tmp" \
|
|
"$DOCKER_HOME" \
|
|
/etc/crontab /etc/cron.d \
|
|
/var/spool/cron /var/{log,mail} \
|
|
--exclude "$DOCKER_HOME/Volumes/IGNORED/*" \
|
|
1>/dev/null
|
|
mv -v "$file.tmp" "$file"
|
|
|
|
echo -e "\n`date` - Done with zipping, check size."
|
|
ls -sh "$file"
|
|
|
|
echo -e "\n`date` - Ensure other users can access the file."
|
|
chmod -v 755 "$file"
|
|
|
|
if [[ "$up" == "TRUE" ]]; then
|
|
echo -e "\n`date` - Bring services back up."
|
|
manage.sh -u
|
|
else
|
|
echo -e "\n`date` - Skipping restoring services."
|
|
fi
|
|
|
|
## Finish ##
|
|
|
|
echo -e "\n`date` - Done!"
|
|
exit 0
|