---
okf: "0.1"
type: session-log
visibility: private
status: active
updated: 2026-06-22
links: []
---

# Sesja 2026-06-22 — KB spine relokowany na PIHA + przygotowanie hosta

## Cel

Przenieść spine KB (Postgres + pgvector) z SOLARIA na PIHA, przygotować host PIHA pod
kontener z twardym limitem pamięci, zdeployować i zweryfikować schemat. SOLARIA bywa
offline — zapytania KB muszą działać 24/7, więc spine musi stać na always-on maszynie.

---

## DECYZJA

- **Spine Postgres + pgvector przeniesiony SOLARIA → PIHA.** Powód: PIHA (Raspberry Pi 5)
  jest always-on, SOLARIA bywa offline; zapytania KB mają działać 24/7. SOLARIA zostaje do
  GPU/embeddingów (bge-m3) i indexera.
- **Archiwum maili `.eml` docelowo też na PIHA** (NVMe).

---

## PIHA — przygotowanie hosta

- **Swap:** dodano 4GB swapfile (`/swapfile`), utrwalony w `/etc/fstab`. Brak swapa był
  ryzykiem OOM dla Home Assistant.
- **Cgroup memory:** kernel nie eksponował cgroup memory controllera → dopisano
  `cgroup_enable=memory cgroup_memory=1` do `/boot/firmware/cmdline.txt`
  (backup: `cmdline.txt.bak`) + reboot. Po reboocie `cgroup.controllers` zawiera `memory`,
  docker `mem_limit` faktycznie działa (wcześniej był ignorowany).

---

## Relokacja w git

Praca w worktree `task/kb-postgres-piha`, zmergowana do master jako commit **2b3cb89**.

- Override SOLARIA (`hosts/solaria/runtime/kb-postgres/`) **usunięty**;
  wpis z `hosts/solaria/services.yaml` zdjęty.
- Dodany `hosts/piha/runtime/kb-postgres/docker-compose.override.yml`:
  - `mem_limit: 1g`, `mem_reservation: 512m` (soft reservation ignorowany przez kernel —
    nieszkodliwe; twardy `mem_limit` chroni HA przed OOM).
  - Tuning Postgresa pod małą maszynę: `shared_buffers 256MB`, `effective_cache_size 512MB`,
    `work_mem 8MB`, `maintenance_work_mem 64MB`, `max_connections 30`.
- Obraz `pgvector/pgvector:pg16` potwierdzony **arm64**.
- Named volume `kb_postgres_data` na **NVMe** (docker `data-root = /home/docker` →
  `/dev/nvme0n1p3`, ~170GB wolne).
- `inventory/topology.yaml` + `hosts/piha/services.yaml` — wpisy przeniesione.

---

## Deploy na PIHA

- Kontener **healthy**.
- Schemat `envelope` + extension `vector` zweryfikowane w działającej bazie.
- `mem_limit 1g` zaaplikowany po **force-recreate** (zwykły `up` nie podmienia limitu).

---

## Google Takeout (bulk Gmail)

- Pobrany: **15GB zip**, jeden plik; Mail po rozpakowaniu **~26.9GB**.
- Leży na **SOLARIA `~/Downloads`**, NIE rozpakowany jeszcze.
- Docelowo: transfer na PIHA NVMe → import. Czeka na importer (etap 3).

---

## Higiena git

- Cała praca przez worktree: `task/kb-foundations` (zmergowany i sprzątnięty),
  `task/kb-postgres-piha` (zmergowany).
- Master deploy-only, czysty.

---

## GOTCHA PIHA (do zapamiętania)

`~/.ssh/id_rsa` na PIHA miał perms **0640** → `git fetch` przez SSH padał
(`bad permissions`). Fix: `chmod 600 ~/.ssh/id_rsa`. To ta sama klasa problemów
uid/permisji co wcześniej na PIHA — przy onboardingu PIHA warto sprawdzać perms kluczy.

---

## Następny krok

**Importer bulk Gmail** (worktree `task/kb-gmail-import`):
- CLI w `packages/kb-mail`, `mbox → archiwum (.eml) + envelope`, **idempotentny**, `--dsn` na PIHA.
- Potem: transfer Takeout na PIHA NVMe + run.

---

## BACKLOG (osobno, nieruszane w tej sesji)

- **`hosts/piha/capabilities.yaml` rozjazd danych:** mówi `memory 4GB` / `sd-card 32GB`;
  realnie **8GB RAM + NVMe 170GB**. Ten sam typ rozjazdu danych co przy 8-dniowej ślepocie
  floty — do poprawienia.
- **`KB_TEST_DSN` w `packages/kb-mail/tests/test_db.py`** — wskazuje na solaria, powinien piha.
- **Deklaratywny zapis `cgroup_enable` + swap dla PIHA** — firmware/host config jest poza
  obecnym GitOps; rozważyć jak go ująć.
