[2026-09-23] eagle: family/how-to/hermes-docker-kraken.md family/how-to/kraken-access.md
This commit is contained in:
1 parent
2f42fd12e5
commit
d00c95d76b
2 files changed
+51
-6
No files matched your search
@@ -74,20 +74,40 @@ docker compose logs -f # follow logs
|
||||
|
||||
## Image
|
||||
|
||||
Built locally from `Dockerfile` — clones **upstream** `NousResearch/hermes-agent`
|
||||
(`--depth=1` from `main`). Not a custom fork. To update Hermes:
|
||||
⚠️ **ОБНОВЛЕНО 2026-09-23 — прежнее описание было неверным.**
|
||||
|
||||
```bash
|
||||
cd /srv/.../docker/hermes-build
|
||||
docker compose build --no-cache
|
||||
docker compose up -d
|
||||
Фактически compose использует готовый образ **`ghcr.io/mallexxx/hermes-kraken:latest`**
|
||||
(`image:`, без `build:`). Локальный `hermes-build/Dockerfile` в репозитории **есть** и в нём прописан
|
||||
`git clone --depth=1 https://github.com/mallexxx/hermes-agent.git` — это **форк Alex**, а НЕ upstream
|
||||
`NousResearch/hermes-agent`, как утверждалось ранее. То есть «not a custom fork» — неверно.
|
||||
|
||||
**Локальный `Dockerfile` (актуальное содержимое, ключевое):**
|
||||
```dockerfile
|
||||
FROM ghcr.io/astral-sh/uv:0.11.6-python3.13-trixie AS uv_source
|
||||
FROM tianon/gosu:1.19-trixie AS gosu_source
|
||||
FROM debian:13.4 # Trixie, не Bookworm
|
||||
ENV HERMES_HOME=/opt/data
|
||||
RUN useradd -u 10000 -m -d /opt/data hermes # ← единственный пользователь в образе = uid 10000
|
||||
...
|
||||
ENTRYPOINT [ "/usr/bin/tini", "-g", "--", "/opt/hermes/docker/entrypoint.sh" ]
|
||||
```
|
||||
В этом Dockerfile **нет** `USER` — значит uid 1000 приходит из **ghcr-сборки**, а файл в
|
||||
`hermes-build/` её не воспроизводит (расхождение образ ↔ Dockerfile). **Это надо развести перед
|
||||
правкой** — иначе правка Dockerfile не попадёт в работающий контейнер.
|
||||
|
||||
🔴 **Открытый вопрос (блокирует шаг 2 плана):** где собирается `ghcr.io/mallexxx/hermes-kraken:latest`
|
||||
— CI в репозитории `mallexxx/hermes-agent`, или локально на Kraken с `docker push`? Пока не выяснено,
|
||||
`docker compose pull` может перезаписать любой локальный фикс.
|
||||
|
||||
Обновление Hermes: либо `docker compose pull && up -d` (если образ из GHCR), либо
|
||||
`docker compose build --no-cache && up -d` (если собирается локально).
|
||||
|
||||
## Volumes
|
||||
|
||||
| Host path | Container path | Purpose |
|
||||
|-----------|----------------|---------|
|
||||
| `hermes/config/` | `/opt/data` | `HERMES_HOME` — config, sessions, skills, memory |
|
||||
| `hermes/config/.ssh/` | `/root/.ssh` | ⚠️ SSH-ключи; при `HOME=/opt/data` **не читается** SSH |
|
||||
| `/home/kraken/obsidian` | `/vault` | Obsidian vault read/write access |
|
||||
|
||||
## SSH из контейнера → хост (диагностика и фиксы)
|
||||
|
||||
@@ -183,6 +183,31 @@ sudo systemd-run --unit=hermes-chown --collect --property=Type=oneshot \
|
||||
- `chown -R` по большому дереву на USB-HDD идёт **минуты** → **обычный ssh-вызов рвётся по таймауту и правка НЕ применяется**. Запускать через `systemd-run … --collect` в фоне, потом проверять `systemctl is-active hermes-chown` и `ls -ldn` каталога.
|
||||
- Логи после старта содержат «хвост» прежних `mkdir` ошибок из буфера — не пугаться, если дальше идёт `Hermes Gateway Starting...` и скиллы синхронизированы.
|
||||
|
||||
> ### 🔁 2026-09-23 — ПОВТОРНЫЙ СИМПТОМ, НАЙДЕН ДРУГОЙ КОРЕНЬ
|
||||
>
|
||||
> Kraken-агент сообщил: **«нет SSH доступа к хосту»**. Проверка:
|
||||
> ```
|
||||
> sudo docker exec hermes-kraken ssh kraken-host "echo HELLO"
|
||||
> → No user exists for uid 1000
|
||||
> ```
|
||||
> Это **не про ключ** и **не связано** с crash-loop 2026-09-20. `ssh` падает на `getpwuid(1000)` —
|
||||
> **в `/etc/passwd` образа нет записи для uid 1000**, там только `hermes:x:10000:10000`.
|
||||
> Контейнер запущен под uid 1000 (из `USER` в образе), т.е. анонимный uid.
|
||||
>
|
||||
> **Не путать три разных вещи** (все они про uid и все ломались отдельно):
|
||||
> | Дефект | Что не так | Фикс | Дата |
|
||||
> |---|---|---|---|
|
||||
> | crash-loop `mkdir /opt/data: Permission denied` | владелец **файлов** на хосте = `10000:10000` | `chown 1000:1000` на хосте | 2026-09-20 ✅ |
|
||||
> | гонка docker↔mount | data-root на USB раньше dockerd | `RequiresMountsFor` drop-in | 2026-09-20 ✅ |
|
||||
> | `No user exists for uid 1000` | нет записи uid 1000 в **passwd образа** | завести `kraken` uid 1000 в Dockerfile | 2026-09-23 ⏳ план согласован |
|
||||
>
|
||||
> **Полный разбор + план фикса (вариант A):** [[family/how-to/hermes-docker-kraken]] → раздел
|
||||
> «ПЛАН: фикс uid 1000». Статус: **согласован, НЕ применён**.
|
||||
>
|
||||
> Дополнительно найдено: 3-й bind-mount `config/.ssh → /root/.ssh` при `HOME=/opt/data` — SSH его не
|
||||
> читает; в самом образе есть `entrypoint.sh` с логикой `gosu`/`usermod`, но вся она обёрнута в
|
||||
> `if [ "$(id -u)" = "0" ]` и при старте под 1000 **пропускается целиком**.
|
||||
|
||||
## Cloudflared туннель — публичные маршруты (состояние на 2026-09-04)
|
||||
|
||||
Туннель `kraken` в Zero Trust, remote-managed по `TUNNEL_TOKEN`, `network_mode: host`, образ `cloudflare/cloudflared:latest`. Актуальный ingress конфиг (виден в логах cloudflared на Kraken, `INF Updated to new configuration`):
|
||||
|
||||
Reference in new issue
Block a user