homelab: Snapshot der Arcane-VM nach grüner Prüfung gleich wieder löschen; doku: VM 106 freigegeben, feste IP .31, AdGuard-Aufbewahrung 14 Tage

Die VM schreibt laufend (Docker, Rippy; Thin-Platte zu 99,9 % belegt) – ein
stehender Snapshot wüchse im Thin-Pool bis zum nächsten Update mit. Bei den
Containern bleibt der letzte Snapshot wie bisher als Rückweg stehen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-25 10:50:04 +02:00
co-authored by Claude Opus 5.5
parent 5fcac05642
commit 9867affc5a
5 changed files with 32 additions and 21 deletions
+8 -2
View File
@@ -14,8 +14,8 @@ Ablauf für einen Gast:
5. Rot → zurück auf den Snapshot bzw. die Sicherung zurückspielen → dringende Meldung.
Grün → ältere Snapshots bzw. Sicherungen des Orchestrators für diesen Gast weg → Meldung „eingespielt“.
Docker-Images (Arcane, VM 106) gehen über Arcanes eigenen Updater: bis zum Schalter „echt“ nur als Probelauf,
danach genauso mit Snapshot vorher und Rückweg bei Rot — sofern die VM freigegeben ist (Etikett watcher), sonst
ohne; Rückfrage und Update-Liste sagen es.
danach genauso mit Snapshot vorher und Rückweg bei Rot — sofern die VM freigegeben ist (Etikett watcher, seit
25.09.), sonst ohne; Rückfrage und Update-Liste sagen es. Nach grüner Prüfung geht dieser Snapshot gleich wieder weg.
Jeder Lauf steht in <Datenordner>/homelab-laeufe.json und im strukturierten Update-Verlauf. Pro Ziel
läuft höchstens ein Lauf; startet dieser Teil neu, gilt ein offener Lauf als unterbrochen.
@@ -293,6 +293,12 @@ def _docker_lauf(lauf: dict, basis: str, gast: dict) -> None:
if not fehler:
if rueckweg:
_aufraeumen(lauf, gast["vmid"], rueckweg)
# Anders als bei den Containern bleibt auch dieser nicht stehen: Die VM schreibt laufend (Docker, Rippy),
# ein Snapshot wüchse im Thin-Pool bis zum nächsten Update mit. Sein Zweck war der Weg zurück bei Rot.
try:
_auftrag(lauf, "snapshot_loeschen", {"vmid": gast["vmid"], "snapshot": rueckweg[1]}, ZEITLIMIT_KURZ_S)
except RuntimeError:
lauf["schritte"].append(f"Snapshot {rueckweg[1]} blieb stehen.")
_ende(lauf, "eingespielt", f"Arcane: {gesamt['updated']} Container aktualisiert, Prüfung grün.")
return
if rueckweg:
+2 -1
View File
@@ -315,9 +315,10 @@ def test_docker_echt_mit_snapshot_nur_mit_etikett(ausfuehrer, monkeypatch):
text, dringend = meldungen[-1]
assert dringend and "zurück auf den Snapshot mc2-20260924-190000" in text and "1 Container" in text
# Grün: Der Snapshot hat seinen Zweck erfüllt und geht gleich wieder weg (die VM schreibt laufend).
ergebnis["local"]["failed"] = 0
lauf = _auf_ende(updates.starten("vm-106", "docker")["lauf"])
assert lauf["ergebnis"] == "eingespielt" and protokoll[2:] == ["snapshot"]
assert lauf["ergebnis"] == "eingespielt" and protokoll[2:] == ["snapshot", "snapshot_loeschen"]
assert meldungen[-1] == ("Arcane: 1 Container aktualisiert, Prüfung grün.", False)
+5 -2
View File
@@ -328,8 +328,11 @@ flowchart LR
`MC_ARCANE_ECHT`, gewinnt sie (`1` = echt). Die Arcane-VM braucht dafür kein Etikett, weil der Ausführer nicht
beteiligt ist — nur für den Rückweg: Mit Etikett `watcher` legt der Ausführer vor einem echten Docker-Update einen
Snapshot der VM an (`qm snapshot`), und ist die Prüfung danach rot (ein Container scheiterte, oder Arcane antwortet
nach 3 Minuten noch nicht), geht es darauf zurück. Ohne Etikett gibt es keinen Rückweg; Update-Liste, Rückfrage und
der Plan von „Alle aktualisieren“ sagen das (`rueckweg_art` = `keiner` für jeden Gast ohne Freigabe).
nach 3 Minuten noch nicht), geht es darauf zurück. Ist sie grün, wird der Snapshot gleich wieder gelöscht, anders
als bei den Containern: Die VM schreibt laufend (Docker, Rippy; ihre Thin-Platte war am 25.09. zu 99,9 % belegt),
ein stehender Snapshot wüchse im Pool mit. Ohne Etikett gibt es keinen Rückweg; Update-Liste, Rückfrage und der
Plan von „Alle aktualisieren“ sagen das (`rueckweg_art` = `keiner` für jeden Gast ohne Freigabe). VM 106 trägt
`watcher` seit 25.09. (User-Ja).
- **Wächter** in der Rolle `homelab`: Platte, Partner (die KI-Box), Ausführer (kein Bericht seit 30 min = rot),
jede Weboberfläche der freigegebenen Gäste (außer mitten in ihrem Update-Lauf; das Ergebnis meldet der Lauf), die
Platten der laufenden Container (ab 80 % gelb, ab 90 % rot — ext4 hält 5 % für root zurück; der Ausführer schickt `platte` mit), das
+3 -1
View File
@@ -220,7 +220,9 @@ Jeder Schritt braucht das OK des Users (Container anlegen, Ausführer als root a
den Container). Alles läuft am PC in Git-Bash, im Repo; SSH-Zugang zu `pve` (Schlüssel `id_lucy_infra`).
1. `bash deploy/homelab/container-anlegen.sh` — unprivilegierter Debian-13-Container (nächste freie ID, 1 Kern,
1 GB RAM, 4 GB, DHCP, Autostart, Etikett `mc2`), SSH-Schlüssel wie bei allen Gästen. Gibt die IP aus.
1 GB RAM, 4 GB, DHCP, Autostart, Etikett `mc2`), SSH-Schlüssel wie bei allen Gästen. Gibt die IP aus. Diese
Adresse danach in der Fritzbox fest zuordnen (Container 107: 192.168.178.31, fest seit 25.09.): Partner-Adresse
der Box, Ausführer-Konfiguration und Deploy-Schritt 8 hängen an ihr.
2. `bash deploy/homelab/ausrollen.sh <ip>` — Code von HEAD in `/opt/mc2`, `einrichten.sh` (Nutzer `mc2`, Python-
Umgebung, Units `mc2-homelab`, `mc2-homelab-steward`, `mc2-homelab-morgenmeldung.timer`). Auch jedes spätere
Update des Homelab-Teils geht so (erst Prüftor und Probelauf auf der Box).
+14 -15
View File
@@ -1,6 +1,6 @@
# Offene Fäden — die eine Liste
_Stand 24.09.2026 abends. Neues hier rein, Erledigtes raus (die Git-Historie behält es). Entschiedenes steht in
_Stand 25.09.2026 vormittags. Neues hier rein, Erledigtes raus (die Git-Historie behält es). Entschiedenes steht in
[VERDIKTE.md](VERDIKTE.md), nicht hier. Die Liste bis 04.09.2026, samt den Lucy-Fäden, liegt im Archiv:
[2026-09-04-offene-faeden-alt.md](../archiv/2026-09-04-offene-faeden-alt.md)._
@@ -18,7 +18,7 @@ zwei Minuten, Meldung auf Telegram, der Snapshot bleibt als Rückweg liegen. Dan
| 1 · Box-Wart 1.0 | Ballast raus, Box-Diät, riskante Stellen, Deploy mit Prüftor und Rückweg, Sonntags-Timer, Oberfläche, Doku | erledigt 24.09. |
| 2 · Kern und zweite Instanz | Rollen `box`/`homelab`, Partner-Aufsicht, Telegram-Zweitweg, Aufträge als systemd-Einheiten, Ziel-Modell mit Box-Adapter, strukturierter Update-Verlauf, Oberfläche „Homelab Orchestrator“ | erledigt 24.09. |
| 3 · Homelab sehen | Container 107, Ausführer liefert den Bericht (kein Proxmox-Schlüssel), Inventar aller Gäste mit App-Version, Paketen, Webprüfung, Rückweg; Seite „Homelab“ = alle Geräte | erledigt 24.09. |
| 4 · Jetzt updaten | Snapshot → Update → Prüfung → bei Rot zurück + Meldung; Host-Pakete mit Warnung, Neustart getrennt; Docker über Arcane als Probelauf; frisch geänderte Update-Skripte erst nach 48 h Wartezeit; PBS (kein Snapshot wegen Bind-Mount) mit Sicherung per vzdump auf `local`, bei Rot zurückgespielt | eingerichtet 24.09.; erster Lauf grün (Gitea), Rückweg bei Rot bisher nur im Test; Wartezeit und PBS-Sicherung gebaut 24.09., die Sicherung greift erst mit dem neu eingespielten Ausführer |
| 4 · Jetzt updaten | Snapshot → Update → Prüfung → bei Rot zurück + Meldung; Host-Pakete mit Warnung, Neustart getrennt; Docker über Arcane (seit 25.09. echt, vorher ein Snapshot der VM); „Alle aktualisieren“ nacheinander; frisch geänderte Update-Skripte erst nach 48 h Wartezeit; PBS (kein Snapshot wegen Bind-Mount) mit Sicherung per vzdump auf `local`, bei Rot zurückgespielt | eingerichtet 24.09.; erster Lauf grün (Gitea), Rückweg bei Rot bisher nur im Test; Wartezeit und PBS-Sicherung gebaut 24.09., die Sicherung greift erst mit dem neu eingespielten Ausführer |
| 5 · Android-App | Push, Cockpit, Updates freigeben, Lucy per Sprache mit Live-Modus | offen, eigenes Projekt |
Technik: [ARCHITEKTUR.md](../ARCHITEKTUR.md), Abschnitt „Der Homelab-Teil“; Einrichtung und Betrieb:
@@ -26,19 +26,18 @@ Technik: [ARCHITEKTUR.md](../ARCHITEKTUR.md), Abschnitt „Der Homelab-Teil“;
## Offene Einzelpunkte (Homelab)
0. **AdGuard (Container 100): Aufbewahrung des Abfrageprotokolls einstellen (User).** Am 24.09. war die 2-GB-Platte
voll (Abfrageprotokoll). Mit User-Ja wurde die alte Datei `querylog.json.1` vom 09.08. (539 MB) gepackt auf den
Proxmox-Host gelegt (`/root/mc2-archiv/adguard-querylog-bis-2026-08-09.json.zst`, 44 MB) und aus dem Container
genommen; jetzt 71 % belegt. Damit es nicht wieder vollläuft: in AdGuard unter Einstellungen → Allgemein →
Abfrageprotokoll die Aufbewahrung z. B. auf 30 Tage stellen. Volle Gastplatten meldet seit 24.09. der Wächter.
1. **Arcane-API-Schlüssel fehlt (User).** Ohne ihn zeigt die Arcane-Karte die Docker-Images als „unklar“. Seit 24.09.
in der Oberfläche eintragbar: in Arcane unter Einstellungen → API-Schlüssel anlegen, dann in der Oberfläche unter
Einstellungen (Karte Homelab) einfügen. Arcane prüft ihn vor dem Speichern; ein Neustart ist nicht nötig.
Docker-Updates bleiben Probelauf, bis der Schalter „Docker-Updates echt“ dort an ist.
2. **Feste IP für Container 107.** Er hat seine Adresse per DHCP (192.168.178.31); Partner-Adresse der Box,
Ausführer-Konfiguration und der Deploy-Schritt 8 hängen daran. In der Fritzbox die Adresse fest zuordnen.
3. **Die Arcane-VM (106) trägt kein Etikett.** Für Arcane und Docker braucht es keins (eigene Schnittstelle); für
Snapshots oder OS-Updates der VM über den Ausführer bräuchte sie `watcher` (heute nicht gebaut).
0. **AdGuard (Container 100): Aufbewahrung des Abfrageprotokolls auf 14 Tage (User, 25.09. angesagt).** Am 24.09. war
die 2-GB-Platte voll (Abfrageprotokoll, eingestellt: 90 Tage). Mit User-Ja wurde die alte Datei `querylog.json.1`
vom 09.08. (539 MB) gepackt auf den Proxmox-Host gelegt (`/root/mc2-archiv/adguard-querylog-bis-2026-08-09.json.zst`,
44 MB) und aus dem Container genommen. Seit dem Abend schreibt AdGuard wieder (25.09.: 485 MB seit 09.08., gut
10 MB am Tag, Platte 72 %). Weg in AdGuard: Einstellungen → Allgemeine Einstellungen → Konfiguration der
Protokolle → Rotation der Abfrageprotokolle → Benutzerdefiniert, 336 Stunden → Speichern. AdGuard behält die
laufende und die vorige Datei; die jetzige (ab 09.08.) wird beim ersten Rotieren zur vorigen und fällt 14 Tage
später weg. Danach bleiben rund 300 MB. Volle Gastplatten meldet seit 24.09. der Wächter.
Erledigt am 25.09.: Arcane-API-Schlüssel (vom User eingetragen, Docker-Updates echt), feste IP 192.168.178.31 für
Container 107 (Fritzbox, User), Etikett `watcher` für die Arcane-VM 106 (User-Ja; der Ausführer legt vor echten
Docker-Updates einen Snapshot an und geht bei Rot zurück). OS-Updates der VM über den Ausführer gibt es weiter nicht.
## Offene Einzelpunkte (Box-Wart)