#!/usr/bin/env bash # exit if a command fails set -o errexit # exit if required variables are not set set -o nounset # subshells and functions inherit ERR traps set -E # check for dependencies script_commands="gpg pigz pv rclone" missing_counter=0 for needed_command in ${script_commands}; do if ! hash "${needed_command}" >/dev/null 2>&1; then printf "Command not found in PATH: %s\\n" "${needed_command}" >&2 ((missing_counter++)) fi done if ((missing_counter > 0)); then printf "Minimum %d commands are missing in PATH, aborting.\\n" "${missing_counter}" >&2 exit 1 fi # store hostname HOST_NAME="$(hostname)" # store date DATE="$(date +%Y-%m-%d)" # create temporary backup directory LOCAL_PATH="$(mktemp -d)" # remove the backup directory on exit function cleanup { rm -rf "${LOCAL_PATH}" } trap cleanup EXIT # retrieve current date YEAR="$(date +%Y)" MONTH="$(date +%m)" # set b2 bucket name prefix BUCKET_NAME_PREFIX="$(cat "${HOME}"/bin/.backup_prefix.file)" # set remote backup directory B2_REMOTE="b2:${BUCKET_NAME_PREFIX}-backups-traefik-${HOST_NAME}" DROPBOX_REMOTE="dropbox:Backups/Traefik/${HOST_NAME}/${YEAR}-${MONTH}" # set password file for gpg symmetric encryption GPG_PASSWORD_FILE="${GPG_PASSWORD_FILE:-"${HOME}/bin/.backup_password.file"}" # create traefik tarball TRAEFIK_TARBALL="${LOCAL_PATH}/${DATE}_Traefik.tar.gz.gpg" cd "${HOME}"/traefik && tar cf - . | pigz -c | gpg --batch --yes --passphrase-file "${GPG_PASSWORD_FILE}" --symmetric --cipher-algo AES256 -z 0 2>/dev/null | pv -t -r -b > "${TRAEFIK_TARBALL}" # create backup directory on dropbox rclone mkdir "${DROPBOX_REMOTE}" # copy files over to dropbox rclone copy --verbose "${TRAEFIK_TARBALL}" "${DROPBOX_REMOTE}" # create b2 bucket rclone mkdir "${B2_REMOTE}" # copy file to b2 bucket rclone copy --verbose --fast-list "${TRAEFIK_TARBALL}" "${B2_REMOTE}"