15 KiB
Weryfikacja inwentaryzacji floty 2026-06-30 — stan na 2026-07-02
Zebrano: 2026-07-02 ~15:20 CEST (read-only recon, zero zmian na nodach).
Metoda: ssh + docker ps -a / inspect / logs, free/df/nproc/lscpu/lsblk, git branch/log (odczyt),
curl do fleet-prometheus API. Porównanie z docs/infra/inventory-2026-06-30.md (23 rozjazdy)
oraz z repo na master (HEAD 22adfb1).
Dostępność nodów podczas weryfikacji:
| Node | Dostęp | Uwagi |
|---|---|---|
| SOLARIA | lokalnie | — |
| PIHA | ssh piha |
— |
| VPS | ssh vps |
— |
| SATURN | ssh saturn.local |
— |
| LUSTRO | ssh pi@100.99.85.73 |
alias lustro NIE rezolwuje z SOLARIA; hostname faktyczny: pimirror2 |
| CHELSTY-INFRA (100.98.91.98) | UNREACHABLE | timeout 8s (LTE offline) |
| CHELSTY-HA (100.70.180.90) | UNREACHABLE | timeout 8s (LTE offline) |
| chelsty (100.122.201.22) | UNREACHABLE | timeout 8s |
TL;DR
Z 23 rozjazdów: 20 wciąż AKTUALNYCH, 2 ZMIENIŁY SIĘ (dysk SATURN poprawił się 91%→83%;
ocena postgres:18 w audycie zdezaktualizowana), 1 WYJAŚNIONY (storage SOLARIA — rozjazdu nie było,
to dual-boot). 0 naprawionych w pełni. Repo-side nic się nie zmieniło od audytu (manifesty
hosts/*, services/*/service.yaml, capabilities — identyczne); zmiany zaszły tylko w runtime
(safeclean SATURN, restart NPM na PIHA, rebuild brain-watchdog).
Świeże ustalenia (spoza audytu): fleet-prometheus na VPS zgodny z repo w 100%,
brain-watchdog na PIHA biega z nowym kodem (poll Prometheus), ghost-kontenery na VPS
zniknęły, ale checkout na PIHA wciąż stoi na gałęzi task/kb-gmail-import (incydent
2026-06-30 naprawiony tylko połowicznie).
Weryfikacja 23 rozjazdów z audytu
Statusy: AKTUALNY (rozjazd trwa bez zmian) / NAPRAWIONY / ZMIENIŁ SIĘ (jak) / NIE DA SIĘ ZWERYFIKOWAĆ (czemu). Kolumna "Kierunek" = którą stronę naprawiać: repo czy rzeczywistość.
| # | Rozjazd (z audytu) | Status 2026-07-02 | Szczegóły weryfikacji | Kierunek naprawy |
|---|---|---|---|---|
| 1 | SATURN dysk 91% pełny | ZMIENIŁ SIĘ (poprawa) | /dev/sda5: 125G/159G = 83%, 26G wolne (było 137G/91%, 15G). Safeclean z 2026-06-30 zadziałał. Nadal wysoko. Bonus: lsblk pokazuje dysk 232.9G, partycja / tylko 159G — ~74G niespartycjonowane |
Rzeczywistość: dalszy cleanup lub powiększenie partycji o niespartycjonowane ~74G |
| 2 | forgejo owner_node=saturn, biega na PIHA | AKTUALNY | service.yaml wciąż owner_node: saturn; forgejo + forgejo-db-1 + forgejo_dind Up 5 days na PIHA |
Repo: owner_node: piha + wpis w hosts/piha/services.yaml |
| 3 | mosquitto owner_node=piha, biega na VPS | AKTUALNY | service.yaml wciąż owner_node: piha; mosquitto Up 3 weeks na VPS (100.95.58.48:1883); na PIHA brak |
Repo: owner_node: vps + wpis w hosts/vps/services.yaml |
| 4 | npm — dwie instancje (VPS + PIHA) | AKTUALNY | VPS npm Up 3 weeks; PIHA nginxproxymanager-app-1 Up 2 days (restart ~2026-06-30). Nowy kontekst: topology.yaml sekcja ingress deklaruje proxy: npm-piha dla wildcard *.kapala.org → obie instancje wyglądają na zamierzone (VPS=public ingress, PIHA=mesh ingress kapala.org) |
Repo: zalegalizować NPM@PIHA (wpis w hosts/piha/services.yaml, service.yaml per-host lub drugi serwis npm-piha) |
| 5 | homeassistant5 na PIHA niedeklarowany | AKTUALNY | Up 5 days na PIHA. topology.yaml ingress odwołuje się do HA (ha.kapala.org → 192.168.31.7:8123), ale nadal zero deklaracji serwisu dla piha |
Repo: dodać homeassistant do hosts/piha/services.yaml + topology |
| 6 | control-plane podwójny (VPS + SATURN) | AKTUALNY | SATURN: 4 kontenery control-plane Up 3 days, control-plane-ui wciąż UNHEALTHY. VPS: komplet healthy Up 6 days. Repo dalej deklaruje tylko VPS |
Decyzja operatora; rekomendacja: rzeczywistość (zatrzymać stack na SATURN), chyba że to świadomy dev-instance — wtedy repo (zadeklarować jako dev) |
| 7 | hosts/saturn/services.yaml nie istnieje |
AKTUALNY | Pliku nadal brak; na SATURN biega 5 kontenerów (4× control-plane + agent-system-webui:8080) | Repo: stworzyć plik (zależne od decyzji w #6) |
| 8 | SATURN capabilities RAM 8 GB vs 14 GiB | AKTUALNY | free -h: 14Gi total; capabilities.yaml wciąż total_gb: 8 |
Repo: total_gb: 16 |
| 9 | SATURN capabilities storage sd-card 64 GB | AKTUALNY (doprecyzowany) | Fizyczny dysk sda = 232.9G (audyt widział tylko partycję 159G); capabilities wciąż sd-card, 64 |
Repo: type: ssd, capacity_gb: 240 (+ nota o partycji / 159G) |
| 10 | SOLARIA capabilities CPU 12c/24t vs nproc=32 | AKTUALNY (doprecyzowany) | lscpu: i9-14900KF, 24 cores / 32 threads (1 socket). Capabilities wciąż 12/24 |
Repo: cores: 24, threads: 32 |
| 11 | SOLARIA storage 2000 GB vs widoczne 890 GB | WYJAŚNIONY — rozjazdu nie ma | lsblk: nvme0n1 = 1.9T (≈2000 GB ✓). Podział: 1002.5G partycja Windows (/mnt/win) + 904.3G root Linux. Audytowe "do weryfikacji" zamknięte |
Repo (kosmetyka): adnotacja o dual-boot / faktycznie dostępnych ~900G dla Linuksa |
| 12 | ollama zadeklarowana, nie biega na SOLARIA | AKTUALNY | Na SOLARIA biega tylko planner-agent, node-agent, stability-agent, node_exporter (wszystkie Up 3h po reboot). Ollamy brak | Decyzja: repo (usunąć/zarchiwizować services/ollama/) albo rzeczywistość (wdrożyć) — rekomendacja repo, skoro 2+ dni nikt nie wdrożył |
| 13 | hosts/vps/services.yaml niekompletne (4 vs 9) |
AKTUALNY | Plik wciąż ma 4 serwisy; topology 9; na VPS biega komplet 9 + nadwyżki | Repo: dopisać stability-agent, npm, outline, joplin, ai-cluster |
| 14 | planner-agent brak w hosts/solaria + topology | AKTUALNY | Biega na SOLARIA (Up 3h, healthy); w hosts/solaria/services.yaml i topology nadal tylko node-agent |
Repo: dopisać planner-agent |
| 15 | zigbee2mqtt topology=chelsty-infra, biega na PIHA | AKTUALNY | Up 5 days na PIHA (:8087). topology wymienia z2m tylko pod chelsty-infra (tam też zasadny — deklaracja w hosts/chelsty-infra/services.yaml) |
Repo: dodać z2m do sekcji piha w topology (dwie lokalizacje zamierzone) |
| 16 | mosquitto brak w topology (vps) | AKTUALNY (częściowo) | W topology vps mosquitto występuje tylko w komentarzu przy ai-cluster; nadal nie jako serwis | Repo: pierwszorzędny wpis (razem z #3) |
| 17 | stability-agent owner_node=chelsty | AKTUALNY | Biega na PIHA, VPS, SOLARIA (wszystkie healthy); service.yaml wciąż owner_node: chelsty |
Repo: owner_node: per-host (wzorzec ha-diag-agent) |
| 18 | node_exporter owner_node=vps | AKTUALNY | Biega na VPS, PIHA (node-exporter), SOLARIA, i LUSTRO (node-exporter, scrapowany przez fleet-prometheus) |
Repo: owner_node: per-host |
| 19 | outline-postgres-1 anonimowy image | AKTUALNY | Wciąż image ID 4e6e670bb069 bez taga |
Rzeczywistość+repo: zidentyfikować wersję (docker inspect → env PG_VERSION), przypiąć named tag w compose |
| 20 | joplin-db postgres:18 "pre-release" |
ZMIENIŁ SIĘ (ocena, nie stan) | Kontener wciąż na postgres:18, ALE ocena audytu zdezaktualizowana: PostgreSQL 18 jest GA od 2025-09 — to stabilny major, nie pre-release. Zostaje tylko kosmetyka: pin do postgres:18.x |
Repo (kosmetyka): pin minor w compose; wpisu "zmień na 16/17" NIE realizować |
| 21 | humanai-landing/mailer poza repo (VPS) | AKTUALNY | Oba Up 7 days; brak w repo | Repo: dodać service.yaml albo świadomie oznaczyć jako non-managed w topology |
| 22 | umami poza repo (VPS) | AKTUALNY | umami + umami-db Up 7 days (healthy); brak w repo | Repo: jw. |
| 23 | PIHA ~33 shadow kontenery | AKTUALNY | docker ps -a na PIHA: 41 kontenerów, 7 powiązanych z repo (6 GitOps + stability-agent z runtime override) → 34 shadow. Skład bez zmian vs audyt |
Repo, długoterminowo: iteracyjne dodawanie do hosts/piha/services.yaml |
Nody CHELSTY-INFRA / CHELSTY-HA / LUSTRO w audycie nie miały numerowanych rozjazdów; chelsty-* nadal NIE DA SIĘ ZWERYFIKOWAĆ (LTE offline, timeout). LUSTRO — patrz świeże ustalenia.
Świeże ustalenia (rzeczy powstałe PO audycie 2026-06-30)
(a) fleet-prometheus na VPS — ✅ ZGODNY z repo
- Image:
prom/prometheus:v3.5.0✓ (pin zgodny z compose) - Bind:
100.95.58.48:9090->9090✓ (tylko Tailscale IP, zero 0.0.0.0) - Mounty:
prometheus.yml:ro+rules:roz/home/oskar/homelab-codex-ws/services/fleet-prometheus/✓ /api/v1/targets: 4 targety fleet-node (vps, piha, solaria, lustro) — wszystkie health=up + self-scrapeprometheus✓/api/v1/rules: grupafleet-liveness, reguła NodeDown (up{node=~"vps|piha"} == 0, for 5m) — stateinactive, healthok✓- Kontener Up 46h (healthy), restart 2026-06-30 wieczorem (deploy reguł)
- Drobiazg: brak
hosts/vps/runtime/fleet-prometheus/docker-compose.override.yml— konwencja VPS z CLAUDE.md każe deklarować mem_limit w override; tumem_limit: 512msiedzi w bazowym compose. Funkcjonalnie OK, formalnie niespójne z konwencją. - Kontekst: checkout na VPS (
/home/oskar/homelab-codex-ws) = master @d417000, 7 commitów za origin/master (same docs) — mounty proma wskazują na ten checkout, więcgit pullna VPS zmienia configi proma "na żywo" (hot-reload dopiero poPOST /-/reload).
(b) brain-watchdog na PIHA — ✅ NOWY KOD (poll Prometheus)
- Image
brain-watchdog-brain-watchdogzbudowany 2026-06-30 19:22:25 CEST — 31 minut po commicie62d6fc0(18:51 CEST, "poll Prometheus /api/v1/alerts"); checkout na PIHA stoi dokładnie na62d6fc0;docker historypokazujeCOPY src/ src/z tej godziny → kontener biega z kodem zawierającym poll. PROMETHEUS_URL=http://100.95.58.48:9090obecny w/opt/homelab/config/brain-watchdog/.env✓ i w env kontenera ✓.- Logi: OK co 60s, zero linii
[prometheus] poll failedod startu 2026-06-30 17:22Z — nowy kod loguje poll tylko przy błędzie/alertcie, więc cisza = poll przechodzi (reguła NodeDown inactive → nic do wysłania). - Jedyne czego nie dało się potwierdzić na twardo read-only: zawartość
state.json(kluczprom_alerted) — wolumen root-owned, sudo wymaga hasła. Dowód pośredni (timing buildu + checkout + env) uznaję za wystarczający.
(c) Ghost hash-prefixed kontenery control-plane na VPS — ✅ ZNIKNĘŁY
docker ps -a na VPS: 24 kontenery, wszystkie normalnie nazwane, zero hash-prefixed
(grep ^[0-9a-f]{6,} → brak trafień). Lista do wglądu w sekcji (a)/audycie — bez duchów.
(d) Checkout git na PIHA — ❌ NIE naprawiony do końca
/home/oskar/homelab-codex-ws na PIHA:
- gałąź:
task/kb-gmail-import(wciąż! incydent 2026-06-30), - HEAD:
62d6fc0— to commit z mastera (drzewo czyste, brak lokalnych śmieci), - czyli: ktoś przestawił gałąź taskową na commit mastera, ale nie przełączył się na
master.
Skutek praktyczny: treść plików = master sprzed 2 dni (7 commitów za origin/master, same docs — na dziś
niegroźne), ale następny git pull na tej gałęzi nie pociągnie mastera, a następny deploy z PIHA
zbuduje z gałęzi taskowej. Mina z opóźnionym zapłonem.
Bonus: LUSTRO (poza zakresem audytu, zebrane przy okazji)
- Alias
lustronie rezolwuje z SOLARIA; działapi@100.99.85.73(Tailscale). Hostname faktyczny:pimirror2. - Biega: node-agent (healthy ✓ zgodnie z repo), node-exporter, piper-tts, pi-watchtower-1 w restart-loopie (
Restarting (1)). hosts/lustro/services.yamldeklaruje tylko node-agent → node-exporter, piper-tts, watchtower = shadow.- Brak
hosts/lustro/capabilities.yaml(już odnotowane w audycie, wciąż aktualne).
Priorytetyzacja: co naprawiać TERAZ (miny) vs PÓŹNIEJ (kosmetyka)
TERAZ — miny
| Prio | Co | Kierunek + konkretna rekomendacja |
|---|---|---|
| 1 | PIHA checkout na gałęzi taskowej (świeże d) | Rzeczywistość: na PIHA git checkout master && git pull (operator; to jedyna zmiana stanu, świadomie poza tym reconem). Bez tego każdy kolejny deploy z PIHA buduje ze schodzącej z toru gałęzi. Rozważyć follow-up: guard w deploy.sh odmawiający deployu z gałęzi ≠ master |
| 2 | Podwójny control-plane VPS+SATURN, ui na SATURN unhealthy (#6, #7) | Rzeczywistość (rekomendacja): zatrzymać stack control-plane na SATURN — dwa supervisory/executory czytające te same eventy to ryzyko zdublowanych akcji i alertów. Jeśli SATURN ma być dev-instance → wtedy repo: stworzyć hosts/saturn/services.yaml i oznaczyć jako dev (i naprawić unhealthy ui). Decyzja operatora wymagana, ale stan "unhealthy od tygodni + niezadeklarowany" nie może wisieć |
| 3 | owner_node kłamie dla forgejo i mosquitto (#2, #3) | Repo (proste, bezpieczne): forgejo → owner_node: piha, mosquitto → owner_node: vps, + wpisy w services.yaml hostów. Mina bo supervisor/deploy kierują akcje wg owner_node — restart/redeploy poleciałby na zły node. Rzeczywistość jest tu "dobra" (serwisy działają tam gdzie mają sens) |
| 4 | SATURN dysk 83% (#1) | Rzeczywistość: trend poprawiony (91→83%), ale dalej ciasno. Najtańszy ruch: powiększyć partycję / o ~74G niespartycjonowanego miejsca na sda (232.9G dysk, 159G partycja) — wymaga planu, nie ad-hoc |
PÓŹNIEJ — porządki (repo-side, bez ryzyka runtime)
| Co | Kierunek |
|---|---|
| Legalizacja NPM@PIHA + homeassistant@PIHA w manifestach (#4, #5) — topology ingress już zakłada ich istnienie, manifesty nie | Repo |
hosts/vps/services.yaml dopisać 5 brakujących serwisów (#13); planner-agent do hosts/solaria + topology (#14) |
Repo |
stability-agent i node_exporter → owner_node: per-host (#17, #18) |
Repo |
| Capabilities: SATURN RAM 16 / storage 240G ssd (#8, #9), SOLARIA CPU 24c/32t (#10), adnotacja dual-boot (#11) | Repo |
| ollama: usunąć/zarchiwizować service.yaml albo wdrożyć (#12) — rekomendacja: archiwizacja | Repo |
| topology: z2m do sekcji piha, mosquitto jako pierwszorzędny wpis vps (#15, #16) | Repo |
outline-postgres pin taga (#19), joplin-db pin postgres:18.x (#20 — NIE downgrade do 16/17, PG18 jest stable) |
Repo + rzeczywistość przy najbliższym redeployu |
| humanai-landing/mailer + umami: zadeklarować albo oznaczyć non-managed (#21, #22) | Repo |
| PIHA 34 shadow kontenerów (#23) — iteracyjnie, osobny projekt | Repo, długoterminowo |
LUSTRO: naprawić watchtower restart-loop, dodać capabilities.yaml + node-exporter/piper-tts do manifestów, wyjaśnić rezolucję aliasu lustro |
Mieszane, follow-up |
fleet-prometheus: formalny override hosts/vps/runtime/fleet-prometheus/ per konwencja VPS (mem_limit już jest w bazie — przenieść lub udokumentować wyjątek) |
Repo, kosmetyka |
Uwagi metodologiczne
- Recon w 100% read-only:
docker ps/inspect/logs/history,cat/grep,gitodczyt,curlGET. Zero restartów, zero edycji na nodach, zerogit pullna nodach. - CHELSTY-INFRA / CHELSTY-HA / chelsty: timeout ssh 8s na Tailscale IP — UNREACHABLE, pozycje ich dotyczące nieweryfikowalne (jak w audycie).
state.jsonbrain-watchdoga nieczytelny bez sudo-z-hasłem — jedyny punkt zweryfikowany dowodem pośrednim zamiast bezpośrednim.- Manifesty repo porównywane z
masterHEAD22adfb1w worktreetask/fleet-recon-verify.