82 lines
3.1 KiB
Markdown
82 lines
3.1 KiB
Markdown
# Sesja 2026-06-10/11 — lustro SSH shipping fix + ha-diag-agent piha
|
|
|
|
## Cel
|
|
|
|
Naprawa shippingu eventów lustro → VPS; domknięcie deploy-configu ha-diag-agent na piha;
|
|
zachowanie poison-quarantine (Codex) do osobnego review.
|
|
|
|
---
|
|
|
|
## GŁÓWNE: LUSTRO event shipping — NAPRAWIONY (merged `a5a1352`)
|
|
|
|
### Root cause
|
|
|
|
`_ship_events_to_vps()` (`services/node-agent/src/node_agent.py`) woła `ssh` **bez `-i`**,
|
|
więc klucz jest szukany w `$HOME/.ssh` = `/home/homelab/.ssh` (kontener działa jako
|
|
uid 1000 `homelab` od dodania `user: "1000:1000"` do bazowego
|
|
`services/node-agent/docker-compose.yml`). Override lustra montował klucz w `/root/.ssh`
|
|
— **ślepy mount**, ssh tam nie patrzy → `oskar@100.95.58.48: Permission denied`.
|
|
|
|
### Fix
|
|
|
|
`hosts/lustro/runtime/node-agent/docker-compose.override.yml`:
|
|
|
|
```yaml
|
|
- /home/pi/.ssh:/home/homelab/.ssh:ro # było: /root/.ssh — ślepe
|
|
```
|
|
|
|
Klucz `pi@pimirror2` dodany do `authorized_keys` `oskar@VPS`.
|
|
uid match (pi=1000 = homelab=1000) spełnia strict ownership check OpenSSH.
|
|
|
|
### Weryfikacja
|
|
|
|
- 5 nodów NOMINAL w world state; lustro w `/opt/homelab/world/nodes.json` (online, świeży `last_seen`)
|
|
- 7600+ eventów backlogu spłynęło na VPS (`/opt/homelab/events/lustro/`)
|
|
- Staging na lustrze drenowany do zera (`--remove-source-files` działa)
|
|
- "Permission denied" zniknął z logów node-agenta
|
|
|
|
### Diagnoza — lekcja verify-before-fix
|
|
|
|
Oba agenty (Claude Code, Codex) błędnie wskazały observer (poison event / race)
|
|
na **nieaktualnym stanie** (`events=2` z ręcznego testu). Verify-before-fix obalił
|
|
obie hipotezy: `events/lustro` na VPS było puste → problem w warstwie **dostarczania**
|
|
(klucz SSH), nie w observerze.
|
|
|
|
---
|
|
|
|
## ha-diag-agent piha — deploy config merged (`5e9db5c`), deploy NIEDOKOŃCZONY
|
|
|
|
- `.env` utworzony na piha: `/opt/homelab/config/ha-diag-agent/.env`, chmod 600
|
|
- **ALE token = PLACEHOLDER** — chelsty-ha offline → brak tokenu i połączenia
|
|
- Przed `shadow_mode=false`: target restartu w supervisorze = nazwa kontenera
|
|
`homeassistant5`; curl endpointu z tokenem musi dać HTTP 200
|
|
- Decyzja PENDING: cel HA = chelsty-ha vs HA Ken (`homeassistant5` na piha —
|
|
z kontenera NIE `localhost`)
|
|
|
|
---
|
|
|
|
## observer poison-quarantine (Codex)
|
|
|
|
Zachowany na branchu `task/observer-poison-quarantine` (`78c9e4a`) — **NIE w master**.
|
|
Do osobnego review: czy observer realnie wiesza się na malformed evencie
|
|
(poison NIE był przyczyną lustra; hipoteza niezweryfikowana).
|
|
Realny bug → merge; inaczej → drop.
|
|
|
|
---
|
|
|
|
## 🔴 FLOTA-BOMBA — odkryta, NIE naprawiona (backlog, BLOKUJĄCE)
|
|
|
|
solaria / piha / chelsty to wciąż **stare root kontenery** node-agenta
|
|
(piha Created 2026-05-27, uid 0). Ich mount `/root/.ssh` działa tylko dlatego,
|
|
że kontenery są sprzed `user: "1000:1000"`. Pierwszy `--force-recreate` / reboot
|
|
hosta / update obrazu przełączy je na uid 1000 i shipping padnie jak na lustrze.
|
|
**NIE RECREATE bez fixu.** Szczegóły i fix: `docs/backlog.md`.
|
|
|
|
---
|
|
|
|
## Tech-debt złapany w sesji
|
|
|
|
→ wpisany do `docs/backlog.md` (flota-bomba, ha-diag-agent blocked,
|
|
poison-quarantine review, `--omit-dir-times`, stale komentarz node_agent.py,
|
|
shipping success na `logger.debug`, event-bloat lustro na VPS).
|