Compare commits

...

39 Commits

Author SHA1 Message Date
6390f3f284 Merge branch 'main' of https://git.oopen.de/backup/borg-backup into main 2025-01-24 16:01:20 +01:00
0fa2d55653 support bacjup og bith, MySQL and PostgreSQL databases. 2025-01-24 16:00:57 +01:00
74b94e4c64 borg-extract-archiv.sh: change restote path for backup server. 2025-01-10 10:47:46 +01:00
ebca1bde5d borg-extract-archiv.sh: call script 'borg-list-backups.sh' with the right values. 2025-01-01 14:18:54 +01:00
ef9886bd52 borg-list-backups.sh: Add support for running script om backup host. 2025-01-01 14:17:02 +01:00
957993aff5 borg-extract-archiv.sh,borg-list-backups.sh: some minor fixes in case og localhost. 2025-01-01 13:30:26 +01:00
7f1114500a Add script 'borg-extract-archiv.sh'. 2025-01-01 13:01:15 +01:00
8bd5fd5eed borg-umount-archiv.sh: some minor changes on script output. 2025-01-01 03:01:26 +01:00
4b35efda16 borg-list-backups.sh: redirect stderr to 'dev/null' for 'borg list' command. 2025-01-01 02:57:26 +01:00
17a65e641d borg-umount-archiv.sh: umount ALL mounted archives from repository. 2024-12-31 18:48:22 +01:00
d85ce20eba borg-mount-archiv.sh: print out the commans used to ,ount archive. 2024-12-31 18:46:33 +01:00
2d6485f06c Only send log messages on errors. 2024-12-17 00:48:00 +01:00
53ab70325a Fix error in logrotate borg2 logfile. 2024-12-13 01:02:41 +01:00
5475acbec0 borg-backup.sh: alert if Type of databases has a wrong setting. 2024-12-08 13:33:26 +01:00
326a860bbc borg-backup.sh: fix error creating MySQL Database backups. 2024-12-01 02:26:44 +01:00
ab7f48150c Add parameter KEEP_DAILY,KEEP_WEEKLY,KEEP_MONTHLY and KEEP_YEARLY for 'borg prune'. 2024-11-20 10:41:32 +01:00
dd97ae2915 Remove 'README.prerequisites'. 2024-10-23 01:12:18 +02:00
510ed88893 README.prerequisites: add new hosts.. 2024-10-22 23:10:55 +02:00
c7ff9879aa README.prerequisites: add new hosts. 2024-10-22 20:56:05 +02:00
f00cae0652 README.prerequisites: fix host 'c.mx.oopen.de'. 2024-10-21 21:57:40 +02:00
e8a43aa8f7 README.prerequisites: add more host 'c.mx.oopen.de'. 2024-10-21 21:52:01 +02:00
d8cc45d837 README.prerequisites: add more hosts. 2024-10-21 21:36:36 +02:00
4eebe49fa9 Merge branch 'main' of https://git.oopen.de/backup/borg-backup 2024-10-20 23:54:09 +02:00
dc47af25eb README.prerequisites: add host 'cl-flr.oopen.de'. 2024-10-20 23:24:43 +02:00
4ec32ba399 README.prerequisites: changhe 'o34' to 'cl-vbrg'. 2024-10-20 23:15:37 +02:00
9e07800fcf README.prerequisites: add more hosts. 2024-10-20 23:00:34 +02:00
747d800a08 README.prerequisites: add more hosts. 2024-10-20 22:51:48 +02:00
d0980a26cd Merge branch 'main' of https://git.oopen.de/backup/borg-backup 2024-10-20 18:33:09 +02:00
156123e820 Add logrotation for /var/log/borg/borg-backup.log. 2024-10-20 18:30:58 +02:00
12820e17f2 README.prerequisites: add new repros.. 2024-10-19 21:49:14 +02:00
a35a49dde9 borg-backup.sh,borg-backup-nc.sh: minor change on script output. 2024-07-10 01:05:05 +02:00
89d974defc borg-backup-nc.sh: add alert e-mail messages.. 2024-07-08 14:40:36 +02:00
47dc51b783 borg-backup.sh: add alert e-mail messages.. 2024-07-08 14:39:52 +02:00
93c1310cfc borg-backup-nc.sh: fix error add missing 'fi' to close if statement. 2024-07-08 01:55:40 +02:00
e57583a5d9 borg-backup-nc.sh: fix error in case of Nextcloud path is a symlink. 2024-07-03 12:41:24 +02:00
55a4ff2952 borg-backup-nc.sh: if Nextcloud path is a symlink add the realpath to bor backup. 2024-07-03 12:39:52 +02:00
f366e7d97b Fix error lpoading configuration file. 2024-07-02 23:05:19 +02:00
9553c95ce9 README.prerequisites: some minor changes.. 2024-07-02 23:04:19 +02:00
4aec86ab41 borg-backup.sh: clean upo from whitespaces; remove development code. 2024-07-02 23:03:21 +02:00
10 changed files with 1486 additions and 279 deletions

View File

@ -1,141 +0,0 @@
# ==========
# Preparation / Prerequisites
# ==========
BORG_HOST="o26.oopen.de"
BORG_REPO="/backup/cl-fm"
BORG_PASSPHRASE='wweK/m.xV-g3oI-7WM/pejTP'
BORG_HOST="o26.oopen.de"
BORG_REPO="/backup/mail-fm"
BORG_PASSPHRASE='joG.Ir2x--VsX6/mxb.kEcmq'
SSH_USER="borg"
SSH_PORT=22
SSH_IDENTITY_FILE="/root/.ssh/id_ed25519-borg-backup"
export BORG_RSH='ssh -i /root/.ssh/id_ed25519-borg-backup'
export SSH_USER
export BORG_PASSPHRASE
# ---
# see:
#
# https://www.c-rieger.de/nextcloud-borg-backup-zur-hetzner-storage-box
# https://borgbackup.readthedocs.io/en/stable/quickstart.html
# ---
# ==========
# Preparations Server
# ==========
# preparation on the backup server (o26.oopen.de)
# ===============================================
#
# 1. On Backup Server create a user which is used to push the backups to the server
#
# backup-user: borg
# backup-group: borg
#
#
# 2 Create a backup repository:
#
# client-identifier: cl-fm
#
# mkdir -p /backup/<client-identifier>
#
#
# 3. Backup user must have full write permissions to the backup repostitories
#
# chown <backup-user>:<backup-group> /data/backup/<client-identifier>
#
# 4. Prevent repository directory from being deleted
#
# chattr +i /data/backup/<client-identifier>
#
mkdir -p "${BORG_REPO}"
chown ${SSH_USER}:${SSH_USER} "${BORG_REPO}"
chattr +i "$(dirname "${BORG_REPO}")"
# ==========
# Preparations Client
# ==========
# preparation on the backup client (cl-fm.oopen.de
# ================================================
#
# 1. Install Borg Backup (on the client) using 'apt install'
#
# apt install -y -t stable-backports borgbackup python3-llfuse
#
#
# 2. Generate a SSH Key (as root without passphrase) to connect to the backup server:
#
# ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-borg-backup
#
# Note:
# Dont't forget pusching the key to the servers authorized_key file of
# the remote backup user
#
#
# 3. create file /root/.ssh/config ti store ssh connection parameters
#
# BORG_HOST="o26.oopen.de"
# SSH_USER="borg"
# SSH_IDENTITY_FILE="/root/.ssh/id_ed25519-borg-backup"
#
# cat << EOF > /root/.ssh/config
# host ${BORG_HOST}
# User ${SSH_USER}
# IdentityFile ${SSH_IDENTITY_FILE}
# StrictHostKeyChecking no
# LogLevel FATAL
# EOF
#
apt install -y -t stable-backports borgbackup python3-llfuse
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-borg-backup
cat << EOF > /root/.ssh/config
host ${BORG_HOST}
User ${SSH_USER}
IdentityFile ${SSH_IDENTITY_FILE}
StrictHostKeyChecking no
LogLevel FATAL
EOF
# Initialize backup
# =================
#
# export SSH_USER="borg"
# export BORG_HOST="o26.oopen.de"
# export SSH_PORT="22"
# export BORG_PASSPHRASE="wweK/m.xV-g3oI-7WM/pejTP"
#
# export BORG_REPO="/data/backup/cl-fm"
#
# borg init --encryption=repokey ssh://${SSH_USER}@${BORG_HOST}:${SSH_PORT}${BACKUP_REPOSITORY}
#
# Outpu of of borg initializing was:
#
# By default repositories initialized with this version will produce security
# errors if written to with an older version (up to and including Borg 1.0.8).
#
# If you want to use these older versions, you can disable the check by running:
# borg upgrade --disable-tam ssh://borg@o26.oopen.de:22//data/backup/cl-fm
#
# See https://borgbackup.readthedocs.io/en/stable/changes.html#pre-1-0-9-manifest-spoofing-vulnerability
# for details about the security implications.
#
# IMPORTANT: you will need both KEY AND PASSPHRASE to access this repo!
# If you used a repokey mode, the key is stored in the repo, but you should back it up separately.
# Use "borg key export" to export the key, optionally in printable format.
# Write down the passphrase. Store both at safe place(s).
#
borg init --encryption=repokey ssh://${SSH_USER}@${BORG_HOST}:${SSH_PORT}${BORG_REPO}

View File

@ -180,39 +180,6 @@ if $terminal ; then
fi
# -------------
# - Job is already running?
# -------------
# - If job already runs, stop execution..
# -
if mkdir "$LOCK_DIR" 2> /dev/null ; then
## - Remove lockdir when the script finishes, or when it receives a signal
trap "clean_up 1" SIGHUP SIGINT SIGTERM
else
datum="$(date +"%d.%m.%Y %H:%M")"
msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\n Exiting now.."
echo ""
echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
echo ""
echo -e " Exiting now.."
echo ""
for _email in ${alert_email_arr[@]} ; do
echo -e "To:${_email}\n${content_type}\nSubject:Error cronjob `basename $0` -- $datum\n${msg}\n" \
| sendmail -F "Error `hostname -f`" -f $sender_address $_email
done
exit 1
fi
# ==========
# - Begin Main Script
# ==========
@ -245,6 +212,15 @@ DEFAULT_NC_DB_BACKUP_DIR="/data/backup/sql"
DEFAULT_BACKUP_OTHER_DIRECTORIES="/etc /home /root /var/spool/cron"
DEFAULT_KEEP_DAILY=10
DEFAULT_KEEP_WEEKLY=5
DEFAULT_KEEP_MONTHLY=6
DEFAULT_KEEP_YEARLY=1
DEFAULT_ADMIN_EMAIL="root"
DEFAULT_COMPANY="O.OPEN"
DEFAULT_FROM_ADDRESS="borg-backup@$(hostname -f)"
# ----------
# Read Configurations from $conf_file
@ -258,6 +234,48 @@ else
fi
# -------------
# - Job is already running?
# -------------
[[ -z "${ADMIN_EMAIL}" ]] && ADMIN_EMAIL="${DEFAULT_ADMIN_EMAIL}"
[[ -z "${COMPANY}" ]] && COMPANY="${DEFAULT_COMPANY}"
[[ -z "${FROM_ADDRESS}" ]] && FROM_ADDRESS="${DEFAULT_FROM_ADDRESS}"
# - If job already runs, stop execution..
# -
if mkdir "$LOCK_DIR" 2> /dev/null ; then
## - Remove lockdir when the script finishes, or when it receives a signal
trap "clean_up 1" SIGHUP SIGINT SIGTERM
else
datum="$(date +"%d.%m.%Y %H:%M")"
msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\n Exiting now.."
datum="$(date +"%d.%m.%Y")"
content_type='Content-Type: text/plain;\n charset="utf-8"'
subject="Error Borg Backup - ${COMPANY} - ${datum}"
subject_utf8="$(echo "$subject" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo $subject_utf8 | base64 --wrap=0)?="
echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EMAIL}
echo ""
echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
echo ""
echo -e " Exiting now.."
echo ""
exit 1
fi
# ----------
# Set Parameter values
# ----------
@ -269,6 +287,11 @@ fi
if [[ -z "${NC_PATH}" ]] ; then
fatal "Nextcloud's DocumentRoot directory not found!"
fi
if [[ -h "${NC_PATH}" ]] ; then
BORG_NC_PATH="${NC_PATH} $(realpath "${NC_PATH}")"
else
BORG_NC_PATH="${NC_PATH}"
fi
if [[ -z "${BORG_HOST}" ]] ; then
fatal "Backup Hosth (var BORG_HOST) not given!"
@ -286,8 +309,14 @@ fi
[[ -z "${BORG_RSH}" ]] && BORG_RSH="${DEFAULT_BORG_RSH}"
[[ -z "${KEEP_DAILY}" ]] && KEEP_DAILY=${DEFAULT_KEEP_DAILY}
[[ -z "${KEEP_WEEKLY}" ]] && KEEP_WEEKLY=${DEFAULT_KEEP_WEEKLY}
[[ -z "${KEEP_MONTHLY}" ]] && KEEP_MONTHLY=${DEFAULT_KEEP_MONTHLY}
[[ -z "${KEEP_YEARLY}" ]] && KEEP_YEARLY=${DEFAULT_KEEP_YEARLY}
[[ -z "${BORG_LOG_DIR}" ]] && BORG_LOG_DIR="${DEFAULT_BORG_LOG_DIR}"
BORG_LOG_FILE="${BORG_LOG_DIR}/${backup_date}.log"
BORG_LOG_FILE="${BORG_LOG_DIR}//borg-backup.log"
[[ -z "${NC_DB_BACKUP_DIR}" ]] && NC_DB_BACKUP_DIR="${DEFAULT_NC_DB_BACKUP_DIR}"
@ -296,8 +325,8 @@ BORG_LOG_FILE="${BORG_LOG_DIR}/${backup_date}.log"
# By default: Borg won't follow symlinks
#
BORG_BACKUP_DIRS=""
for _dir in $BACKUP_OTHER_DIRECTORIES ; do
if [[ -h "${_dir}" ]] ; then
for _dir in $BACKUP_OTHER_DIRECTORIES ; do
if [[ -h "${_dir}" ]] ; then
BORG_BACKUP_DIRS="$BORG_BACKUP_DIRS $(realpath "${_dir}")"
fi
BORG_BACKUP_DIRS="$BORG_BACKUP_DIRS ${_dir}"
@ -320,7 +349,7 @@ export BORG_REPO
# For 'Warning: The repository at location … was previously located at ..'
#
# This has to be set when the repository has been created by user and
# This has to be set when the repository has been created by user and
# the script is called by cron
#
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
@ -396,7 +425,12 @@ echo "" >> ${BORG_LOG_FILE}
echo "NC_PATH=\"${NC_PATH}\"" >> ${BORG_LOG_FILE}
echo "NC_DB_BACKUP_DIR=\"${NC_DB_BACKUP_DIR}\"" >> ${BORG_LOG_FILE}
echo "" >> ${BORG_LOG_FILE}
echo "ADMIN_EMAIL=\"${ADMIN_EMAIL}\"" >> ${BORG_LOG_FILE}
echo "COMPANY=\"${COMPANY}\"" >> ${BORG_LOG_FILE}
echo "FROM_ADDRESS=\"${FROM_ADDRESS}\"" >> ${BORG_LOG_FILE}
echo "" >> ${BORG_LOG_FILE}
echo "PHP_COMMAND=\"${PHP_COMMAND}\"" >> ${BORG_LOG_FILE}
echo "" >> ${BORG_LOG_FILE}
@ -550,7 +584,7 @@ borg create \\
\\
${BORG_URL}::${backup_date} \\
${NC_DB_BACKUP_DIR} \\
${NC_PATH} \\
${BORG_NC_PATH} \\
${NC_DATA_DIR} \\
${BORG_BACKUP_DIRS}
EOF
@ -571,7 +605,7 @@ borg create \
\
${BORG_URL}::${backup_date} \
${NC_DB_BACKUP_DIR} \
${NC_PATH} \
${BORG_NC_PATH} \
${NC_DATA_DIR} \
${BORG_BACKUP_DIRS} \
> ${log_file} 2>&1
@ -593,20 +627,20 @@ cat << EOF >> ${BORG_LOG_FILE}
borg prune \\
--list \\
--show-rc \\
--keep-daily 7 \\
--keep-weekly 4 \\
--keep-monthly 6 \\
--keep-yearly 1 \\
--keep-daily ${KEEP_DAILY} \\
--keep-weekly ${KEEP_WEEKLY} \\
--keep-monthly ${KEEP_MONTHLY} \\
--keep-yearly ${KEEP_YEARLY} \\
${BORG_URL}
EOF
borg prune \
--list \
--show-rc \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-yearly 1 \
--keep-daily ${KEEP_DAILY} \
--keep-weekly ${KEEP_WEEKLY} \
--keep-monthly ${KEEP_MONTHLY} \
--keep-yearly ${KEEP_YEARLY} \
${BORG_URL} \
> ${log_file} 2>&1
@ -663,6 +697,130 @@ durationReadable=$(printf "%02d hours %02d minutes %02d seconds" $durationHour $
echo -e "\n\n###### Server backup finished on ${endDateReadable} (${durationReadable}) ######\n" >> ${BORG_LOG_FILE}
blank_line
# Error Handling
#
declare -i error=$(grep -i -e"\[\s*ERROR" ${BORG_LOG_FILE} | wc -l)
declare -i warning=$(grep -i -e"\[\s*WARN" ${BORG_LOG_FILE} | wc -l)
if [ $error -gt 0 -o $warning -gt 0 ] ; then
# Send Summery
#
if $terminal ; then
echo -e -n " Send Summary.."
fi
datum="$(date +"%d.%m.%Y %H:%M")"
filesystem_usage="$(df -h)"
msg_head_line="\n\n# ---\n# Server backup finished on ${endDateReadable} (${durationReadable})\n# ---\n\n"
msg="$(cat "${BORG_LOG_FILE}")"
datum="$(date +"%d.%m.%Y")"
content_type='Content-Type: text/plain;\n charset="utf-8"'
subject="Borg Backup - ${COMPANY} - ${datum}"
subject_utf8="$(echo "$subject" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo $subject_utf8 | base64 --wrap=0)?="
echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${filesystem_usage}\n${msg_head_line}\n${msg}\n" | /usr/sbin/sendmail -F "BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EMAIL} > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
blank_line
# Send Error Message
#
if $terminal ; then
echo -e -n " Send Error Message to ${ADMIN_EMAIL}.."
fi
err_msg="$(grep -A 2 -i -e"\[\s*ERROR" ${BORG_LOG_FILE})\n"
warn_msg="$(grep -A 2 -i -e"\[\s*WARN" ${BORG_LOG_FILE})\n"
msg_top="Borg Backup Error ${COMPANY} vom ${datum}.\nBorg Backup on '$(hostname -f)' beendet mit:"
msg_body_01="\t${error} Error(s)\n\t${warning} Warning(s)\n"
msg_body_02="\n\n--- ERROR(S) ---\n${err_msg}\n\n--- WARNING(S) ...\n${warn_msg}"
msg="${msg_top}\n${msg_body_01}\n${msg_body_02}"
subject="Borg Backup Errors at ${host_name} -- ${datum}"
subject_utf8="$(echo "${subject}" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo ${subject_utf8} | base64 --wrap=0)?="
echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors Borg BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EMAIL} > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
if [[ -n "${ADMIN_EXTRA_EMAIL}" ]] ; then
echo -e "To:${ADMIN_EXTRA_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors Borg BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EXTRA_EMAIL} > ${log_file} 2>&1
# Send Error Message
#
if $terminal ; then
echo -e -n " Send Error Message to ${ADMIN_EMAIL}.."
fi
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
fi
blank_line
fi
blank_line
echononl "Create temporary logorotate configuration file 'logrotate_borg.conf'.."
cat << EOF > ${LOCK_DIR}/logrotate_borg.conf 2> ${log_file}
${BORG_LOG_FILE} {
daily
rotate 7
missingok
compress
su root root
}
EOF
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
echononl "Rotate logfile '${BORG_LOG_FILE}'.."
logrotate ${LOCK_DIR}/logrotate_borg.conf > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
clean_up 0

View File

@ -22,6 +22,7 @@ currentDateReadable=$(date --date @"$startTime" +"%d.%m.%Y - %H:%M:%S")
clean_up() {
# Perform program exit housekeeping
rm -f ${DB_BACKUP_DIR}/*-${backup_date}.sql
rm -rf "$LOCK_DIR"
blank_line
exit $1
@ -139,6 +140,14 @@ echo_wait(){
fi
}
## - Check if a given array (parameter 2) contains a given string (parameter 1)
## -
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
@ -179,39 +188,6 @@ if $terminal ; then
fi
# -------------
# - Job is already running?
# -------------
# - If job already runs, stop execution..
# -
if mkdir "$LOCK_DIR" 2> /dev/null ; then
## - Remove lockdir when the script finishes, or when it receives a signal
trap "clean_up 1" SIGHUP SIGINT SIGTERM
else
datum="$(date +"%d.%m.%Y %H:%M")"
msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\n Exiting now.."
echo ""
echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
echo ""
echo -e " Exiting now.."
echo ""
for _email in ${alert_email_arr[@]} ; do
echo -e "To:${_email}\n${content_type}\nSubject:Error cronjob `basename $0` -- $datum\n${msg}\n" \
| sendmail -F "Error `hostname -f`" -f $sender_address $_email
done
exit 1
fi
# ==========
# - Begin Main Script
# ==========
@ -242,11 +218,20 @@ DEFAULT_DB_BACKUP_DIR="/data/backup/sql"
DEFAULT_BACKUP_DIRECTORIES="/etc /home /root /var/spool/cron"
DEFAULT_KEEP_DAILY=10
DEFAULT_KEEP_WEEKLY=5
DEFAULT_KEEP_MONTHLY=6
DEFAULT_KEEP_YEARLY=1
DEFAULT_DB_TYPE="None"
DEFAULT_MYSQL_CREDENTIALS="-u root -S /run/mysqld/mysqld.sock"
DEFAULT_PSQL_SYSTEM_USER="postgres"
DEFAULT_ADMIN_EMAIL="root"
DEFAULT_COMPANY="O.OPEN"
DEFAULT_FROM_ADDRESS="borg-backup@$(hostname -f)"
# ----------
# Read Configurations from $conf_file
# ----------
@ -258,6 +243,48 @@ else
fi
# -------------
# - Job is already running?
# -------------
[[ -z "${ADMIN_EMAIL}" ]] && ADMIN_EMAIL="${DEFAULT_ADMIN_EMAIL}"
[[ -z "${COMPANY}" ]] && COMPANY="${DEFAULT_COMPANY}"
[[ -z "${FROM_ADDRESS}" ]] && FROM_ADDRESS="${DEFAULT_FROM_ADDRESS}"
# - If job already runs, stop execution..
# -
if mkdir "$LOCK_DIR" 2> /dev/null ; then
## - Remove lockdir when the script finishes, or when it receives a signal
trap "clean_up 1" SIGHUP SIGINT SIGTERM
else
datum="$(date +"%d.%m.%Y %H:%M")"
msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\n Exiting now.."
datum="$(date +"%d.%m.%Y")"
content_type='Content-Type: text/plain;\n charset="utf-8"'
subject="Error Borg Backup - ${COMPANY} - ${datum}"
subject_utf8="$(echo "$subject" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo $subject_utf8 | base64 --wrap=0)?="
echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EMAIL}
echo ""
echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
echo ""
echo -e " Exiting now.."
echo ""
exit 1
fi
# ----------
# Set Parameter values
# ----------
@ -283,16 +310,38 @@ fi
[[ -z "${DB_BACKUP_DIR}" ]] && DB_BACKUP_DIR="${DEFAULT_DB_BACKUP_DIR}"
[[ -z "${BORG_LOG_DIR}" ]] && BORG_LOG_DIR="${DEFAULT_BORG_LOG_DIR}"
BORG_LOG_FILE="${BORG_LOG_DIR}/${backup_date}.log"
BORG_LOG_FILE="${BORG_LOG_DIR}/borg-backup.log"
[[ -z "${KEEP_DAILY}" ]] && KEEP_DAILY=${DEFAULT_KEEP_DAILY}
[[ -z "${KEEP_WEEKLY}" ]] && KEEP_WEEKLY=${DEFAULT_KEEP_WEEKLY}
[[ -z "${KEEP_MONTHLY}" ]] && KEEP_MONTHLY=${DEFAULT_KEEP_MONTHLY}
[[ -z "${KEEP_YEARLY}" ]] && KEEP_YEARLY=${DEFAULT_KEEP_YEARLY}
[[ -z "${DB_TYPE}" ]] && DB_TYPE="${DEFAULT_DB_TYPE}"
if [[ "${DB_TYPE,,}" = "mysql" ]] ; then
[[ -z "${MYSQL_CREDENTIALS}" ]] && MYSQL_CREDENTIALS="${DEFAULT_MYSQL_CREDENTIALS}"
elif [[ "${DB_TYPE,,}" = "psql" ]] || [[ "${DB_TYPE,,}" = "postgresql" ]] || [[ "${DB_TYPE,,}" = "postgres" ]] ; then
[[ -z "${PSQL_SYSTEM_USER}" ]] && PSQL_SYSTEM_USER="${DEFAULT_PSQL_SYSTEM_USER}"
if [[ -z "${DB_TYPE}" ]] ; then
DB_TYPE="${DEFAULT_DB_TYPE}"
else
# replace comma by blank sign
DB_TYPE=${DB_TYPE/,/ }
fi
declare -a db_type_arr=()
for _db_type in ${DB_TYPE}; do
if [[ "${DB_TYPE,,}" = "psql" ]] || [[ "${DB_TYPE,,}" = "postgresql" ]] || [[ "${DB_TYPE,,}" = "postgres" ]] ; then
db_type_arr+=("postgresql")
else
db_type_arr+=("${_db_type,,}")
fi
done
if containsElement "mysql" "${db_type_arr[@]}" ; then
[[ -z "${MYSQL_CREDENTIALS}" ]] && MYSQL_CREDENTIALS="${DEFAULT_MYSQL_CREDENTIALS}"
fi
if containsElement "postgresql" "${db_type_arr[@]}" ; then
[[ -z "${PSQL_SYSTEM_USER}" ]] && PSQL_SYSTEM_USER="${DEFAULT_PSQL_SYSTEM_USER}"
fi
[[ -z "${BACKUP_DIRECTORIES}" ]] && BACKUP_DIRECTORIES="${DEFAULT_BACKUP_DIRECTORIES}"
@ -300,8 +349,8 @@ fi
# By default: Borg won't follow symlinks
#
BORG_BACKUP_DIRS=""
for _dir in $BACKUP_DIRECTORIES ; do
if [[ -h "${_dir}" ]] ; then
for _dir in $BACKUP_DIRECTORIES ; do
if [[ -h "${_dir}" ]] ; then
BORG_BACKUP_DIRS="$BORG_BACKUP_DIRS $(realpath "${_dir}")"
fi
BORG_BACKUP_DIRS="$BORG_BACKUP_DIRS ${_dir}"
@ -324,7 +373,7 @@ export BORG_REPO
# For 'Warning: The repository at location … was previously located at ..'
#
# This has to be set when the repository has been created by user and
# This has to be set when the repository has been created by user and
# the script is called by cron
#
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
@ -387,6 +436,10 @@ echo "" >> ${BORG_LOG_FILE}
echo "DB_TYPE=\"${DB_TYPE}\"" >> ${BORG_LOG_FILE}
echo "DB_BACKUP_DIR=\"${DB_BACKUP_DIR}\"" >> ${BORG_LOG_FILE}
echo "" >> ${BORG_LOG_FILE}
echo "ADMIN_EMAIL=\"${ADMIN_EMAIL}\"" >> ${BORG_LOG_FILE}
echo "COMPANY=\"${COMPANY}\"" >> ${BORG_LOG_FILE}
echo "FROM_ADDRESS=\"${FROM_ADDRESS}\"" >> ${BORG_LOG_FILE}
echo "" >> ${BORG_LOG_FILE}
if [[ -n "${DB_TYPE}" ]] && [[ "${DB_TYPE,,}" = "!none" ]]; then
echo "" >> ${BORG_LOG_FILE}
@ -397,13 +450,15 @@ if [[ -n "${DB_TYPE}" ]] && [[ "${DB_TYPE,,}" = "!none" ]]; then
blank_line
fi
if [[ "${DB_TYPE,,}" = "mysql" ]] ; then
if containsElement "mysql" "${db_type_arr[@]}" ; then
blank_line
echononl "Create an array of MySQL databases."
cat <<EOF >> ${BORG_LOG_FILE}
declare -a mysql_database_arr=();
for _db_name in \$(mysql -s -r -N -e 'show databases' 2> /dev/null ) ; do
for _db_name in \$(mysql ${MYSQL_CREDENTIALS} -s -r -N -e 'show databases' 2> /dev/null ) ; do
[[ "\${_db_name}" = "information_schema" ]] && continue
[[ "\${_db_name}" = "performance_schema" ]] && continue
@ -416,7 +471,7 @@ done
EOF
declare -a mysql_database_arr=();
for _db_name in $(mysql -s -r -N -e 'show databases' 2> ${log_file}) ; do
for _db_name in $(mysql ${MYSQL_CREDENTIALS} -s -r -N -e 'show databases' 2> ${log_file}) ; do
[[ "${_db_name}" = "information_schema" ]] && continue
[[ "${_db_name}" = "performance_schema" ]] && continue
@ -439,14 +494,14 @@ EOF
echononl "Dump Database '${_db}'.."
cat <<EOF >> ${BORG_LOG_FILE}
mysqldump $MYSQL_CREDENTIALS \\
mysqldump ${MYSQL_CREDENTIALS} \\
--single-transaction --routines \\
-h localhost \\
-e ${_db} > ${DB_BACKUP_DIR}/${_db}-${backup_date}.sql
EOF
mysqldump $MYSQL_CREDENTIALS \
mysqldump ${MYSQL_CREDENTIALS} \
--single-transaction --routines \
-h localhost \
-e ${_db} > ${DB_BACKUP_DIR}/${_db}-${backup_date}.sql 2> ${log_file}
@ -459,8 +514,11 @@ EOF
fi
done
fi
elif [[ "${DB_TYPE,,}" = "psql" ]] || [[ "${DB_TYPE,,}" = "postgresql" ]] || [[ "${DB_TYPE,,}" = "postgres" ]] ; then
if containsElement "postgresql" "${db_type_arr[@]}" ; then
blank_line
echononl "Create an array of PostgreSQL databases."
@ -519,7 +577,8 @@ EOF
done
fi
clean_up 0
blank_line
echononl "Create borg backup.."
@ -582,20 +641,20 @@ cat << EOF >> ${BORG_LOG_FILE}
borg prune \\
--list \\
--show-rc \\
--keep-daily 7 \\
--keep-weekly 4 \\
--keep-monthly 6 \\
--keep-yearly 1 \\
--keep-daily ${KEEP_DAILY} \\
--keep-weekly ${KEEP_WEEKLY} \\
--keep-monthly ${KEEP_MONTHLY} \\
--keep-yearly ${KEEP_YEARLY} \\
${BORG_URL}
EOF
borg prune \
--list \
--show-rc \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-yearly 1 \
--keep-daily ${KEEP_DAILY} \
--keep-weekly ${KEEP_WEEKLY} \
--keep-monthly ${KEEP_MONTHLY} \
--keep-yearly ${KEEP_YEARLY} \
${BORG_URL} \
> ${log_file} 2>&1
@ -636,5 +695,131 @@ durationReadable=$(printf "%02d hours %02d minutes %02d seconds" $durationHour $
echo -e "\n\n###### Server backup finished on ${endDateReadable} (${durationReadable}) ######\n" >> ${BORG_LOG_FILE}
blank_line
# Error Handling
#
declare -i error=$(grep -i -e"\[\s*ERROR" ${BORG_LOG_FILE} | wc -l)
declare -i warning=$(grep -i -e"\[\s*WARN" ${BORG_LOG_FILE} | wc -l)
if [ $error -gt 0 -o $warning -gt 0 ] ; then
# Send Summery
#
if $terminal ; then
echo -e -n " Send Summary.."
fi
datum="$(date +"%d.%m.%Y %H:%M")"
filesystem_usage="$(df -h)"
msg_head_line="\n\n# ---\n# Server backup finished on ${endDateReadable} (${durationReadable})\n# ---\n\n"
msg="$(cat "${BORG_LOG_FILE}")"
datum="$(date +"%d.%m.%Y")"
content_type='Content-Type: text/plain;\n charset="utf-8"'
subject="Borg Backup - ${COMPANY} - ${datum}"
subject_utf8="$(echo "$subject" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo $subject_utf8 | base64 --wrap=0)?="
echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${filesystem_usage}\n${msg_head_line}\n${msg}\n" | /usr/sbin/sendmail -F "BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EMAIL} > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
blank_line
# Send Error Message
#
if $terminal ; then
echo -e -n " Send Error Message to ${ADMIN_EMAIL}.."
fi
err_msg="$(grep -A 2 -i -e"\[\s*ERROR" ${BORG_LOG_FILE})\n"
warn_msg="$(grep -A 2 -i -e"\[\s*WARN" ${BORG_LOG_FILE})\n"
msg_top="Borg Backup Error ${COMPANY} vom ${datum}.\nBorg Backup on '$(hostname -f)' beendet mit:"
msg_body_01="\t${error} Error(s)\n\t${warning} Warning(s)\n"
msg_body_02="\n\n--- ERROR(S) ---\n${err_msg}\n\n--- WARNING(S) ...\n${warn_msg}"
msg="${msg_top}\n${msg_body_01}\n${msg_body_02}"
subject="Borg Backup Errors at ${host_name} -- ${datum}"
subject_utf8="$(echo "${subject}" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo ${subject_utf8} | base64 --wrap=0)?="
echo -e "To:${ADMIN_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors Borg BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EMAIL} > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
if [[ -n "${ADMIN_EXTRA_EMAIL}" ]] ; then
echo -e "To:${ADMIN_EXTRA_EMAIL}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors Borg BACKUP ${COMPANY}" -f ${FROM_ADDRESS} ${ADMIN_EXTRA_EMAIL} > ${log_file} 2>&1
# Send Error Message
#
if $terminal ; then
echo -e -n " Send Error Message to ${ADMIN_EMAIL}.."
fi
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
fi
blank_line
fi
blank_line
echononl "Create temporary logorotate configuration file 'logrotate_borg.conf'.."
cat << EOF > ${LOCK_DIR}/logrotate_borg.conf 2> ${log_file}
${BORG_LOG_FILE} {
daily
rotate 7
missingok
compress
su root root
}
EOF
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
echononl "Rotate logfile '${BORG_LOG_FILE}'.."
logrotate ${LOCK_DIR}/logrotate_borg.conf > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
clean_up 0

View File

@ -3,7 +3,12 @@
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/borg-backup-nc.conf"
if [[ -f "${working_dir}/conf/borg-backup-nc.conf" ]] ; then
conf_file="${working_dir}/conf/borg-backup-nc.conf"
else
conf_file="${working_dir}/conf/borg-backup.conf"
fi
LOCK_DIR="/tmp/${script_name%%.*}.LOCK"
log_file="${LOCK_DIR}/${script_name%%.*}.log"

676
borg-extract-archiv.sh Executable file
View File

@ -0,0 +1,676 @@
#!/usr/bin/env bash
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
if [[ -f "${working_dir}/conf/borg-backup-nc.conf" ]] ; then
conf_file="${working_dir}/conf/borg-backup-nc.conf"
else
conf_file="${working_dir}/conf/borg-backup.conf"
fi
LOCK_DIR="/tmp/${script_name%%.*}.LOCK"
log_file="${LOCK_DIR}/${script_name%%.*}.log"
# ----------
# Base Function(s)
# ----------
clean_up() {
# Perform program exit housekeeping
rm -rf "$LOCK_DIR"
blank_line
exit $1
}
echononl(){
if $terminal ; then
echo X\\c > /tmp/shprompt$$
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
echo -e -n " $*\\c" 1>&2
else
echo -e -n " $*" 1>&2
fi
rm /tmp/shprompt$$
fi
}
fatal(){
echo ""
if $terminal ; then
echo -e " [ \033[31m\033[1mFatal\033[m ]: $*"
echo ""
echo -e " \033[31m\033[1mScript was interupted\033[m!"
else
echo " [ Fatal ]: $*"
echo ""
echo " Script was terminated...."
fi
echo ""
clean_up 1
}
error (){
echo ""
if $terminal ; then
echo -e " [ \033[31m\033[1mError\033[m ]: $*"
else
echo "[ Error ]: $*"
fi
}
warn (){
echo ""
if $terminal ; then
echo -e " [ \033[33m\033[1mWarning\033[m ]: $*"
else
echo "[ Warning ]: $*"
fi
echo ""
}
warn_only_terminal () {
if $terminal ; then
echo ""
echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*"
echo ""
fi
}
info (){
if $terminal ; then
echo ""
echo -e " [ \033[32m\033[1mInfo\033[m ] $*"
echo ""
fi
}
ok (){
if $terminal ; then
echo ""
echo -e " [ \033[32m\033[1mOk\033[m ] $*"
echo ""
fi
}
echo_done() {
if $terminal ; then
echo -e "\033[75G[ \033[32mdone\033[m ]"
fi
}
echo_ok() {
if $terminal ; then
echo -e "\033[75G[ \033[32mok\033[m ]"
fi
}
echo_warn() {
if $terminal ; then
echo -e "\033[75G[ \033[33mwarn\033[m ]"
fi
}
echo_failed(){
if $terminal ; then
echo -e "\033[75G[ \033[1;31mfailed\033[m ]"
fi
}
echo_skipped() {
if $terminal ; then
echo -e "\033[75G[ \033[90m\033[1mskipped\033[m ]"
fi
}
echo_wait(){
if $terminal ; then
echo -en "\033[75G[ \033[5m\033[1m...\033[m ]"
fi
}
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
blank_line() {
if $terminal ; then
echo ""
fi
}
# ----------
# - Some checks ..
# ----------
# - Running in a terminal?
# -
if [[ -t 1 ]] ; then
terminal=true
else
terminal=false
fi
# -------------
# - Job is already running?
# -------------
# - If job already runs, stop execution..
# -
if mkdir "$LOCK_DIR" 2> /dev/null ; then
## - Remove lockdir when the script finishes, or when it receives a signal
trap "clean_up 1" SIGHUP SIGINT SIGTERM
else
datum="$(date +"%d.%m.%Y %H:%M")"
msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\n Exiting now.."
echo ""
echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
echo ""
echo -e " Exiting now.."
echo ""
for _email in ${alert_email_arr[@]} ; do
echo -e "To:${_email}\n${content_type}\nSubject:Error cronjob `basename $0` -- $datum\n${msg}\n" \
| sendmail -F "Error `hostname -f`" -f $sender_address $_email
done
exit 1
fi
# ==========
# - Begin Main Script
# ==========
# ----------
# - Headline
# ----------
if $terminal ; then
echo ""
echo -e "\033[1m----------\033[m"
echo -e "\033[32m\033[1mRunning script \033[m\033[1m$script_name\033[32m .. \033[m"
echo -e "\033[1m----------\033[m"
echo ""
fi
# ----------
# Default values
# ----------
DEFAULT_SSH_USER="borg"
DEFAULT_SSH_PORT=22
DEFAULT_BORG_RSH='ssh -i /root/.ssh/id_ed25519-borg-backup'
# ----------
# Read Configurations from $conf_file
# ----------
if [[ -f "$conf_file" ]]; then
source "$conf_file"
else
warn "No configuration file '$conf_file' present!"
#fatal "No configuration file '$conf_file' present!"
fi
# ----------
# Set Parameter values
# ----------
#if [[ -z "${BORG_PASSPHRASE}" ]] ; then
# fatal "Borg Passphrase (BORG_PASSPHRASE) NOT found!"
#fi
[[ -n "${BORG_PASSPHRASE}" ]] && _BORG_PASSPHRASE="${BORG_PASSPHRASE}"
[[ -n "${BORG_HOST}" ]] && _BORG_HOST="${BORG_HOST}"
[[ -n "${BORG_REPO}" ]] && _BORG_REPO="${BORG_REPO}"
if [[ -n "${SSH_USER}" ]] ; then
_SSH_USER="${SSH_USER}"
else
_SSH_USER="${DEFAULT_SSH_USER}"
fi
if [[ -n "${SSH_PORT}" ]] ; then
_SSH_PORT="${SSH_PORT}"
else
_SSH_PORT="${DEFAULT_SSH_PORT}"
fi
if [[ -n "${BORG_RSH}" ]] ; then
_BORG_RSH="${BORG_RSH}"
else
_BORG_RSH="${DEFAULT_BORG_RSH}"
fi
[[ -z "${BORG_FUSE_MOUNT_DIR}" ]] && BORG_FUSE_MOUNT_DIR="${DEFAULT_BORG_FUSE_MOUNT_DIR}"
# ---
# Some automatic “answerers” (if set, they automatically answer confirmation questions):
# ---
# For 'Warning: The repository at location … was previously located at ..'
#
BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
export BORG_RELOCATED_REPO_ACCESS_IS_OK
FQHN_BORG_HOSTNAME=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the computer that hosts the borg repository."
echo ""
if [[ -n "${_BORG_HOST}" ]] ; then
while [[ "X${FQHN_BORG_HOSTNAME}" = "X" ]]; do
echononl "Borg Repository Host [${_BORG_HOST}]: "
read FQHN_BORG_HOSTNAME
if [[ "X${FQHN_BORG_HOSTNAME}" = "X" ]]; then
FQHN_BORG_HOSTNAME="${_BORG_HOST}"
break
fi
if [[ ${FQHN_BORG_HOSTNAME} =~ ^127 ]] || [[ "${FQHN_BORG_HOSTNAME,,}" = "localhost" ]] ; then
break
fi
if [[ ! ${FQHN_BORG_HOSTNAME} =~ \. ]]; then
echo -e "\n\tGiven Host \033[33m\033[1m${FQHN_BORG_HOSTNAME}\033[m seems not to be a full qualified hostname.\n"
FQHN_BORG_HOSTNAME=""
fi
done
else
while [[ "X${FQHN_BORG_HOSTNAME}" = "X" ]]; do
echononl "Full borg hostname: "
read FQHN_BORG_HOSTNAME
if [[ ${FQHN_BORG_HOSTNAME} =~ ^127 ]] || [[ "${FQHN_BORG_HOSTNAME,,}" = "localhost" ]] ; then
break
fi
if [[ "X${FQHN_BORG_HOSTNAME}" = "X" ]]; then
echo -e "\n\t\033[33m\033[1mFull qualified hostname is reqired\033[m\n"
fi
if [[ ! $FQHN_BORG_HOSTNAME =~ \. ]]; then
echo -e "\n\tGiven Host \033[33m\033[1m$FQHN_BORG_HOSTNAME\033[m seems not to be a full qualified hostname.\n"
FQHN_BORG_HOSTNAME=""
fi
done
fi
BORG_HOST="${FQHN_BORG_HOSTNAME,,}"
FQPN_BORG_REPO=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the borg repository path from which files are to be extracted."
echo ""
if [[ -n "${_BORG_REPO}" ]] ; then
echononl "Full Qualified Borg Repository Path [${_BORG_REPO}]: "
read FQPN_BORG_REPO
if [[ "X${FQPN_BORG_REPO}" = "X" ]]; then
FQPN_BORG_REPO="${_BORG_REPO}"
fi
else
while [[ "X${FQPN_BORG_REPO}" = "X" ]]; do
echononl "Full Qualified Borg Repository Path: "
read FQPN_BORG_REPO
if [[ "X${FQPN_BORG_REPO}" = "X" ]]; then
echo -e "\n\t\033[33m\033[1mFull qualified hostname is reqired\033[m\n"
fi
done
fi
BORG_REPO="${FQPN_BORG_REPO}"
LIST_OF_FILES_TO_RESTORE=
echo -e "\033[32m--\033[m"
echo ""
echo "Specify a space-separated list of files or directories to be restored."
echo ""
echo -e " Type \"\033[33mall\033[m\" or leave emty to restore the full archive"
echo ""
echononl "List of files or directories: "
read LIST_OF_FILES_TO_RESTORE
if [[ "X${LIST_OF_FILES_TO_RESTORE}" = "X" ]] || [[ "$(trim ${LIST_OF_FILES_TO_RESTORE,,})" = 'all' ]] ; then
LIST_OF_FILES_TO_RESTORE=""
fi
BORG_PASSPHRASE=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the password for borg repository '$(basename "${BORG_REPO}")'."
echo ""
if [[ -n "${_BORG_PASSPHRASE}" ]] ; then
echononl "Repositories Passphrase [${_BORG_PASSPHRASE}]: "
read BORG_PASSPHRASE
if [[ "X${BORG_PASSPHRASE}" = "X" ]]; then
BORG_PASSPHRASE="${_BORG_PASSPHRASE}"
fi
else
while [[ "X${BORG_PASSPHRASE}" = "X" ]]; do
echononl "Repositories Passphrase: "
read BORG_PASSPHRASE
if [[ "X${BORG_PASSPHRASE}" = "X" ]]; then
echo -e "\n\t\033[33m\033[1m is reqired\033[m\n"
fi
done
fi
if [[ ! ${FQHN_BORG_HOSTNAME} =~ ^127 ]] && [[ ! "${FQHN_BORG_HOSTNAME,,}" = "localhost" ]] ; then
SSH_USER=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the ssh user to connect to the Borg host '${BORG_HOST}'."
echo ""
echononl "SSH user [${_SSH_USER}]: "
read SSH_USER
if [[ "X${SSH_USER}" = "X" ]]; then
SSH_USER="${_SSH_USER}"
fi
SSH_PORT=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the ssh port to connect to the Borg host '${BORG_HOST}'."
echo ""
while [[ "X${SSH_PORT}" = "X" ]]; do
echononl "SSH user [${_SSH_PORT}]: "
read SSH_PORT
if [[ "X${SSH_PORT}" = "X" ]]; then
SSH_PORT="${_SSH_PORT}"
fi
done
BORG_RSH=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the ssh command which is used to connect to the Borg host '${BORG_HOST}'."
echo ""
while [[ "X${BORG_RSH}" = "X" ]]; do
echononl "SSH command [${_BORG_RSH}]: "
read BORG_RSH
if [[ "X${BORG_RSH}" = "X" ]]; then
BORG_RSH="${_BORG_RSH}"
fi
done
export BORG_RSH
fi
blank_line
echo -e "\033[32m--\033[m"
echo ""
export BORG_HOST
export BORG_PASSPHRASE
export BORG_REPO
# List Borg Backups
#
(
source ${working_dir}/borg-list-backups.sh
)
BORG_BACKUP_ID=""
echo ""
echo -e " \033[33m---------------------------------------------\033[m"
echo " Which Borg Archiv should be extracted?"
echo ""
echo " Give a Borg Backup ID from above list"
echo ""
while [[ "X${BORG_BACKUP_ID}" = "X" ]]; do
echo -n " Borg Backup ID: "
read BORG_BACKUP_ID
if [[ "X$(trim ${BORG_BACKUP_ID})" = "X" ]] ; then
echo -e "\n\t\033[33m\033[1mIncorrect entry\033[m\n"
fi
done
echo -e " \033[33m---------------------------------------------\033[m"
echo ""
BORG_RESTORE_PATH_BACKUP_SERVER="/backup/RESTORE/$(basename "${BORG_REPO}")/${BORG_BACKUP_ID}"
_BORG_RESTORE_PATH="/data/RESTORE/$(basename "${BORG_REPO}")/${BORG_BACKUP_ID}"
BORG_RESTORE_PATH=""
echo -e "\033[32m--\033[m"
echo ""
echo "Specify the pathname to which the archive or parts of it are to be restored.."
echo ""
while [[ "X${BORG_RESTORE_PATH}" = "X" ]]; do
echononl "FQPN of restore path [${_BORG_RESTORE_PATH}]: "
read BORG_RESTORE_PATH
if [[ "X${BORG_RESTORE_PATH}" = "X" ]]; then
BORG_RESTORE_PATH="${_BORG_RESTORE_PATH}"
fi
done
if [[ ${BORG_HOST} =~ ^127 ]] || [[ ${BORG_HOST,,} =~ localhost ]] ; then
BORG_URL="${BORG_REPO}"
else
BORG_URL="ssh://${SSH_USER}@${BORG_HOST}:${SSH_PORT}${BORG_REPO}"
fi
blank_line
echo ""
echo ""
echo -e "\t\033[32mStart script for extracting borg backup..\033[m"
echo ""
echo -e "\tBORG_HOST................: ${BORG_HOST}"
echo -e "\tBORG_REPO................: ${BORG_REPO}"
echo ""
echo -e "\tBORG_PASSPHRASE..........: ${BORG_PASSPHRASE}"
echo ""
echo -e "\tSSH_USER ................: ${SSH_USER}"
echo -e "\tSSH_PORT.................: ${SSH_PORT}"
echo -e "\tBORG_RSH.................: ${BORG_RSH}"
echo ""
echo -e "\tBORG_URL.................: ${BORG_URL}"
echo ""
echo -e "\tBORG_RESTORE_PATH........: ${BORG_RESTORE_PATH}"
if [[ -z "${LIST_OF_FILES_TO_RESTORE}" ]]; then
echo -e "\tLIST_OF_FILES_TO_RESTORE.: \033[33mRestore the full archive\033[m"
else
echo -e "\tLIST_OF_FILES_TO_RESTORE.: ${LIST_OF_FILES_TO_RESTORE}"
fi
echo ""
echo ""
declare -i _CHOOSE
echo -e " Ho to continue?"
echo ""
echo -e " \033[1m[1] Restore files from repository $(basename "${BORG_REPO}") archive ${BORG_BACKUP_ID}\033[m"
echo -e " [2] Only print out the commands for restoring files/folders"
echo -e " [3] Exit borg extract script."
echo ""
echo " Type a number or press <RETURN> to choose highlighted value"
echo ""
echononl "Eingabe: "
while [[ -z "${_CHOOSE}" ]]; do
read OPTION
[[ -z "$OPTION" ]] && OPTION=1
case $OPTION in
1) _CHOOSE=1
;;
2) _CHOOSE=2
;;
3) _CHOOSE=3
;;
*)
echo ""
echo -e "\tFalsche Eingabe ! [1/2/3] or type <RETURN> for the highlited default"
echo ""
echononl "Eingabe: "
;;
esac
done
if [[ ${_CHOOSE} -gt 2 ]] ; then
echo ""
clean_up 0
elif [[ ${_CHOOSE} -gt 1 ]] ; then
echo -e "\033[40m\033[37m
-----------------------------------------------------------------------------------------
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RSH=\"${BORG_RSH}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${BORG_RESTORE_PATH_BACKUP_SERVER}\"
cd \"${BORG_RESTORE_PATH_BACKUP_SERVER}\"
borg --remote-path borg extract ${BORG_URL}::${BORG_BACKUP_ID} ${LIST_OF_FILES_TO_RESTORE}
"
if [[ ! ${BORG_HOST} =~ ^127 ]] && [[ ! ${BORG_HOST,,} =~ localhost ]] ; then
echo -e "
On Backup Host type:
====================
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${BORG_RESTORE_PATH}\"
cd "${BORG_RESTORE_PATH}"
borg --remote-path borg extract ${BORG_REPO}::${BORG_BACKUP_ID} ${LIST_OF_FILES_TO_RESTORE}
"
fi
echo -e "-----------------------------------------------------------------------------------------\033[m\n"
clean_up 0
fi
echo ""
info "\033[32mStart restoring from archive with the above settings\033[m?"
echo -n " To continue type uppercase 'YES': "
read OK
echo ""
if [[ "$OK" != "YES" ]] ; then
fatal "Abort by user request - Answer as not 'YES'"
fi
blank_line
echononl "Create Restore Directory '${BORG_RESTORE_PATH}'."
if [ ! -d "${BORG_RESTORE_PATH}" ]; then
mkdir -p "${BORG_RESTORE_PATH}" > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
fatal "Creating restore directory '${BORG_RESTORE_PATH}' failed!"
else
echo_ok
fi
else
echo_skipped
fi
blank_line
echononl "Change into Restore Path '${BORG_RESTORE_PATH}'.."
cd "${BORG_RESTORE_PATH}" > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
fatal "$(cat "${log_file}")"
else
echo_ok
fi
blank_line
echo -e "\033[40m\033[37m
-----------------------------------------------------------------------------------------
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RSH=\"${BORG_RSH}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${BORG_RESTORE_PATH}\"
cd \"${BORG_RESTORE_PATH}\"
borg --remote-path borg extract ${BORG_URL}::${BORG_BACKUP_ID} ${LIST_OF_FILES_TO_RESTORE}
"
if [[ ! ${BORG_HOST} =~ ^127 ]] && [[ ! ${BORG_HOST,,} =~ localhost ]] ; then
echo -e "
On Backup Host type:
====================
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${BORG_RESTORE_PATH_BACKUP_SERVER}\"
cd "${BORG_RESTORE_PATH_BACKUP_SERVER}"
borg --remote-path borg extract ${BORG_REPO}::${BORG_BACKUP_ID} ${LIST_OF_FILES_TO_RESTORE}
"
fi
echo -e "-----------------------------------------------------------------------------------------\033[m\n"
blank_line
echo " Restore from archive '$(basename "${BORG_REPO}")::${BORG_BACKUP_ID}' to"
echononl " '${BORG_RESTORE_PATH}'.."
if [[ ${BORG_HOST} =~ ^127 ]] || [[ ${BORG_HOST,,} =~ localhost ]] ; then
borg --remote-path borg extract ${BORG_REPO}::${BORG_BACKUP_ID} ${LIST_OF_FILES_TO_RESTORE} > "${log_file}" 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
else
borg --remote-path borg extract ${BORG_URL}::${BORG_BACKUP_ID} ${LIST_OF_FILES_TO_RESTORE} > "${log_file}" 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
fi
blank_line
info "The data restored from the archive can be found in the directory:
\033[1m${BORG_RESTORE_PATH}\033[m"
clean_up 0

View File

@ -3,7 +3,11 @@
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/borg-backup-nc.conf"
if [[ -f "${working_dir}/conf/borg-backup-nc.conf" ]] ; then
conf_file="${working_dir}/conf/borg-backup-nc.conf"
else
conf_file="${working_dir}/conf/borg-backup.conf"
fi
LOCK_DIR="/tmp/${script_name%%.*}.LOCK"
log_file="${LOCK_DIR}/${script_name%%.*}.log"
@ -221,10 +225,12 @@ DEFAULT_BORG_RSH='ssh -i /root/.ssh/id_ed25519-borg-backup'
# ----------
if [[ -f "$conf_file" ]]; then
source "$conf_file"
else
fatal "No configuration file '$conf_file' present!"
if [[ -z "${BORG_HOST}" ]] || [[ -z "${BORG_REPO}" ]] || [[ -z "${BORG_PASSPHRASE}" ]] ; then
if [[ -f "$conf_file" ]]; then
source "$conf_file"
else
fatal "No configuration file '$conf_file' present!"
fi
fi
@ -274,10 +280,18 @@ export BORG_RELOCATED_REPO_ACCESS_IS_OK
echo -e " \033[1mDate\033[33GBorg Backup ID\033[m\n"
while read -r _borg_id _date_weekday _date_date _date_time _time_stamp_borg_backup || [[ -n $_line ]] ; do
if [[ ${BORG_HOST} =~ ^127 ]] || [[ "${BORG_HOST,,}" =~ "localhost" ]] ; then
while read -r _borg_id _date_weekday _date_date _date_time _time_stamp_borg_backup || [[ -n $_line ]] ; do
echo -e " ${_date_weekday} ${_date_date} ${_date_time} [ \033[33m${_borg_id}\033[m ]"
echo -e " ${_date_weekday} ${_date_date} ${_date_time} [ \033[33m${_borg_id}\033[m ]"
done < <(borg list ${BORG_URL})
done < <(borg list ${BORG_REPO} 2> /dev/null)
else
while read -r _borg_id _date_weekday _date_date _date_time _time_stamp_borg_backup || [[ -n $_line ]] ; do
echo -e " ${_date_weekday} ${_date_date} ${_date_time} [ \033[33m${_borg_id}\033[m ]"
done < <(borg list ${BORG_URL} 2> /dev/null)
fi
clean_up 0

View File

@ -3,7 +3,12 @@
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/borg-backup-nc.conf"
if [[ -f "${working_dir}/conf/borg-backup-nc.conf" ]] ; then
conf_file="${working_dir}/conf/borg-backup-nc.conf"
else
conf_file="${working_dir}/conf/borg-backup.conf"
fi
LOCK_DIR="/tmp/${script_name%%.*}.LOCK"
log_file="${LOCK_DIR}/${script_name%%.*}.log"
@ -263,24 +268,26 @@ export BORG_RSH
BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
export BORG_RELOCATED_REPO_ACCESS_IS_OK
echononl "Create Restore Directory '${BORG_FUSE_MOUNT_DIR}'."
if [ ! -d "${BORG_FUSE_MOUNT_DIR}" ]; then
mkdir -p "${BORG_FUSE_MOUNT_DIR}" > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
blank_line
fatal "No restore directory '${BORG_FUSE_MOUNT_DIR}' present!"
else
echo_ok
fi
else
echo_skipped
LIST_OF_FILES_OR_DIRECTORIES=
echo -e "\033[32m--\033[m"
echo ""
echo "Specify a space-separated list of files or directories to be part of the mounted filesystem."
echo ""
echo -e " Type \"\033[33mall\033[m\" or leave emty to mount the full archive"
echo ""
echononl "List of files or directories: "
read LIST_OF_FILES_OR_DIRECTORIES
if [[ "X${LIST_OF_FILES_OR_DIRECTORIES}" = "X" ]] || [[ "$(trim ${LIST_OF_FILES_OR_DIRECTORIES,,})" = 'all' ]] ; then
LIST_OF_FILES_OR_DIRECTORIES=""
fi
blank_line
echo -e "\033[32m--\033[m"
echo ""
# List Borg Backups
#
@ -301,9 +308,173 @@ read BORG_BACKUP_ID
echo -e " \033[33m--------------------------------------------\033[m"
echo ""
echononl "Mount archive '${BORG_REPO}::${BORG_BACKUP_ID}' to '${BORG_FUSE_MOUNT_DIR}'.."
blank_line
borg mount ${BORG_URL}::${BORG_BACKUP_ID} ${BORG_FUSE_MOUNT_DIR} >> "${log_file}" 2>&1
echo ""
echo ""
echo -e "\t\033[32mStart script for (readonly) mounting repository archiv '${BORG_BACKUP_ID}'..\033[m"
echo ""
echo -e "\tBORG_HOST......................: ${BORG_HOST}"
echo -e "\tBORG_REPO......................: ${BORG_REPO}"
echo ""
echo -e "\tBORG_PASSPHRASE................: ${BORG_PASSPHRASE}"
echo ""
echo -e "\tSSH_USER ......................: ${SSH_USER}"
echo -e "\tSSH_PORT.......................: ${SSH_PORT}"
echo -e "\tBORG_RSH.......................: ${BORG_RSH}"
echo ""
echo -e "\tBORG_URL.......................: ${BORG_URL}"
echo ""
echo -e "\tBORG_FUSE_MOUNT_DIR............: ${BORG_FUSE_MOUNT_DIR}"
if [[ -z "${LIST_OF_FILES_OR_DIRECTORIES}" ]]; then
echo -e "\tLIST_OF_FILES_OR_DIRECTORIES...: \033[33mMount the full archive\033[m"
else
echo -e "\tLIST_OF_FILES_OR_DIRECTORIES...: ${LIST_OF_FILES_OR_DIRECTORIES}"
fi
echo ""
echo ""
declare -i _CHOOSE
echo -e " Ho to continue?"
echo ""
echo -e " \033[1m[1] Mount files from repository $(basename "${BORG_REPO}") archive ${BORG_BACKUP_ID}\033[m"
echo -e " [2] Only print out the commands for mounting files/folders"
echo -e " [3] Exit borg2 mount script."
echo ""
echo " Type a number or press <RETURN> to choose highlighted value"
echo ""
echononl "Eingabe: "
while [[ -z "${_CHOOSE}" ]]; do
read OPTION
[[ -z "$OPTION" ]] && OPTION=1
case $OPTION in
1) _CHOOSE=1
;;
2) _CHOOSE=2
;;
3) _CHOOSE=3
;;
*)
echo ""
echo -e "\tFalsche Eingabe ! [1/2/3] or type <RETURN> for the highlited default"
echo ""
echononl "Eingabe: "
;;
esac
done
if [[ ${_CHOOSE} -gt 2 ]] ; then
echo ""
clean_up 0
elif [[ ${_CHOOSE} -gt 1 ]] ; then
_MOUNT_DIR_BACKUP_HOST="${BORG_FUSE_MOUNT_DIR}/$(basename "${BORG_REPO}")/${BORG_BACKUP_ID}"
echo -e "\033[40m\033[37m
-----------------------------------------------------------------------------------------
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RSH=\"${BORG_RSH}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}\"
borg mount ${BORG_URL}::${BORG_BACKUP_ID} ${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID} ${LIST_OF_FILES_OR_DIRECTORIES}
On Backup Host type:
====================
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${_MOUNT_DIR_BACKUP_HOST}\"
borg mount ${BORG_REPO}::${BORG_BACKUP_ID} ${_MOUNT_DIR_BACKUP_HOST} ${LIST_OF_FILES_OR_DIRECTORIES}
You can find the mounted fuse archive at;
${_MOUNT_DIR_BACKUP_HOST}
In Order to unmount repository archive type:
umount ${_MOUNT_DIR_BACKUP_HOST}
-----------------------------------------------------------------------------------------
\033[m\n"
clean_up 0
fi
echononl "Create Mount Directory '${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}'."
if [ ! -d "${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}" ]; then
mkdir -p "${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}" > ${log_file} 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
fatal "Mount directory '${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}' present!"
else
echo_ok
fi
else
echo_skipped
fi
blank_line
_MOUNT_DIR_BACKUP_HOST="${BORG_FUSE_MOUNT_DIR}/$(basename "${BORG_REPO}")/${BORG_BACKUP_ID}"
echo -e "\033[40m\033[37m
-----------------------------------------------------------------------------------------
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RSH=\"${BORG_RSH}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}\"
borg mount ${BORG_URL}::${BORG_BACKUP_ID} ${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID} ${LIST_OF_FILES_OR_DIRECTORIES}
On Backup Host type:
====================
export BORG_PASSPHRASE=\"${BORG_PASSPHRASE}\"
export BORG_REPO=\"${BORG_REPO}\"
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
mkdir -p \"${_MOUNT_DIR_BACKUP_HOST}\"
borg mount ${BORG_REPO}::${BORG_BACKUP_ID} ${_MOUNT_DIR_BACKUP_HOST} ${LIST_OF_FILES_OR_DIRECTORIES}
You can find the mounted fuse archive at;
${_MOUNT_DIR_BACKUP_HOST}
In Order to unmount repository archive type:
umount ${_MOUNT_DIR_BACKUP_HOST}
-----------------------------------------------------------------------------------------
\033[m\n"
blank_line
echo " Mount archive '${BORG_REPO}::${BORG_BACKUP_ID}' to"
echononl " '${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID}'.."
borg mount ${BORG_URL}::${BORG_BACKUP_ID} ${BORG_FUSE_MOUNT_DIR}/${BORG_BACKUP_ID} ${LIST_OF_FILES_OR_DIRECTORIES} > "${log_file}" 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed

View File

@ -3,7 +3,12 @@
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/borg-backup-nc.conf"
if [[ -f "${working_dir}/conf/borg-backup-nc.conf" ]] ; then
conf_file="${working_dir}/conf/borg-backup-nc.conf"
else
conf_file="${working_dir}/conf/borg-backup.conf"
fi
LOCK_DIR="/tmp/${script_name%%.*}.LOCK"
log_file="${LOCK_DIR}/${script_name%%.*}.log"
@ -263,15 +268,33 @@ export BORG_RSH
BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
export BORG_RELOCATED_REPO_ACCESS_IS_OK
echononl "Unmount fuse filesystem mounted at '${BORG_FUSE_MOUNT_DIR}'.."
declare -i index=0
for _dir in $(ls /mnt/borg-fuse-mount) ; do
borg umount ${BORG_FUSE_MOUNT_DIR} >> "${log_file}" 2>&1
echo " Unmount fuse filesystem mounted at"
echo -e -n " '${BORG_FUSE_MOUNT_DIR}/${_dir}'.."
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
#borg umount ${BORG_FUSE_MOUNT_DIR} >> "${log_file}" 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
error "$(cat "${log_file}")"
else
echo_ok
fi
borg umount ${BORG_FUSE_MOUNT_DIR}/${_dir} >> "${log_file}" 2>&1
#echo ${_dir}
#umount ${BORG_FUSE_MOUNT_DIR}/${_dir}
rmdir ${BORG_FUSE_MOUNT_DIR}/${_dir}
((index++))
done
if [[ $index -lt 1 ]] ; then
warn "No borgfs mounted."
fi
clean_up 0

View File

@ -130,3 +130,62 @@
#
#BACKUP_OTHER_DIRECTORIES="/etc /home /root /var/spool/cron"
# ---
# Restore Parameters
# ---
# BORG_FUSE_MOUNT_DIR
#
# Mountpoint where to mount an borg backup archiv as a FUSE filesystem.
#
# Defaults to:
#
# BORG_MOUNT_FUSE_DIR="/mnt/borg-fuse-mount"
#
#BORG_MOUNT_FUSE_DIR="/mnt/borg-fuse-mount"
# ---
# Alert Parameters
# ---
# ADMIN_EMAIL
#
# Send Informations about the backup prozess to this e-mail address
#
# Defaults to:
#
# ADMIN_EMAIL="root"
#
#ADMIN_EMAIL="root"
# ADMIN_EXTRA_EMAIL
#
# Send Informations about the backup process also to this e-mail address
#
# Defaults to empty string (NOT SET)
#
#ADMIN_EXTRA_EMAIL=""
# FROM_ADDRESS
#
# Defaults to:
#
# "borg-backup@$(hostname -f)"
#
#FROM_ADDRESS=""
# COMPANY
#
# DEFAULTS to
# Defaults to:
#
# COMPANY="O.OPEN"
#
#COMPANY="O.OPEN"

View File

@ -139,7 +139,6 @@
#PSQL_SYSTEM_USER="postgres"
# DB_BACKUP_DIR
#
# Directory in which current database dumps are stored (and transferred to the repository)
@ -167,3 +166,61 @@
#
#BACKUP_DIRECTORIES="/etc /home /root /var/spool/cron"
# ---
# Restore Parameters
# ---
# BORG_FUSE_MOUNT_DIR
#
# Mountpoint where to mount an borg backup archiv as a FUSE filesystem.
#
# Defaults to:
#
# BORG_MOUNT_FUSE_DIR="/mnt/borg-fuse-mount"
#
#BORG_MOUNT_FUSE_DIR="/mnt/borg-fuse-mount"
# ---
# Alert Parameters
# ---
# ADMIN_EMAIL
#
# Send Informations about the backup prozess to this e-mail address
#
# Defaults to:
#
# ADMIN_EMAIL="root"
#
#ADMIN_EMAIL="root"
# ADMIN_EXTRA_EMAIL
#
# Send Informations about the backup process also to this e-mail address
#
# Defaults to empty string (NOT SET)
#
#ADMIN_EXTRA_EMAIL=""
# FROM_ADDRESS
#
# Defaults to:
#
# "borg-backup@$(hostname -f)"
#
#FROM_ADDRESS=""
# COMPANY
#
# DEFAULTS to
# Defaults to:
#
# COMPANY="O.OPEN"
#
#COMPANY="O.OPEN"