# Обновление и расширение ресурсов code-server (LXC 132)

**Дата:** 2026-04-17
**Статус:** Реализовано

## Симптомы (до работ)

- OpenClaw (Clawdbot AI через code-server) часто сбоит
- Load average на LXC 132: **4.3** при 2 vCPU (перегрузка 2×)
- RAM: 1 GB из 8 GB (проблема не в памяти)
- Claude Code extension: 2.1.111 (актуальная 2.1.112)

## Найденные проблемы

### 1. Нехватка CPU
- 2 vCPU, load avg 4.3 — процессор узкое место
- top показывает 44% busy (us+sy), но load 4.3 → много процессов ждут

### 2. Сбои OmniRoute (journalctl -u omniroute)
- `[HealthCheck] ✗ kiro/... refresh failed` — Kiro OAuth токен не рефрешится
- `[Claude Usage] OAuth endpoint returned 429` — rate-limit от Anthropic
- `[HealthCheck] Error: [ProxyDispatcher] Context proxy host is required` — сломан конфиг proxy

### 3. Устаревший Claude Code
- На code-server 2.1.111, локально обновили до 2.1.112

## План работ

1. [x] apt update + upgrade в LXC 132
2. [x] Обновить Claude Code CLI (npm global)
3. [x] Остановить LXC 132, увеличить CPU 2→4, запустить
4. [x] ~~Отключить SOCKS5~~ (было не причиной — оставил false, но баг был в другом)
5. [x] **Обновить OmniRoute 3.6.5 → 3.6.7** — починило `[ProxyDispatcher] Context proxy host is required`
6. [x] Обновить proxmox-inventory.md
7. [x] Проверить что OpenClaw стабилен — OmniRoute 3.6.7 работает без ошибок, токены рефрешатся

## Выполненные действия

### Обновления
- Claude Code CLI: 2.1.107 → 2.1.112 (`npm install -g @anthropic-ai/claude-code`)
- Локально (MacBook): 2.1.109 → 2.1.112
- apt upgrade: binutils, netplan.io, python3.12-dev, libpam-systemd, polkitd и др.

### Проблемы и их решения

**apt "висел" 14 минут** — debconf prompt на обновлении пакета. Убил процесс, запустил с `DEBIAN_FRONTEND=noninteractive` и `--force-confold/--force-confdef`.

**apt не качал пакеты** — IPv6 от archive.ubuntu.com недоступен (`No route to host` на всех IPv6 адресах). Решение: `-o Acquire::ForceIPv4=true`. Системная проблема LXC-сети — IPv6 не работает наружу.

**OmniRoute ошибка `[ProxyDispatcher] Context proxy host is required`** — **настоящая причина**: баг в версии 3.6.5. `resolveProxyForConnection` возвращал wrapper объект `{ proxy: null, level, levelId }`, который без `host` передавался в `proxyConfigToUrl` и падал с этой ошибкой. В 3.6.7 исправлено.

Сначала отключил SOCKS5 в `/root/OmniRoute/.env` (думал что это причина — не помогло, оставил `false` как и было в значении дефолта):
```
ENABLE_SOCKS5_PROXY=false
NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false
```

Настоящее решение — обновление пакета:
```bash
cd /root/.npm/_npx/cb5891f90ae65d14
systemctl stop omniroute
npm install omniroute@latest
systemctl start omniroute
```

После обновления `[ProxyDispatcher]` ошибки пропали, токены рефрешатся штатно (`✓ gemini-cli/...@...com refreshed`).

**Важно:** в `/root/.npm/_npx/cb5891f90ae65d14/package.json` стоит `"omniroute": "^3.6.5"` — автоматически не обновится. Для будущих апдейтов — тот же `npm install omniroute@latest`.

### Ресурсы LXC 132 — CPU 2 → 4 (но это было не нужно)
- CPU: 2 vCPU → 4 vCPU (`pct set 132 --cores 4`)
- RAM: 8 GB (не менял)

**Ошибочное допущение:** сначала думал что load avg 4.3 внутри LXC — нагрузка на LXC. На самом деле `/proc/loadavg` в LXC возвращает load хоста Proxmox. Проверено: на хосте load 4.7, 8 cores, грузят WinServer2025 (VM 111, 247% CPU) и Nextcloud-AIO (VM 250). Сам LXC 132 почти idle (все процессы в top имеют %CPU=0.0).

Увеличение до 4 cores оставил — не вредит, запас для пиков. Но настоящая причина сбоев OpenClaw — баг в OmniRoute 3.6.5, не CPU.

### Полезные команды для будущего
```bash
# Рестарт LXC со сменой cores
pct shutdown 132 --timeout 30
pct set 132 --cores 4
pct start 132

# apt в LXC с проблемной IPv6
DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::ForceIPv4=true \
  -o Dpkg::Options::=--force-confold -o Dpkg::Options::=--force-confdef upgrade -y

# Проверка сервисов code-server
pct exec 132 -- systemctl is-active omniroute cliproxy code-server@root netbird
```

## Что ещё стоит сделать потом

- **IPv6 в LXC 132** — не работает наружу (`No route to host`). Не критично пока IPv4 работает, но стоит разобраться.
- **Kiro OAuth токен** — после рестарта ждём интервал 60 минут (по логам). Если снова `✗ kiro/... refresh failed` — рефреш через UI OmniRoute (http://10.0.0.179:20128).
- **Claude Usage 429** — rate-limit от Anthropic. Нормально при частых запросах, не наша проблема.
- **Откатить CPU обратно 2 vCPU** — можно сделать позже, не срочно. Текущих 4 в запасе.

## Главный вывод (для будущего)

Когда OmniRoute сбоит на code-server — **первым делом проверить его версию**:
```bash
cat /root/.npm/_npx/cb5891f90ae65d14/node_modules/omniroute/package.json | grep version
npm view omniroute version
```
Если расходятся — обновить. `^3.6.5` в package.json не обновляется автоматически.

Load average внутри LXC **не отражает** нагрузку контейнера — это load хоста Proxmox. Для нагрузки LXC смотреть `top`/`ps` на самом процессе, или `pct cpusets`/метрики Proxmox на хосте.
