#!/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 --quiet --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 --quiet --encrypt -r "$GPGKEY" --trusted-key "$GPGKEY" "$BACKUP_FILE.gz" ftp -p -n "$FTPHOST" >/dev/null <