Mitygacja tymczasowa z incydentu 2026-07-30-ollama-solaria-vanish (§7, M1),
na czas backfillu embed (faza mailowa KB). Na SOLARII node-agent robił
niefiltrowany `docker container prune` co cykl (60 s), kasując również
kontenery z `restart: unless-stopped` zatrzymane świadomie przez operatora.
Zweryfikowane w kodzie (services/node-agent/src/node_agent.py, linie zgodne
z incydentem): `self.node_type` jest czytane wyłącznie w run_safe_cleanup()
(648, 654) i w dwóch liniach logu (250, 1103). `lte_node` daje wczesny return
w run_safe_cleanup — monitoring, eventy, dispatch akcji bez zmian.
_cleanup_control_plane_fs jest bramkowane node_name == VPS, nie node_type.
stability-agent nie prune'uje — node-agent był jedynym źródłem.
Ścieżka deployu zweryfikowana: deploy-service.sh:100 składa
${HOST_DIR}/runtime/${SERVICE}/docker-compose.override.yml, a HOST_DIR to
hosts/<node> w obu wywołaniach (deploy-node.sh:102 operatorskie,
deploy-runner.sh:170 agentowe). Dowód, że plik nie jest martwy: działający
kontener na SOLARII ma NODE_TYPE=ai_node, co występuje wyłącznie w tym pliku.
`docker compose config` na złożeniu daje NODE_TYPE=lte_node, group_add 999+996
zachowane, projekt "node-agent" (bez zmiany nazwy projektu).
Skutek uboczny: lte_node pomija CAŁY cleanup, więc dangling images i build
cache też nie są sprzątane — pilnować miejsca na dysku SOLARII.
Zdjąć po wdrożeniu R1 na nodzie → przywrócić NODE_TYPE=ai_node.
Nie zdeployowane — deploy po stronie operatora.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
33 lines
1.8 KiB
YAML
33 lines
1.8 KiB
YAML
# MITYGACJA TYMCZASOWA (M1) — założona 2026-08-04.
|
||
# NODE_TYPE=lte_node wyłącza run_safe_cleanup() (niefiltrowany
|
||
# `docker container prune`) na czas backfillu embed (faza mailowa KB).
|
||
# Incydent: docs/incidents/2026-07-30-ollama-solaria-vanish.md (§7, M1).
|
||
# Bez tego każdy zatrzymany kontener na SOLARII znika w ≤60 s — również taki
|
||
# z `restart: unless-stopped`, zatrzymany świadomie przez operatora.
|
||
# Warunek zdjęcia: R1 (filtrowanie prune po restart policy / labelu compose)
|
||
# wdrożony na tym nodzie — R1–R3 są w toku po stronie subsystemu A.
|
||
# Po zdjęciu przywrócić: NODE_TYPE=ai_node.
|
||
# Zakres wyłączenia: `lte_node` pomija CAŁY cleanup, więc na czas mitygacji
|
||
# nie są też sprzątane dangling images ani build cache — pilnować miejsca
|
||
# na dysku. Monitoring, eventy i dispatch akcji działają bez zmian
|
||
# (self.node_type jest czytane wyłącznie w run_safe_cleanup i dwóch liniach logu).
|
||
services:
|
||
node-agent:
|
||
# Docker GID on SOLARIA is 996 (not the Debian default 999 the base compose
|
||
# assumes). Without this the agent starts with "Docker unavailable:
|
||
# Permission denied" on /var/run/docker.sock and reports no containers
|
||
# (recon RECON-multiagent-2026-07-27.md, A2/E19). Compose concatenates
|
||
# group_add lists, so the base 999 stays alongside; 996 is what grants
|
||
# socket access here. Same per-host pattern as piha (123) and lustro (991).
|
||
group_add:
|
||
- "996" # host docker gid, verified 2026-07-30 (getent group docker → 996)
|
||
environment:
|
||
- NODE_NAME=solaria
|
||
- NODE_TYPE=lte_node # M1 (2026-08-04) — było: ai_node; przywrócić po R1
|
||
- VPS_EVENTS_HOST=100.95.58.48
|
||
- VPS_EVENTS_USER=oskar
|
||
- VPS_EVENTS_PATH=/opt/homelab/events
|
||
- CHECK_INTERVAL=60
|
||
volumes:
|
||
- /home/oskar/.ssh:/home/homelab/.ssh:ro
|