Files
ProxLedger/scripts/feldtest-erheben.sh
T
florian.wildeandClaude Opus 5 7728fcb565 feat(cluster): Cluster-Knoten ohne Agent erkennen (#022, #018)
Feldtest auf zwei echten Proxmox-VE-9.2-Hosts (#018): Installation, Timer,
Zwischenspeicher und Nachsenden laufen wie vorgesehen. `pvesubscription get`
kennt kein JSON, ohne Subscription fehlen fast alle Felder, `pveversion`
enthaelt den Kernel doppelt - alles im Agent beruecksichtigt.

Dabei zeigte sich: in Proxmox hat jeder Knoten eine eigene Subscription.
Der Agent meldet darum die Cluster-Mitglieder aus `pvecm nodes`, und eine
elfte Warnregel meldet Knoten, von denen sich kein Agent meldet (#022).

Ausserdem behoben: die Bilder des Handbuchs zeigten allesamt die
Anmeldeseite, weil Firefox eine selbst erzeugte Cookie-Datei stillschweigend
verwirft. Das Skript nutzt jetzt einen lokalen Vermittler und bricht ab,
wenn alle Aufnahmen gleich gross sind.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 18:05:08 +02:00

92 lines
2.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Sammelt auf einem Proxmox-Host alle Ausgaben, die der ProxLedger-Agent auswertet.
# Es wird nichts installiert und nichts verändert – das Skript liest nur.
#
# bash feldtest-erheben.sh # Ausgabe anonymisiert (Empfehlung zum Weitergeben)
# bash feldtest-erheben.sh --vollstaendig # ohne Anonymisierung, nur für den eigenen Gebrauch
#
# Ergebnis: eine Textdatei im aktuellen Verzeichnis, die weitergegeben werden kann.
set -o nounset
set -o pipefail
ANONYM="ja"
[ "${1:-}" = "--vollstaendig" ] && ANONYM="nein"
AUSGABE="proxledger-feldtest-$(hostname -s 2>/dev/null || echo host)-$(date +%Y%m%d-%H%M%S).txt"
# Ersetzt Subscription-Keys, Server-IDs, Hostnamen und IP-Adressen durch Platzhalter.
anonymisieren() {
if [ "$ANONYM" = "nein" ]; then
cat
return
fi
sed -E \
-e 's/(pve[0-9]?[a-z]|pbs[a-z]|pmg[a-z])-[A-Za-z0-9]+/\1-KEY-ANONYMISIERT/g' \
-e 's/([Ss]erverid:[[:space:]]*)[A-Za-z0-9]+/\1SERVERID-ANONYMISIERT/g' \
-e 's/\b([0-9]{1,3}\.){3}[0-9]{1,3}\b/IP-ANONYMISIERT/g' \
-e "s/$(hostname -s 2>/dev/null || echo unbekannt)/HOSTNAME-ANONYMISIERT/g"
}
abschnitt() {
printf '\n===== %s =====\n' "$1"
}
# Führt einen Befehl aus und hält fest, ob es ihn überhaupt gibt.
zeige() {
local befehl="$1"
abschnitt "$befehl"
if ! command -v "${befehl%% *}" >/dev/null 2>&1; then
printf '(Befehl nicht vorhanden)\n'
return
fi
eval "$befehl" 2>&1 | head -n 40
printf '[Rückgabewert: %s]\n' "$?"
}
{
printf 'ProxLedger – Erhebung für den Feldtest\n'
printf 'Erstellt am: %s\n' "$(date -Is)"
printf 'Anonymisiert: %s\n' "$ANONYM"
abschnitt "Betriebssystem"
cat /etc/os-release 2>/dev/null | head -n 5
printf 'Kernel: %s\n' "$(uname -r)"
abschnitt "Erkanntes Produkt"
for befehl in pvesubscription proxmox-backup-manager pmgsubscription; do
if command -v "$befehl" >/dev/null 2>&1; then
printf 'gefunden: %s\n' "$befehl"
fi
done
zeige "pvesubscription get"
zeige "proxmox-backup-manager subscription get"
zeige "pmgsubscription get"
# Einige Fassungen können JSON – das wäre die stabilere Quelle.
zeige "pvesubscription get --output-format json"
zeige "proxmox-backup-manager subscription get --output-format json"
zeige "pveversion"
zeige "proxmox-backup-manager version"
zeige "pmgversion"
zeige "lscpu | grep -E 'Socket|Model name|Sockel|Modellname'"
zeige "ip -o addr show scope global"
zeige "hostname -f"
zeige "pvecm status"
zeige "apt list --upgradable 2>/dev/null | grep -c 'upgradable from'"
abschnitt "Vorhandene Werkzeuge"
for befehl in curl systemctl logger jq awk sed; do
printf '%-12s %s\n' "$befehl" "$(command -v "$befehl" || echo 'FEHLT')"
done
abschnitt "Ende"
} 2>&1 | anonymisieren > "$AUSGABE"
printf 'Fertig: %s\n' "$AUSGABE"
printf 'Anonymisiert: %s (mit --vollstaendig ohne Anonymisierung)\n' "$ANONYM"
printf 'Bitte vor dem Weitergeben kurz durchsehen.\n'