Files
knowledge-base/decisions/2026-04-17-code-server-upgrade.md

6.6 KiB
Raw Permalink Blame History

date, type, tags
date type tags
2026-04-17 decision
decision

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

Настоящее решение — обновление пакета:

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.

Полезные команды для будущего

# Рестарт 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 — первым делом проверить его версию:

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 на хосте.