diff --git a/projects/dttb/openclaw.md b/projects/dttb/openclaw.md index 089287e..d3e1a50 100644 --- a/projects/dttb/openclaw.md +++ b/projects/dttb/openclaw.md @@ -258,6 +258,80 @@ ssh -o StrictHostKeyChecking=no root@10.0.0.250 \ ### Проблема: Бот застревает при делегировании на Opus Wrapper запускал `claude` без `-p` → интерактивный REPL → висел. Решение уже в wrapper (2026-04-17). Если опять: проверить что `/root/clawd/scripts/claude-code-wrapper.sh` использует `claude -p --output-format text`, а не голый `claude`. +### Проблема: Crash-loop каждые ~40 сек с `CIAO PROBING/ANNOUNCEMENT CANCELLED` (bonjour плагин) + +**Симптомы (2026-04-27, openclaw 2026.4.24):** +- `systemctl --user is-active openclaw-gateway.service` → `active`, но `NRestarts` растёт каждую минуту +- В логе `/tmp/openclaw/openclaw-.log`: цикл `gateway ready (8 plugins: ..., bonjour, ...)` → `[openclaw] Unhandled promise rejection: CIAO PROBING CANCELLED` (или `CIAO ANNOUNCEMENT CANCELLED`) → `wrote stability bundle ... unhandled_rejection.json` → `Main process exited, code=exited, status=1/FAILURE` → systemd рестартит через 5 сек +- В журналах раньше предупреждение: `bonjour: watchdog detected non-announced service; attempting re-advertise` +- Telegram молчит (бот не успевает обработать update между рестартами) + +**Корень:** плагин `bonjour` использует `@homebridge/ciao` для mDNS-анонса. Если LXC сеть не пускает multicast (типичная история для bridged-LXC за NPM), ciao периодически отменяет PROBING/ANNOUNCEMENT, выбрасывает rejection, который не отлавливается и валит весь node-процесс. + +**Починка:** отключить bonjour-плагин — он по умолчанию загружается, даже если не прописан в `plugins.entries`. + +```bash +pct exec 137 -- bash -c ' + cp /root/.openclaw/openclaw.json /root/.openclaw/openclaw.json.bak.$(date +%F-%H%M) + python3 -c " +import json +p = \"/root/.openclaw/openclaw.json\" +d = json.load(open(p)) +d.setdefault(\"plugins\",{}).setdefault(\"entries\",{})[\"bonjour\"] = {\"enabled\": False} +json.dump(d, open(p,\"w\"), indent=2, ensure_ascii=False) +" + XDG_RUNTIME_DIR=/run/user/0 systemctl --user restart openclaw-gateway.service +' +``` + +**Проверка успеха:** в логе должно быть `ready (7 plugins: acpx, browser, device-pair, nextcloud-talk, phone-control, talk-voice, telegram)` — без `bonjour`. `NRestarts=0` после рестарта, аптайм > 60 сек. + +**Что bonjour даёт и что теряем:** mDNS-анонс gateway по `_openclaw-gw._tcp.local.` для автодискавери в LAN. У нас доступ всегда по фиксированному IP (10.0.0.239) или через `bot.dttb.ru` — не нужен. + +### Проблема: Telegram polling stall + OmniRoute fetch failed (DNS отдаёт FakeIP) + +**Симптомы (2026-04-27):** +- В логе `Telegram webhook cleanup failed: Network request for 'deleteWebhook' failed!`, `[telegram] Polling stall detected (no completed getUpdates for 240s); forcing restart` +- `OpenRouter pricing fetch failed (timeout 30s)`, OmniRoute через себя возвращает `502 [kiro/...]: fetch failed (reset after 5s)` +- Из контейнера `getent ahostsv4 api.telegram.org` отдаёт `198.18.0.6` (или другой `198.18.x`) +- `curl https://api.telegram.org/` → `Failed to connect ... port 443 after Xms` +- Но curl `--resolve api.telegram.org:443:149.154.166.110` → `200 OK` за ~150мс — то есть **сама сеть работает**, просто DNS даёт неработающий IP + +**Корень:** дефолтный `/etc/resolv.conf` в LXC 137 после создания указывает на gateway `10.0.0.1` (это OpenWrt/MikroTik LionART с Mihomo/sing-box). Mihomo возвращает **FakeIP** (`198.18.0.0/15` per RFC 6815) для проксируемых доменов. FakeIP перенаправляется TPROXY-правилами на самом маршрутизаторе → его собственный proxy-выход. **Из LXC 137 трафик в `198.18/15`** некуда идти — нет route и нет TPROXY на этой машине, connection просто фейлится. + +**Fix — DNS на честные `1.1.1.1` / `8.8.8.8`** (UDP/53 на них уходит через NetBird `wt0` → Финка-exit → реальный ответ): + +```bash +pct set 137 --nameserver '1.1.1.1 8.8.8.8' +pct exec 137 -- bash -c 'cat > /etc/resolv.conf <