Fix an error in borgwrapper where borgwrapper files might be created without suffixed repo name
This commit is contained in:
parent
cb86176e9f
commit
511594db57
1 changed files with 63 additions and 58 deletions
|
@ -41,11 +41,13 @@ The following are optional or have reasonable defaults:
|
|||
- BORGWRAPPER_BACKUP_NOTIFY_VIA_MAIL=false // send email (BORGWRAPPER_BACKUP_LOG has to be set to true)? false|true
|
||||
- BORGWRAPPER_BACKUP_NOTIFY_MAIL_ADDRESS="" // mail.rc has to be configured
|
||||
- BORGWRAPPER_BACKUP_NOTIFY_UI=false // use notify-send for UI notification? false|true
|
||||
- BORGWRAPPER_BACKUP_COMPRESSION="lz4" // compress repository
|
||||
- BORGWRAPPER_BACKUP_ENCRYPTION="none" // encrypt repository
|
||||
|
||||
Borg specific values can also be overwritten and have reasonable defaults:
|
||||
- BORGWRAPPER_BORG_BINARY=borg; // defaults to /usr/bin/borg (determined by 'which borg'), adjust to a virtualenv if needed
|
||||
- BORGWRAPPER_BORG_INIT_PARAMS="--encryption=none"; // encryption=none|repokey-blake2|...
|
||||
- BORGWRAPPER_BORG_CREATE_PARAMS="-v -s -p -C lz4";
|
||||
- BORGWRAPPER_BORG_INIT_PARAMS="--encryption=BORGWRAPPER_BACKUP_ENCRYPTION"; // encryption=none|repokey-blake2|...
|
||||
- BORGWRAPPER_BORG_CREATE_PARAMS="-v -s -p -C BORGWRAPPER_BACKUP_COMPRESSION";
|
||||
- BORGWRAPPER_BORG_CHECK_PARAMS="-v";
|
||||
- BORGWRAPPER_BORG_PRUNE_PARAMS="-v -s -d BORGWRAPPER_BACKUP_KEEP_IN_DAYS";
|
||||
|
||||
|
@ -63,123 +65,126 @@ EOF
|
|||
|
||||
set -e;
|
||||
|
||||
# vars and defaults
|
||||
BORGWRAPPER_BACKUP_PASSWORD=''
|
||||
BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT=$(date "+%s")
|
||||
BORGWRAPPER_BACKUP_PRUNE=true
|
||||
BORGWRAPPER_BACKUP_KEEP_IN_DAYS=60
|
||||
BORGWRAPPER_BACKUP_CHECK=true
|
||||
BORGWRAPPER_BACKUP_CHECK_MAX_AGE_IN_SECONDS=604800
|
||||
BORGWRAPPER_BACKUP_CHECK_FILE="$HOME/.borg-backup-$BORGWRAPPER_BACKUP_NAME.check"
|
||||
BORGWRAPPER_BACKUP_LOG=true
|
||||
BORGWRAPPER_BACKUP_LOG_PRUNE=true
|
||||
BORGWRAPPER_BACKUP_LOG_FILE="$HOME/.borg-backup-$BORGWRAPPER_BACKUP_NAME.log"
|
||||
BORGWRAPPER_BACKUP_NOTIFY_VIA_MAIL=false
|
||||
BORGWRAPPER_BACKUP_NOTIFY_MAIL_ADDRESS=""
|
||||
BORGWRAPPER_BACKUP_NOTIFY_UI=false
|
||||
|
||||
BORGWRAPPER_BORG_BINARY=$(which borg);
|
||||
BORGWRAPPER_BORG_INIT_PARAMS="--encryption=none";
|
||||
BORGWRAPPER_BORG_CREATE_PARAMS="-v -s -p -C lz4";
|
||||
BORGWRAPPER_BORG_CHECK_PARAMS="-v";
|
||||
BORGWRAPPER_BORG_PRUNE_PARAMS="-v -s -d $BORGWRAPPER_BACKUP_KEEP_IN_DAYS";
|
||||
|
||||
# check for config file
|
||||
# helper functions
|
||||
source_config() {
|
||||
local config=$1;
|
||||
local configFallback=$2;
|
||||
|
||||
if [[ ! -f "$config" ]]; then
|
||||
if [[ ! -f "$configFallback" ]]; then
|
||||
echo "No config file specified and could not find default in '$configFallback'!";
|
||||
echo "No config file specified and could not find default in '${configFallback}'!";
|
||||
echo "";
|
||||
usage;
|
||||
exit 1;
|
||||
else
|
||||
config=$configFallback;
|
||||
config=${configFallback};
|
||||
fi
|
||||
fi
|
||||
|
||||
set -a;
|
||||
source "$config";
|
||||
source "${config}";
|
||||
set +a;
|
||||
}
|
||||
source_config "$1" "$HOME/.borgwrapper.conf"
|
||||
apply_defaults() {
|
||||
[ -z ${BORGWRAPPER_BACKUP_PASSWORD} ] && BORGWRAPPER_BACKUP_PASSWORD='';
|
||||
[ -z ${BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT} ] && BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT=$(date "+%s");
|
||||
[ -z ${BORGWRAPPER_BACKUP_PRUNE} ] && BORGWRAPPER_BACKUP_PRUNE=true;
|
||||
[ -z ${BORGWRAPPER_BACKUP_KEEP_IN_DAYS} ] && BORGWRAPPER_BACKUP_KEEP_IN_DAYS=60;
|
||||
[ -z ${BORGWRAPPER_BACKUP_CHECK} ] && BORGWRAPPER_BACKUP_CHECK=true;
|
||||
[ -z ${BORGWRAPPER_BACKUP_CHECK_MAX_AGE_IN_SECONDS} ] && BORGWRAPPER_BACKUP_CHECK_MAX_AGE_IN_SECONDS=604800;
|
||||
[ -z ${BORGWRAPPER_BACKUP_CHECK_FILE} ] && BORGWRAPPER_BACKUP_CHECK_FILE="$HOME/.borg-backup-${BORGWRAPPER_BACKUP_NAME}.check";
|
||||
[ -z ${BORGWRAPPER_BACKUP_LOG} ] && BORGWRAPPER_BACKUP_LOG=true;
|
||||
[ -z ${BORGWRAPPER_BACKUP_LOG_PRUNE} ] && BORGWRAPPER_BACKUP_LOG_PRUNE=true;
|
||||
[ -z ${BORGWRAPPER_BACKUP_LOG_FILE} ] && BORGWRAPPER_BACKUP_LOG_FILE="$HOME/.borg-backup-${BORGWRAPPER_BACKUP_NAME}.log";
|
||||
[ -z ${BORGWRAPPER_BACKUP_NOTIFY_VIA_MAIL} ] && BORGWRAPPER_BACKUP_NOTIFY_VIA_MAIL=false;
|
||||
[ -z ${BORGWRAPPER_BACKUP_NOTIFY_MAIL_ADDRESS} ] && BORGWRAPPER_BACKUP_NOTIFY_MAIL_ADDRESS="";
|
||||
[ -z ${BORGWRAPPER_BACKUP_NOTIFY_UI} ] && BORGWRAPPER_BACKUP_NOTIFY_UI=false;
|
||||
[ -z ${BORGWRAPPER_BACKUP_COMPRESSION} ] && BORGWRAPPER_BACKUP_COMPRESSION=lz4;
|
||||
[ -z ${BORGWRAPPER_BACKUP_ENCRYPTION} ] && BORGWRAPPER_BACKUP_ENCRYPTION=none;
|
||||
[ -z ${BORGWRAPPER_BORG_BINARY} ] && BORGWRAPPER_BORG_BINARY=$(which borg);
|
||||
[ -z ${BORGWRAPPER_BORG_INIT_PARAMS} ] && BORGWRAPPER_BORG_INIT_PARAMS="--encryption=${BORGWRAPPER_BACKUP_ENCRYPTION}";
|
||||
[ -z ${BORGWRAPPER_BORG_CREATE_PARAMS} ] && BORGWRAPPER_BORG_CREATE_PARAMS="-v -s -p -C ${BORGWRAPPER_BACKUP_COMPRESSION}";
|
||||
[ -z ${BORGWRAPPER_BORG_CHECK_PARAMS} ] && BORGWRAPPER_BORG_CHECK_PARAMS="-v";
|
||||
[ -z ${BORGWRAPPER_BORG_PRUNE_PARAMS} ] && BORGWRAPPER_BORG_PRUNE_PARAMS="-v -s -d ${BORGWRAPPER_BACKUP_KEEP_IN_DAYS}";
|
||||
}
|
||||
|
||||
# check for config file and use it
|
||||
source_config "$1" "${HOME}/.borgwrapper.conf";
|
||||
apply_defaults;
|
||||
|
||||
# start and info
|
||||
echo "Using $BORGWRAPPER_BORG_BINARY as binary"
|
||||
echo "Using ${BORGWRAPPER_BORG_BINARY} as binary";
|
||||
|
||||
borgwrapper_pre_backup;
|
||||
|
||||
# export passphrase if not blank
|
||||
if [ ! -z "$BORGWRAPPER_BACKUP_PASSWORD" ]; then
|
||||
export BORG_PASSPHRASE=$BORGWRAPPER_BACKUP_PASSWORD
|
||||
if [ ! -z "${BORGWRAPPER_BACKUP_PASSWORD}" ]; then
|
||||
export BORG_PASSPHRASE=${BORGWRAPPER_BACKUP_PASSWORD};
|
||||
fi
|
||||
|
||||
# init hint
|
||||
echo "Hint: If you haven't, you need to create the borg repository manually before first run if it doesn't exist:";
|
||||
echo "$BORGWRAPPER_BORG_BINARY init $BORGWRAPPER_BORG_INIT_PARAMS $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME";
|
||||
echo "${BORGWRAPPER_BORG_BINARY} init ${BORGWRAPPER_BORG_INIT_PARAMS} ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME}";
|
||||
|
||||
# notify UI
|
||||
if [ "$BORGWRAPPER_BACKUP_NOTIFY_UI" = true ]; then
|
||||
notify-send "Starting backup" $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME::$BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT;
|
||||
if [ "${BORGWRAPPER_BACKUP_NOTIFY_UI}" = true ]; then
|
||||
notify-send "Starting backup" ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME}::${BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT};
|
||||
fi
|
||||
|
||||
# create
|
||||
$BORGWRAPPER_BORG_BINARY create $BORGWRAPPER_BORG_CREATE_PARAMS $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME::$BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT "${BORGWRAPPER_BACKUP_FILES[@]}";
|
||||
${BORGWRAPPER_BORG_BINARY} create ${BORGWRAPPER_BORG_CREATE_PARAMS} ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME}::${BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT} "${BORGWRAPPER_BACKUP_FILES[@]}";
|
||||
|
||||
# check
|
||||
if [ "$BORGWRAPPER_BACKUP_CHECK" = true ]; then
|
||||
if [ "${BORGWRAPPER_BACKUP_CHECK}" = true ]; then
|
||||
|
||||
# use for first time creation
|
||||
doCheck=false
|
||||
|
||||
if [ ! -f "$BORGWRAPPER_BACKUP_CHECK_FILE" ]; then
|
||||
touch $BORGWRAPPER_BACKUP_CHECK_FILE
|
||||
if [ ! -f "${BORGWRAPPER_BACKUP_CHECK_FILE}" ]; then
|
||||
touch ${BORGWRAPPER_BACKUP_CHECK_FILE}
|
||||
doCheck=true
|
||||
fi
|
||||
|
||||
# compare date
|
||||
lastMod=$(date -r $BORGWRAPPER_BACKUP_CHECK_FILE +%s)
|
||||
age=$(($BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT - $lastMod))
|
||||
lastMod=$(date -r ${BORGWRAPPER_BACKUP_CHECK_FILE} +%s)
|
||||
age=$((${BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT} - ${lastMod}))
|
||||
|
||||
if [ "$age" -gt "$BORGWRAPPER_BACKUP_CHECK_MAX_AGE_IN_SECONDS" ]; then
|
||||
if [ "$age" -gt "${BORGWRAPPER_BACKUP_CHECK_MAX_AGE_IN_SECONDS}" ]; then
|
||||
doCheck=true
|
||||
fi
|
||||
|
||||
|
||||
if [ "$doCheck" = true ]; then
|
||||
$BORGWRAPPER_BORG_BINARY check $BORGWRAPPER_BORG_CHECK_PARAMS $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME;
|
||||
touch $BORGWRAPPER_BACKUP_CHECK_FILE
|
||||
${BORGWRAPPER_BORG_BINARY} check ${BORGWRAPPER_BORG_CHECK_PARAMS} ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME};
|
||||
touch ${BORGWRAPPER_BACKUP_CHECK_FILE}
|
||||
fi
|
||||
fi
|
||||
|
||||
# prune
|
||||
if [ "$BORGWRAPPER_BACKUP_PRUNE" = true ]; then
|
||||
$BORGWRAPPER_BORG_BINARY prune $BORGWRAPPER_BORG_PRUNE_PARAMS $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME;
|
||||
if [ "${BORGWRAPPER_BACKUP_PRUNE}" = true ]; then
|
||||
${BORGWRAPPER_BORG_BINARY} prune ${BORGWRAPPER_BORG_PRUNE_PARAMS} ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME};
|
||||
fi
|
||||
|
||||
# log
|
||||
if [ "$BORGWRAPPER_BACKUP_LOG" = true ]; then
|
||||
if [ "${BORGWRAPPER_BACKUP_LOG}" = true ]; then
|
||||
|
||||
if [ "$BORGWRAPPER_BACKUP_LOG_PRUNE" = true ] && [ -f "$BORGWRAPPER_BACKUP_LOG_FILE" ]; then
|
||||
rm $BORGWRAPPER_BACKUP_LOG_FILE;
|
||||
if [ "${BORGWRAPPER_BACKUP_LOG_PRUNE}" = true ] && [ -f "${BORGWRAPPER_BACKUP_LOG_FILE}" ]; then
|
||||
rm ${BORGWRAPPER_BACKUP_LOG_FILE};
|
||||
fi
|
||||
|
||||
touch $BORGWRAPPER_BACKUP_LOG_FILE;
|
||||
$BORGWRAPPER_BORG_BINARY list -v $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME >> $BORGWRAPPER_BACKUP_LOG_FILE;
|
||||
echo "---" >> $BORGWRAPPER_BACKUP_LOG_FILE;
|
||||
$BORGWRAPPER_BORG_BINARY info $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME::$BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT >> $BORGWRAPPER_BACKUP_LOG_FILE;
|
||||
touch ${BORGWRAPPER_BACKUP_LOG_FILE};
|
||||
${BORGWRAPPER_BORG_BINARY} list -v ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME} >> ${BORGWRAPPER_BACKUP_LOG_FILE};
|
||||
echo "---" >> ${BORGWRAPPER_BACKUP_LOG_FILE};
|
||||
${BORGWRAPPER_BORG_BINARY} info ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME}::${BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT} >> ${BORGWRAPPER_BACKUP_LOG_FILE};
|
||||
|
||||
if [ "$BORGWRAPPER_BACKUP_NOTIFY_VIA_MAIL" = true ]; then
|
||||
cat $BORGWRAPPER_BACKUP_LOG_FILE|mailx -Ssendwait -s "[backup $BORGWRAPPER_BACKUP_NAME]" $BORGWRAPPER_BACKUP_NOTIFY_MAIL_ADDRESS;
|
||||
if [ "${BORGWRAPPER_BACKUP_NOTIFY_VIA_MAIL}" = true ]; then
|
||||
cat ${BORGWRAPPER_BACKUP_LOG_FILE}|mailx -Ssendwait -s "[borgwrapper ${BORGWRAPPER_BACKUP_NAME}]" ${BORGWRAPPER_BACKUP_NOTIFY_MAIL_ADDRESS};
|
||||
fi
|
||||
fi
|
||||
|
||||
# notify UI
|
||||
if [ "$BORGWRAPPER_BACKUP_NOTIFY_UI" = true ]; then
|
||||
notify-send "Finished backup" $BORGWRAPPER_BACKUP_REPOSITORY$BORGWRAPPER_BACKUP_NAME::$BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT;
|
||||
if [ "${BORGWRAPPER_BACKUP_NOTIFY_UI}" = true ]; then
|
||||
notify-send "Finished backup" ${BORGWRAPPER_BACKUP_REPOSITORY}${BORGWRAPPER_BACKUP_NAME}::${BORGWRAPPER_BACKUP_TIMESTAMP_FORMAT};
|
||||
fi
|
||||
|
||||
borgwrapper_post_backup;
|
||||
|
||||
|
|
Loading…
Reference in a new issue