Files
admin-tools/BackupServerConfig.sh
2023-03-14 15:08:53 +01:00

99 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
##############################################################
#
# This script saves the main config directories and (if
# activated) saves them on the central syslog server.
#
# Hostname, additional folders and the syslog setting can be
# set in the config file '/etc/default/BackupServerConfig'.
#
##############################################################
set -ou pipefail
###########################################################
# Global systemd/journald Functions
###########################################################
function INFO {
echo "$1"
echo "$1" | systemd-cat -p info -t "$(basename "$0" .sh)"
}
function WARNING {
echo "WARNING: $1" >&2
echo "$1" | systemd-cat -p warning -t "$(basename "$0" .sh)"
}
function ERROR {
echo "ERROR: $1" >&2
echo "$1" | systemd-cat -p err -t "$(basename "$0" .sh)"
}
###########################################################
if [[ -r /etc/default/BackupServerConfig ]]; then
source /etc/default/BackupServerConfig
fi
BACKUP_PATH=/var/backups
BACKUP_FILE="$(hostname -f).tar"
BACKUP_HOSTNAME=${BACKUP_HOSTNAME:-}
BACKUP_OBJ=${BACKUP_OBJ:-}
FTPHOST=${FTPHOST:-}
INFO "BackupServerConfig started..."
if [[ -n $BACKUP_HOSTNAME ]]; then
BACKUP_FILE="$BACKUP_HOSTNAME.tar"
fi
INSTALLEDPACKAGES=$(mktemp)
dpkg --get-selections > "$INSTALLEDPACKAGES"
cd /tmp/ || exit 1
tar -cPf "$BACKUP_FILE" /etc
tar -rPf "$BACKUP_FILE" /root/.bashrc
tar -rPf "$BACKUP_FILE" /root/.ssh
tar -rPf "$BACKUP_FILE" --transform "s|$INSTALLEDPACKAGES|/installed_packages.txt|" "$INSTALLEDPACKAGES"
if [[ -n $BACKUP_OBJ ]]; then
for BO in $BACKUP_OBJ; do
tar --exclude=".git" -rPf "$BACKUP_FILE" "$BO"
done
fi
gzip -9 -f "$BACKUP_FILE" && mv -f "$BACKUP_FILE.gz" $BACKUP_PATH
rm -f "$INSTALLEDPACKAGES"
if [[ -n "$FTPHOST" ]]; then
if [[ -z "$GPGKEY" ]]; then
ERROR "GPG key required for ftp server backup. Remote ftp backup aborted!"
exit 1
fi
if [[ -z "$FTPDIR" ]]; then
ERROR "FTP subdirectory required for ftp server backup. Remote ftp backup aborted!"
exit 1
fi
TMP=$(gpg --list-keys --with-colons | grep "$GPGKEY")
if [[ -z "$TMP" ]]; then
ERROR "Public key for encryption of server configuration data not found. Remote ftp backup aborted!"
exit 1
fi
cd $BACKUP_PATH || exit 1
rm -f "$BACKUP_FILE.gz.gpg"
gpg --encrypt -r "$GPGKEY" --trusted-key "$GPGKEY" "$BACKUP_FILE.gz"
ftp -p -n "$FTPHOST" <<EOI
quote USER anonymous
quote PASS anonymous@anonymous.com
cd $FTPDIR
put "$BACKUP_FILE.gz.gpg"
quit
EOI
fi
INFO "BackupServerConfig successful"
exit 0