forked from URZ/admin-tools
99 lines
2.5 KiB
Bash
Executable File
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 --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 <<EOI
|
|
quote USER anonymous
|
|
quote PASS anonymous@anonymous.com
|
|
cd $FTPDIR
|
|
put "$BACKUP_FILE.gz.gpg"
|
|
quit
|
|
EOI
|
|
fi
|
|
|
|
INFO "BackupServerConfig successful"
|
|
|
|
exit 0
|