forked from URZ/admin-tools
Initial commit
This commit is contained in:
98
BackupServerConfig.sh
Executable file
98
BackupServerConfig.sh
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user