doku: Sicherung (PBS als zweite Schicht, Einschalten), Probe-Wiederherstellung, Waechter, offene Faeden

- BETRIEB.md: PBS-Sicherung (was, wohin, warum seit 21.08. aus, Zugang nur auf der Box) mit
  Anleitung zum Einschalten samt Probelauf; neuer Abschnitt Probe-Wiederherstellung (Takt,
  Pruefungen, Ergebnisdatei, Meldung); Waechter-Tabelle und Hirn-Pruefung; Betreff [Sicherung].
- OFFENE-FAEDEN.md: erledigt und raus: ungepinnte Abhaengigkeiten, Hirn-Pruefung, synchrone
  Radar-Suche und Laden ohne Ergebnis, Kleinkram im Code. Neu offen: PBS einschalten (Lead).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 20:42:06 +02:00
co-authored by Claude Opus 5.5
parent 3f05263b63
commit 43c058d7cc
2 changed files with 52 additions and 11 deletions
+49 -2
View File
@@ -50,6 +50,7 @@ sudo journalctl -u llama-swap -n 100 # Motor (System-Dienst)
| `[Box wieder ok]` | Wächter | ein gemeldeter roter Hinweis ist erledigt | | `[Box wieder ok]` | Wächter | ein gemeldeter roter Hinweis ist erledigt |
| `[Homelab-Problem]` / `[Homelab wieder ok]` | Wächter der Homelab-Instanz | wie oben, sobald diese Instanz läuft | | `[Homelab-Problem]` / `[Homelab wieder ok]` | Wächter der Homelab-Instanz | wie oben, sobald diese Instanz läuft |
| `[Modell-Radar]` | `backend/radar_lauf.py` | ein Kandidat hat den Nachttest bestanden | | `[Modell-Radar]` | `backend/radar_lauf.py` | ein Kandidat hat den Nachttest bestanden |
| `[Sicherung]` | `backend/services/probe_wiederherstellung.py` | die monatliche Probe-Wiederherstellung war rot (normale Dringlichkeit) |
| `[Stack-Radar]` | `jobs/stack-radar.sh` | Samstagsbericht | | `[Stack-Radar]` | `jobs/stack-radar.sh` | Samstagsbericht |
| `[Morgenmeldung]` | `morgenmeldung.sh` | Sammelmeldung der Nacht, 07:00 | | `[Morgenmeldung]` | `morgenmeldung.sh` | Sammelmeldung der Nacht, 07:00 |
| `[Alarm] Deploy` | `deploy.sh` | Deploy gescheitert, der alte Stand läuft wieder (dringend) | | `[Alarm] Deploy` | `deploy.sh` | Deploy gescheitert, der alte Stand läuft wieder (dringend) |
@@ -70,6 +71,7 @@ soll kein Alarm sein).
| Platte (`MC_DATEN_DIR`, auf der Box `/srv/models`) | ab 90 % | ab 80 % | | Platte (`MC_DATEN_DIR`, auf der Box `/srv/models`) | ab 90 % | ab 80 % |
| Festgehaltene Updates | – | jeder Pin | | Festgehaltene Updates | – | jeder Pin |
| Partner-Instanz (nur mit `MC_PARTNER_URL`) | „<Name> antwortet nicht" | – | | Partner-Instanz (nur mit `MC_PARTNER_URL`) | „<Name> antwortet nicht" | – |
| Sicherung (seit 24.09.) | – | `pbs-backup` scheitert; Probe-Wiederherstellung rot, älter als 40 Tage oder noch nie gelaufen (sobald ihr Timer eingerichtet ist) |
| Abgestürzte Prüfung | – | „Eine Prüfung des Wächters lief nicht" | | Abgestürzte Prüfung | – | „Eine Prüfung des Wächters lief nicht" |
In der Rolle `homelab` prüft der Wächter bisher nur Platte und Partner und meldet mit „[Homelab-Problem]". In der Rolle `homelab` prüft der Wächter bisher nur Platte und Partner und meldet mit „[Homelab-Problem]".
@@ -87,6 +89,9 @@ In der Rolle `homelab` prüft der Wächter bisher nur Platte und Partner und mel
erscheint der Hinweis erneut). erscheint der Hinweis erneut).
- Der Wächter ist der einzige Schreiber von `/srv/models/mc2-waechter.json`. Ist sein letzter Takt älter als - Der Wächter ist der einzige Schreiber von `/srv/models/mc2-waechter.json`. Ist sein letzter Takt älter als
5 Minuten, zeigt die Startseite „Wächter schweigt". 5 Minuten, zeigt die Startseite „Wächter schweigt".
- **Hirn (seit 24.09.):** Geprüft wird gezielt das Modell mit der Rolle `hermes` und sein Zustand in llama-swap
(`/running`), nicht mehr „irgendein Modell läuft". Lädt es gerade (`starting`), ist das kein Befund — höchstens
10 Minuten lang (`MC_WAECHTER_HIRN_LADEN_S`), danach heißt der Hinweis „Lucys Hirn lädt nicht fertig".
## Dienste schlafen legen und wecken ## Dienste schlafen legen und wecken
@@ -190,8 +195,50 @@ Prüfen: `curl http://<ip>:9001/api/homelab/ziele` (nach etwa einer Minute stehe
die Liste der Modelldateien. die Liste der Modelldateien.
- Eine Sicherung ist seit 24.09. rund 12 MB groß. - Eine Sicherung ist seit 24.09. rund 12 MB groß.
- **Nicht enthalten:** Modelle (neu ladbar), Code (Git), venvs, `~/.ssh` (auch nicht der Spiegel-Schlüssel). - **Nicht enthalten:** Modelle (neu ladbar), Code (Git), venvs, `~/.ssh` (auch nicht der Spiegel-Schlüssel).
- **Weitere Schichten:** Die Sicherung der Box nach PBS (`pbs-backup.timer`) ist seit 21.08. aus. PBS sichert die - **Zweite Schicht: PBS** (`pbs-backup.timer`, täglich 03:50; Units und Skript seit 24.09. im Repo):
Proxmox-Container, das QNAP macht Snapshots; beides läuft auf den anderen Geräten und ist hier nicht geprüft. `deploy/pbs-backup.sh` sichert `~/.hermes` ganz (auch Sitzungen und Protokolle, die der Tarball weglässt),
`~/wissens-vault` (optional) und `/etc/llama-swap` als pxar-Archive auf den Proxmox Backup Server
(`192.168.178.156:8007`, Container 105, Datastore `qnap` = NFS-Freigabe auf dem QNAP, Backup-ID `aibox`). Der PBS
dedupliziert (ein Lauf dauert inkrementell rund 30 s) und hebt 7 Tage, 4 Wochen und 3 Monate auf (Prune-Job auf dem
PBS). Zugang `~/.config/pbs-backup/env` (Benutzer `aibox@pbs`, Rolle DatastoreBackup, Rechte 600) und der Client
`~/bin/proxmox-backup-client` liegen nur auf der Box, nie im Repo. Die Sicherung lief vom 09.07. bis 20.08. täglich
grün; am 21.08. brach sie ab (ihr erster Quellordner `/srv/models/mem0`, das abgelöste Gedächtnis, fehlte) und wurde
im KISS-Umbau abgeschaltet. Das neue Skript kennt mem0 nicht mehr. `deploy.sh` spielt die Units aus, schaltet sie
aber weder ein noch aus. Scheitert ein Lauf, zeigt der Wächter gelb.
- **Außerdem:** Der PBS sichert die Proxmox-Container, das QNAP macht Snapshots; beides läuft auf den anderen Geräten
und ist hier nicht geprüft.
**PBS-Sicherung einschalten** (einmalig nach dem Deploy, der die neuen Units ausspielt):
```bash
export XDG_RUNTIME_DIR=/run/user/$(id -u)
systemctl --user cat pbs-backup.service | grep ExecStart # muss auf deploy/pbs-backup.sh zeigen
systemctl --user start pbs-backup.service # Probelauf; kehrt nach dem Lauf zurück (~30 s)
journalctl --user -u pbs-backup.service -n 20 --no-pager # erwartet: „Duration: …“ und „End Time: …“, kein „Error“
systemctl --user enable --now pbs-backup.timer # holt beim ersten Start den seit 21.08. verpassten Lauf nach
systemctl --user list-timers pbs-backup.timer # nächster Lauf 03:50
```
Ausschalten: `systemctl --user disable --now pbs-backup.timer`. Die alte Fassung `~/bin/pbs-backup.sh` wird danach
nicht mehr gebraucht; der Client daneben schon.
## Probe-Wiederherstellung (monatlich, seit 24.09.)
- **Wann:** `mc2-probe-wiederherstellung.timer`, am ersten Montag im Monat um 05:15 — nie sonntags (Updates ab 04:30),
lange nach der Sicherung um 03:30. `Persistent=true` holt einen verpassten Lauf nach. Von Hand:
`systemctl --user start mc2-probe-wiederherstellung.service` oder Knopf „Jetzt prüfen" am Hinweis.
- **Was:** `backend/services/probe_wiederherstellung.py` packt die jüngste Sicherung aus `/srv/models/mc2-backups` in
einen eigenen Tmp-Ordner `/var/tmp/mc2-probe-*` aus, prüft und löscht ihn wieder. Lebende Dateien fasst sie nie
an. `.env` und die Token-Dateien packt sie nicht aus, sie prüft nur, dass sie in der Sicherung stehen.
- **Geprüft:** Die jüngste Sicherung ist höchstens 48 Stunden alt und lässt sich vollständig lesen. Lucys Gedächtnis
(`memories/`) und `SOUL.md` sind da und stimmen mit dem lebenden Stand überein, soweit er vor der Sicherung schon so
dastand. Skills, Cron-Skripte und Hermes-Cron-Jobs sind da, `config.yaml` ist lesbar, `.env` vorhanden, die
llama-swap-Config hat Modelle, jede `mc2-*.json` des Box-Wart-Zustands ist lesbar, die systemd-Units samt
llama-swap-Drop-ins sind drin.
- **Ergebnis:** `/srv/models/mc2-probe-wiederherstellung.json` (Zeit, `gruen`/`rot`, Sicherung, Geprüftes, Fehler)
und `journalctl --user -u mc2-probe-wiederherstellung`. Bei Rot: Meldung „[Sicherung]" in normaler Dringlichkeit
(nachts in die Morgenmeldung) und ein gelber Hinweis des Wächters. Gelb auch, wenn die letzte Probe älter als
40 Tage ist.
## Zurückspielen ## Zurückspielen
+3 -9
View File
@@ -43,15 +43,9 @@ Technik: [ARCHITEKTUR.md](../ARCHITEKTUR.md), Abschnitt „Der Homelab-Teil“;
und `restore.sh` sichern es samt Kopie `desktop-gateway-token`. Entfernen ist Security-Config. und `restore.sh` sichern es samt Kopie `desktop-gateway-token`. Entfernen ist Security-Config.
2. **Units nur auf der Box:** `hermes-builtin-ui.service` samt Drop-ins und die llama-swap-Drop-ins (darunter 2. **Units nur auf der Box:** `hermes-builtin-ui.service` samt Drop-ins und die llama-swap-Drop-ins (darunter
`warmset.conf`) liegen nicht im Repo; seit 24.09. stehen sie als Kopie in jeder Sicherung. `warmset.conf`) liegen nicht im Repo; seit 24.09. stehen sie als Kopie in jeder Sicherung.
3. **Ungepinnte Abhängigkeiten:** `backend/requirements.txt` nur mit `>=`, jeder Deploy zieht die neueste Version. 3. **PBS-Sicherung einschalten:** Units und Skript liegen seit 24.09. im Repo (`deploy/pbs-backup.*`), Zugang und
Was nachweislich zusammen lief, steht in `known-good/` jeder Sicherung. Client sind auf der Box, der PBS ist erreichbar. Nach dem Deploy einmal von Hand einschalten
4. **Der Wächter hält das Hirn für bereit, sobald irgendein Modell läuft** (`pruefe_kern()`). Ein abgestürztes Hirn ([BETRIEB.md](../BETRIEB.md), Sicherung); danach die Zeile vom 21.08. in [VERDIKTE.md](VERDIKTE.md) nachziehen.
neben einem geladenen Coder bliebe unbemerkt. Klären, ob gewollt.
5. **Radar „Jetzt suchen" läuft synchron** und kann Minuten dauern; `POST /api/models/{id}/load` meldet `ok`, egal
was die Engine antwortet.
6. **Kleinkram im Code:** `mcp/mcp_mc.py` (MCP aus) ruft die nie vorhandene Route `/api/routing/route`;
`hermes-postcheck.sh` warnt bei jedem Lauf über den entfernten Patch-Träger; `voice_service/app.py` nennt
faster-whisper statt Parakeet; `.aiexclude` gilt nur Antigravity.
## Aufräumen auf der Box (nur per User-Klick) ## Aufräumen auf der Box (nur per User-Klick)