miyagi-backup.sh hinzugefügt
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
|
||||
|
||||
if [[ "${1:-}" == "help" ]]; then
|
||||
echo "Verfügbare Funktionen:"
|
||||
declare -F | awk '{print " - " $3}'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
SCRIPT_NAME=$(basename "$0")
|
||||
LOGFILE="/var/log/${SCRIPT_NAME%.sh}.log"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOGFILE"
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 -c /path/to/config"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Argument parsing
|
||||
CONFIG_FILE=""
|
||||
while getopts "c:" opt; do
|
||||
case "$opt" in
|
||||
c) CONFIG_FILE="$OPTARG" ;;
|
||||
*) usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$CONFIG_FILE" || ! -f "$CONFIG_FILE" ]]; then
|
||||
log "ERROR: Configuration file is missing or invalid."
|
||||
usage
|
||||
fi
|
||||
|
||||
source "$CONFIG_FILE"
|
||||
|
||||
# Funktionen
|
||||
|
||||
write_zsync_config() {
|
||||
local conf_file="/etc/bashclub/$SOURCEHOST.conf"
|
||||
log "Writing zsync config to $conf_file"
|
||||
{
|
||||
echo "target=$ZFSTRGT"
|
||||
echo "source=root@$SOURCEHOST"
|
||||
echo "sshport=$SSHPORT"
|
||||
echo "tag=$ZPUSHTAG"
|
||||
echo "snapshot_filter=$ZPUSHFILTER"
|
||||
echo "min_keep=$ZPUSHMINKEEP"
|
||||
echo "zfs_auto_snapshot_keep=$ZPUSHKEEP"
|
||||
echo "zfs_auto_snapshot_label=$ZPUSHLABEL"
|
||||
echo "zfs_auto_snapshot_engine=internal"
|
||||
echo "checkzfs_disabled=0"
|
||||
echo "checkzfs_local=0"
|
||||
echo "checkzfs_prefix=miyagi-$SOURCEHOSTNAME-$(hostname)-$ZPUSHTAG"
|
||||
echo "checkzfs_max_age=1500,2000"
|
||||
echo "checkzfs_max_snapshot_count=180,200"
|
||||
echo "checkzfs_spool=1"
|
||||
echo "checkzfs_spool_maxage=90000"
|
||||
} > "$conf_file"
|
||||
}
|
||||
|
||||
run_zsync() {
|
||||
if [[ "$ZSYNC" != "no" ]]; then
|
||||
/usr/bin/bashclub-zsync -c "/etc/bashclub/$SOURCEHOST.conf"
|
||||
else
|
||||
log "Zsync is disabled"
|
||||
fi
|
||||
}
|
||||
|
||||
run_updates() {
|
||||
if [[ "$UPDATES" == "yes" ]]; then
|
||||
log "Running system updates..."
|
||||
apt update && apt dist-upgrade -y
|
||||
apt autopurge -y
|
||||
else
|
||||
log "No system updates configured"
|
||||
fi
|
||||
}
|
||||
|
||||
send_piggyback_data() {
|
||||
local fname="90000_miyagi-$SOURCEHOSTNAME-$(hostname)"
|
||||
log "Sending piggyback data to $SOURCEHOST..."
|
||||
echo "<<<<miyagi-$SOURCEHOSTNAME-$(hostname)>>>" > "$fname"
|
||||
/usr/bin/check_mk_agent >> "$fname"
|
||||
echo "<<<<>>>>" >> "$fname"
|
||||
scp "$fname" "$SOURCEHOST:/var/lib/check_mk_agent/spool/"
|
||||
}
|
||||
|
||||
run_pbs_backup() {
|
||||
log "Running PBS vzdump job..."
|
||||
ssh root@"$SOURCEHOST" vzdump --pbs-change-detection-mode metadata \
|
||||
--node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \
|
||||
--exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \
|
||||
--notes-template '{{guestname}}'
|
||||
|
||||
local status=$?
|
||||
if [[ $status -eq 0 ]]; then
|
||||
echo "0 DailyPBS - Daily Backup" > /tmp/cmk_tmp.out
|
||||
else
|
||||
echo "2 DailyPBS - Daily Backup FAILED" > /tmp/cmk_tmp.out
|
||||
fi
|
||||
( echo "<<<local>>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkpbs
|
||||
scp /tmp/90000_checkpbs root@"$SOURCEHOST":/var/lib/check_mk_agent/spool
|
||||
}
|
||||
|
||||
run_maintenance() {
|
||||
if [[ "$(date +%u)" == "$MAINTDAY" ]]; then
|
||||
log "Running maintenance tasks..."
|
||||
PRUNEJOB=$(ssh "$PBSHOST" proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4)
|
||||
ssh root@"$PBSHOST" proxmox-backup-manager prune-job run "$PRUNEJOB"
|
||||
ssh root@"$PBSHOST" proxmox-backup-manager garbage-collection start "$BACKUPSTOREPBS"
|
||||
else
|
||||
log "No maintenance today."
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
log "Starting Miyagi backup process..."
|
||||
|
||||
SOURCEHOSTNAME=$(ssh "$SOURCEHOST" hostname)
|
||||
|
||||
write_zsync_config
|
||||
run_zsync
|
||||
run_updates
|
||||
run_maintenance
|
||||
run_pbs_backup
|
||||
|
||||
if [[ "$SHUTDOWN" == "yes" ]]; then
|
||||
send_piggyback_data
|
||||
shutdown now
|
||||
elif [[ "$BACKUPSERVER" == "no" ]]; then
|
||||
log "No backup configured and no shutdown requested. Exiting."
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "" ]]; then
|
||||
main
|
||||
else
|
||||
"$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user