From d3c439d09b1498fbaedc2ddde564b864e48c0674 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 13 May 2026 09:20:05 +0600 Subject: [PATCH] =?UTF-8?q?2026-05-13=20kraken:=20mcpvault,=20vault=20rw,?= =?UTF-8?q?=20docker/containerd=20=D0=BD=D0=B0=20HDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- family/how-to/openmediavault-rpi5.md | 94 +++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 17 deletions(-) diff --git a/family/how-to/openmediavault-rpi5.md b/family/how-to/openmediavault-rpi5.md index 1986946c..62a56fd7 100644 --- a/family/how-to/openmediavault-rpi5.md +++ b/family/how-to/openmediavault-rpi5.md @@ -28,7 +28,8 @@ ip: 192.168.1.14 | 8 — Контейнеры | ✅ | Все через отдельные docker compose, конфиги на HDD (см. ниже) | | 9 — Time Machine share | ✅ | `mbentley/timemachine:smb`, расписание 10:00-22:00 GMT+6, HDD/timemachine | | 10 — Перенос данных | 🔲 | | -| 11 — Hermes агент Кракен | ✅ | Запущен, Telegram @kraken_htpc_bot живой, obsidian-mcp подключён | +| 11 — Hermes агент Кракен | ✅ | Запущен, Telegram @kraken_htpc_bot живой, mcpvault подключён, obsidian RW | +| 11а — Docker на HDD | ✅ | data-root + containerd перенесены на HDD через symlink, SD освободилась до 22% | | 12 — Obsidian sync (Taiga↔Kraken↔Eagle) | ✅ | Все 3 узла работают, кроны активны, двусторонний sync протестирован | | 13 — Vault wiki (llm-wiki) | 🔲 | Eagle: scheduled wiki-curation job, Karpathy-style | @@ -243,40 +244,62 @@ rsync -avh --progress /path/to/movies/ kraken@kraken.local:/srv/.../media/movies ## Шаг 11 — Hermes агент Кракен -**Статус: ✅ запущен (2026-05-12)** +**Статус: ✅ запущен (2026-05-12), mcpvault ✅ (2026-05-13)** ### Файлы ``` /home/kraken/hermes/ - Dockerfile — образ на базе node:20-slim + hermes-agent + obsidian-mcp - docker-compose.yml — restart: unless-stopped, network_mode: host, HERMES_ALLOW_ROOT=1 + Dockerfile — образ hermes-kraken:latest + docker-compose.yml — restart: unless-stopped, network_mode: host .env — API ключи - config.yaml → /srv/.../docker/hermes/config/config.yaml ``` -### Модели (актуально 2026-05-12) +Конфиги и данные на HDD: +``` +/srv/dev-disk-by-uuid-49e8f586.../docker/hermes/config/ + config.yaml — основной конфиг Hermes + .local/bin/mcpvault — symlink → ../lib/node_modules/@bitbonsai/mcpvault/dist/server.js + .local/lib/node_modules/@bitbonsai/mcpvault/ — persistent, не слетает при rebuild +``` + +### Модели (актуально 2026-05-13) | Модель | Статус | |--------|--------| -| `openai/gpt-oss-120b:free` | ✅ primary | -| `minimax/minimax-m2.5:free` | ✅ fallback | +| `gemini-2.5-flash` | ✅ primary | +| openrouter fallbacks | ✅ | ### Telegram бот - Имя: Кракен / Bot: [@kraken_htpc_bot](https://t.me/kraken_htpc_bot) -### Toolsets -`hermes-cli, terminal, file, web, memory, spotify, homeassistant` - ### MCP серверы | Server | Команда | Vault | |--------|---------|-------| -| obsidian | `npx obsidian-mcp /home/kraken/obsidian` | `~/obsidian` (sparse: personal/ + family/) | +| obsidian | `/opt/data/.local/bin/mcpvault /vault` | `/home/kraken/obsidian` → `/vault:rw` | -### Деплой +> ⚠️ mcpvault установлен через `npm install -g --prefix /opt/data/.local` — живёт на HDD, переживает rebuild образа +> ⚠️ Vault монтируется как `/vault:rw` (не `:ro`!) — иначе mcpvault не может писать заметки +> ⚠️ config.yaml: указывать **полный путь** `/opt/data/.local/bin/mcpvault` — PATH в контейнере его не включает +> ⚠️ args: `/vault` (путь внутри контейнера), не `/home/kraken/obsidian` + +### Деплой / пересборка ```bash -cd /home/kraken/hermes -sudo docker compose build # ~82 сек на RPi5 -sudo docker compose up -d -sudo docker logs hermes-kraken --tail 20 +# Сборка (осторожно — npm install съедает место на SD!) +cd /home/kraken/hermes && docker build -t hermes-kraken:latest . + +# Если ENOSPC при сборке — сначала почистить build cache: +docker builder prune -af + +# Запуск (docker compose не работает через SSH из-за long-lived process detection) +docker stop hermes-kraken && docker rm hermes-kraken +docker run -d --name hermes-kraken --restart unless-stopped --network host \ + -v /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/hermes/config:/opt/data \ + -v /home/kraken/obsidian:/vault:rw \ + -e HERMES_UID=1000 -e HERMES_GID=1000 -e HERMES_ALLOW_ROOT_GATEWAY=1 \ + --env-file /home/kraken/hermes/.env hermes-kraken:latest + +# Проверка +docker logs hermes-kraken --tail 20 +docker inspect hermes-kraken --format 'Status={{.State.Status}} Restarts={{.RestartCount}}' ``` ### TODO @@ -285,6 +308,43 @@ sudo docker logs hermes-kraken --tail 20 --- +## Шаг 11а — Docker и containerd на HDD + +**Статус: ✅ (2026-05-13)** + +SD карта 14GB быстро заполняется Docker образами. Всё перенесено на HDD. + +### Docker data-root +```bash +# /etc/docker/daemon.json +{"data-root": "/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker-data"} +``` + +### containerd → symlink на HDD +```bash +sudo systemctl stop docker docker.socket containerd +sudo rsync -a /var/lib/containerd/ /srv/.../containerd/ +sudo mv /var/lib/containerd /var/lib/containerd.bak +sudo ln -s /srv/.../containerd /var/lib/containerd +sudo systemctl start containerd docker +sudo rm -rf /var/lib/containerd.bak +``` + +### Build cache (buildkit) — живёт на SD! +Buildkit cache НЕ управляется data-root — растёт на SD. Cron очистки: +``` +# /etc/cron.d/docker-buildcache-cleanup +0 4 * * * root docker builder prune -af --filter until=24h > /dev/null 2>&1 +``` + +При ручной сборке перед build: `docker builder prune -af` + +### Текущее состояние SD (после всех переносов) +- SD: ~22% используется (2.9GB из 14GB), 11GB свободно +- HDD: docker-data + containerd + build cache → не мусорят SD + +--- + ## Шаг 12 — Obsidian sync (Eagle ↔ Taiga ↔ Kraken) **Статус: ✅ работает на всех 3 узлах (протестировано 2026-05-13)**