ZoopaMario
d2b325a020
Some checks failed
Lint Bash Scripts / lint-bash (push) Failing after 23s
This commit refactors the codebase in order to make the shellcheck workflow pass.
54 lines
2.2 KiB
Bash
Executable file
54 lines
2.2 KiB
Bash
Executable file
#!/bin/bash
|
|
SCRIPT_ABS_LOCATION=$(realpath "$(dirname "${0}")")
|
|
|
|
source "$SCRIPT_ABS_LOCATION/duplicati-backup.env"
|
|
source "$SCRIPT_ABS_LOCATION/../logger.sh"
|
|
|
|
SOURCE_DIR="/mnt/data/duplicati"
|
|
|
|
# Set default values for parameters
|
|
MAX_BACKUPS=7
|
|
BACKUP_FOLDER=""
|
|
|
|
# Override default values with command-line arguments
|
|
while getopts ":f:h:u:p:m:b:" opt; do
|
|
case $opt in
|
|
f) SOURCE_DIR="$OPTARG";;
|
|
h) SSH_DESTINATION="$OPTARG";;
|
|
u) SSH_USERNAME="$OPTARG";;
|
|
p) SSH_KEY="$OPTARG";;
|
|
m) MAX_BACKUPS="$OPTARG";;
|
|
b) BACKUP_FOLDER="$OPTARG";;
|
|
\?) echo "Invalid option: -$OPTARG"; exit 1;;
|
|
esac
|
|
done
|
|
|
|
# Create a temporary file for the encrypted archive
|
|
TMP_FILENAME=duplicati_db-$(date +"%Y%m%d").bak &&
|
|
TMP_FILEPATH="$SCRIPT_ABS_LOCATION" || { log "Error: Failed to create a temporary file."; exit 1; }
|
|
|
|
# Create the encrypted archive using tar and openssl
|
|
log "Compressing and excrypting the Duplicati Databases"
|
|
sudo tar -czf - "$SOURCE_DIR" | openssl enc -aes-256-cbc -pbkdf2 -pass "pass:$BACKUP_ENCR_PASSPHRASE" > "$TMP_FILEPATH/$TMP_FILENAME" || { log "Error: Failed to create encrypted archive."; exit 1; }
|
|
|
|
|
|
# Connect to the backup host and count the number of existing backups
|
|
log "Fetching number of backups in destination folder"
|
|
EXISTING_BACKUPS=$(ssh "$SSH_USERNAME@$SSH_DESTINATION" -p 23 -i "$SSH_KEY ls" | sudo wc -l) || { log "Error: Failed to count existing backups."; exit 1; }
|
|
|
|
# Remove old backups if there are too many
|
|
if (( EXISTING_BACKUPS > MAX_BACKUPS )); then
|
|
log "Removing old backups in order to save space"
|
|
ssh "$SSH_USERNAME@$SSH_DESTINATION" -p 23 -i "$SSH_KEY ls -t $BACKUP_FOLDER | tail -n +$((MAX_BACKUPS+1)) | xargs rm" || { log "Error: Failed to remove old backups."; exit 1; }
|
|
fi
|
|
|
|
# Transfer the encrypted archive to the backup host using scp
|
|
log "Transfering archive to SSH Destination"
|
|
scp -v -P 23 -i "$SSH_KEY" "$TMP_FILEPATH/$TMP_FILENAME" "$SSH_USERNAME@$SSH_DESTINATION:$BACKUP_FOLDER$TMP_FILENAME" || { log "Error: Failed to transfer the encrypted archive."; exit 1; }
|
|
|
|
# Remove the temporary file
|
|
log "Cleaning up files"
|
|
rm "$TMP_FILEPATH/$TMP_FILENAME" || { log "Error: Failed to remove the temporary file."; exit 1; }
|
|
|
|
log "Backup completed successfully."
|