From 7eb712fae4c1bc005e786cfe50a18fa7d2bd5c75 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 2 Jul 2025 15:55:49 +0200 Subject: [PATCH] miyagi-backup.sh aktualisiert --- miyagi-backup.sh | 114 +++++++++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 44 deletions(-) diff --git a/miyagi-backup.sh b/miyagi-backup.sh index 4d85c22..0e2483b 100644 --- a/miyagi-backup.sh +++ b/miyagi-backup.sh @@ -46,7 +46,7 @@ fi # Konfigurationsprüfung # ========================== REQUIRED_VARS=( - SSHPORT + SOURCEPORT BACKUPSERVER ZSYNC MAINTDAY @@ -88,13 +88,13 @@ fi fi # Funktionen -remote_ssh() { - ssh -p "$SSHPORT" "$@" -} +#remote_ssh() { +# ssh -p "$SOURCEPORT" "$@" +#} -remote_scp() { - scp -P "$SSHPORT" "$@" -} +#remote_scp() { +# scp -P "$SOURCEPORT" "$@" +#} set_wol_g_enabled() { log "Pruefe, ob ethtool installiert ist..." @@ -145,7 +145,7 @@ write_zsync_config() { { echo "target=$ZFSTRGT" echo "source=root@$SOURCEHOST" - echo "sshport=$SSHPORT" + echo "sourceport=$SOURCEPORT" echo "tag=$ZPUSHTAG" echo "snapshot_filter=\"$ZPUSHFILTER\"" echo "min_keep=$ZPUSHMINKEEP" @@ -178,19 +178,11 @@ run_remote_updates() { fi } -run_remote_updates() { - if [[ "$UPDATES" == "yes" ]]; then - ssh "$PBSHOST" apt update && apt dist-upgrade -y - else - log "Remote updates disabled" - fi -} - send_piggyback_data() { # Falls SOURCEHOSTNAME leer ist, ueber SSH vom Zielhost ermitteln if [[ -z "${SOURCEHOSTNAME:-}" ]]; then log "SOURCEHOSTNAME is empty retrieving via SSH from $SOURCEHOST..." - SOURCEHOSTNAME=$(ssh -p "$SSHPORT" "$SOURCEHOST" hostname) + SOURCEHOSTNAME=$(ssh -p "$SOURCEPORT" "$SOURCEHOST" hostname) log "Detected SOURCEHOSTNAME: $SOURCEHOSTNAME" fi @@ -206,7 +198,7 @@ send_piggyback_data() { echo "<<<<>>>>" } > "$filename" - if scp -P "$SSHPORT" "$filename" "$SOURCEHOST:/var/lib/check_mk_agent/spool/"; then + if scp -P "$SOURCEPORT" "$filename" "$SOURCEHOST:/var/lib/check_mk_agent/spool/"; then log "Piggyback data successfully sent to $SOURCEHOST" else log "ERROR: Failed to send piggyback data to $SOURCEHOST" @@ -215,16 +207,16 @@ send_piggyback_data() { run_pbs_backup() { if [[ -z "${SOURCEHOSTNAME:-}" ]]; then - SOURCEHOSTNAME=$(ssh "$SOURCEHOST" hostname) + SOURCEHOSTNAME=$(ssh -p "$SOURCEPORT" root@"$SOURCEHOST" hostname) fi log "Running PBS vzdump job..." # PBS-Storage ggf. aktivieren log "Checking if PBS storage '$BACKUPSTORE' is enabled on $SOURCEHOST..." - if ssh root@"$SOURCEHOST" "pvesm status | grep -w '$BACKUPSTORE' | grep -q 'disabled'"; then - log "PBS storage '$BACKUPSTORE' is disabled. Attempting to enable...sleep 10 Sekunden" - ssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 0 && sleep 10" + if ssh -p "$SOURCEPORT" root@"$SOURCEHOST" "pvesm status | grep -w '$BACKUPSTORE' | grep -q 'disabled'"; then + log "PBS storage '$BACKUPSTORE' is disabled. Attempting to enable... sleep 10 Sekunden" + ssh -p "$SOURCEPORT" root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 0 && sleep 10" pbs_enabled_by_script=true else log "PBS storage '$BACKUPSTORE' is already enabled." @@ -234,7 +226,7 @@ run_pbs_backup() { vzdump_success=false # Hauptversuch mit --pbs-change-detection-mode - if ssh root@"$SOURCEHOST" vzdump --pbs-change-detection-mode metadata \ + if ssh -p "$SOURCEPORT" root@"$SOURCEHOST" vzdump --pbs-change-detection-mode metadata \ --node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \ --exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \ --notes-template '{{guestname}}'; then @@ -245,7 +237,7 @@ run_pbs_backup() { else log "Fallback: vzdump with change-detection-mode failed, trying without it..." - if ssh root@"$SOURCEHOST" vzdump \ + if ssh -p "$SOURCEPORT" root@"$SOURCEHOST" vzdump \ --node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \ --exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \ --notes-template '{{guestname}}'; then @@ -261,7 +253,7 @@ run_pbs_backup() { # PBS-Storage wieder deaktivieren, wenn zuvor aktiviert und erfolgreich if [[ "$vzdump_success" == true && "$pbs_enabled_by_script" == true ]]; then log "Disabling PBS storage '$BACKUPSTORE' again on $SOURCEHOST..." - ssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 1" + ssh -p "$SOURCEPORT" root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 1" fi # Monitoring-Output für Checkmk @@ -272,10 +264,9 @@ run_pbs_backup() { fi ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkpbs - scp /tmp/90000_checkpbs root@"$SOURCEHOST":/var/lib/check_mk_agent/spool || log "Fehler beim SCP des Monitoring-Outputs" + scp -P "$SOURCEPORT" /tmp/90000_checkpbs root@"$SOURCEHOST":/var/lib/check_mk_agent/spool || log "Fehler beim SCP des Monitoring-Outputs" } - run_maintenance() { if [[ "$(date +%u)" == "$MAINTDAY" ]]; then log "Running maintenance..." @@ -289,7 +280,7 @@ run_maintenance() { } run_scrub_stop_src() { - ssh -p "$SSHPORT" root@"$SOURCEHOST" 'for pool in $(zpool list -H -o name); do + ssh -p "$SOURCEPORT" root@"$SOURCEHOST" 'for pool in $(zpool list -H -o name); do echo "Stoppe Scrub auf Pool: $pool" if zpool status "$pool" | grep -q "scrub in progress"; then if zpool scrub -s "$pool"; then @@ -363,29 +354,64 @@ send_piggyback_data_external() { } send_checkzfs_output_external() { - if [[ "${ECHECKZFS,,}" != "yes" ]]; then - log "Externer check_zfs-Export deaktiviert." + if [[ "${ECHECKZFS,,}" == "yes" ]]; then + log "ECHECKZFS aktiviert – beginne Monitoring-Ausgabe." + else + log "ECHECKZFS ist deaktiviert – überspringe Monitoring-Ausgabe." return fi - if [[ -z "$ECHECKZFS_HOST" || -z "$ECHECKZFS_PORT" ]]; then - log "ECHECKZFS_HOST oder ECHECKZFS_PORT nicht gesetzt – Abbruch." - return 1 + local checkzfs_cmd + checkzfs_cmd=$(which checkzfs) + + if [[ -z "$checkzfs_cmd" ]]; then + log "check_zfs ist nicht installiert – Abbruch." + return fi - local checkfile="/tmp/90000_checkzfs_external" + local config_file="/etc/bashclub/${SOURCEHOST}.conf" - log "Führe check_zfs aus und schreibe Output nach $checkfile" - /usr/lib/nagios/plugins/check_zfs > "$checkfile" 2>&1 || log "check_zfs Befehl fehlgeschlagen" + if [[ ! -f "$config_file" ]]; then + log "Konfigurationsdatei $config_file nicht gefunden – check_zfs-Ausführung abgebrochen." + return + fi - log "Sende check_zfs-Daten an $ECHECKZFS_HOST..." - if scp -P "$ECHECKZFS_PORT" "$checkfile" "$ECHECKZFS_HOST:/var/lib/check_mk_agent/spool/"; then - log "Check_zfs-Daten erfolgreich an $ECHECKZFS_HOST gesendet." + # Konfiguration einlesen + log "Lese Konfiguration aus $config_file..." + source "$config_file" + + # Prüfung auf deaktiviertes Monitoring in der Konfig + if [[ "${checkzfs_disabled:-0}" -eq 1 ]]; then + log "check_zfs Monitoring laut Konfiguration deaktiviert – überspringe." + return + fi + + local spool_tmp="/tmp/${checkzfs_spool_maxage}_${checkzfs_prefix}" + local remote_host="$ECHECKZFS_HOST" + local remote_port="$ECHECKZFS_PORT" + + echo "<<>>" > "$spool_tmp" + + log "Generiere check_zfs Monitoring-Ausgabe mit Prefix $checkzfs_prefix..." + + $checkzfs_cmd --source "$source:$soru" \ + --output checkmk \ + --threshold "$checkzfs_max_age" \ + --maxsnapshots "$checkzfs_max_snapshot_count" \ + --prefix "$checkzfs_prefix" \ + --replicafilter "^${target}" \ + --filter "$snapshot_filter" >> "$spool_tmp" + + if [[ -s "$spool_tmp" ]]; then + log "Übertrage Spool-Datei an $remote_host über Port $remote_port..." + scp -P "$remote_port" "$spool_tmp" root@"$remote_host":/var/lib/check_mk_agent/spool/ && \ + log "Spool-Datei erfolgreich übertragen." || \ + log "Fehler beim Übertragen der Spool-Datei." + rm -f "$spool_tmp" else - log "Fehler beim Senden der Check_zfs-Daten an $ECHECKZFS_HOST" + log "check_zfs-Ausgabe war leer – keine Übertragung erfolgt." + rm -f "$spool_tmp" fi - - rm -f "$checkfile" } @@ -395,8 +421,8 @@ main() { log "Starting full backup routine..." log "Versuche Hostname von $SOURCEHOST via SSH (Port $SOURCEPORT) abzurufen..." - if ! SOURCEHOSTNAME=$(ssh -p "$SSHPORT" -o ConnectTimeout=5 -o BatchMode=yes "$SOURCEHOST" hostname 2>/dev/null); then - log "Error: Hostname von $SOURCEHOST konnte nicht abgerufen werden | Abbruch." + if ! SOURCEHOSTNAME=$(ssh -p "$SOURCEPORT" -o ConnectTimeout=5 -o BatchMode=yes "$SOURCEHOST" hostname 2>/dev/null); then + log "Error: Hostname von $SOURCEHOST konnte nicht abgerufen werden – Abbruch." exit 1 fi log "Hostname von $SOURCEHOST: $SOURCEHOSTNAME"