Алекс (пилот): доступ к UniFi (Cloud Key→mongo) + печать на HP M775 (CUPS+IPP DNAT)

- alex-router.sh / alex-unifi.sh / alex-print.sh на коробке
- UniFi через Cudy→dbclient→mongo ace (API залочен SSO)
- печать CUPS Everywhere через DNAT Cudy 6310→148:631, персистентно nftables.d
- проверено в TG: Алекс сам зовёт инструменты

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
dttb
2026-05-31 21:08:52 +03:00
parent 234ba782d9
commit a7fac84f6e
64 changed files with 14043 additions and 2 deletions

View File

@@ -0,0 +1,297 @@
---
date: 2026-05-30
type: project-spec
tags: [product, ai-assistant, pilot, openclaw, alexandr, business]
status: draft
---
# AI-ассистент в коробке — пилот для Александра
> **Это первая страница нового продукта Олега.** Цель — собрать автономного AI-консьержа на маленьком ПК, продать Александру (КП Бенелюкс) как пилот. Если зайдёт — переезжает к клиенту физически, дальше масштабирование на других клиентов.
Этот файл — **промт для следующей Claude-сессии**, которая будет строить систему. Открываешь новый чат и вставляешь всё ниже целиком.
---
## 📋 Промт для копирования в новую сессию
```
Я разрабатываю коммерческий AI-консьерж-продукт. Маленький ПК с предустановленным
ассистентом, который покупает домохозяйство и ставит в свою сеть. Сегодня пилот
для одного конкретного клиента — Александра Григорьева (КП Бенелюкс, Истра).
═══════════════════════════════════════════════════════════════════════════════
КОНТЕКСТ — кто я и что у меня уже есть
Я Олег Батлаев, DevOps. У меня уже работает похожая система для себя — Антошка
(openclaw в LXC 137 на моём Proxmox). Она использует OmniRoute (бесплатный
ProxyDispatcher к Sonnet 4.5/Opus/GPT-5.4), есть Telegram-бот, есть Nextcloud
Talk-бот, есть RAG над моим Obsidian-vault. Это базовая референс-архитектура.
Я обслуживаю Александра как сетевого админа уже несколько недель. Знаю всю его
инфру наизусть — описано в моём vault (см. ссылки ниже). Хочу выделить из этой
работы продукт.
═══════════════════════════════════════════════════════════════════════════════
ЦЕЛЬ ПРОЕКТА
Собрать на маленьком ПК (Proxmox VE 9.1, ZOTAC H61 / i3-2100 / 15 GB RAM /
SSD 112 GB + HDD 1.8 TB, IP 10.0.0.147 пока у меня) автономный AI-ассистент,
который умеет:
1. Помогать Александру с типичными бытовыми IT-проблемами его сети
(«не работает Telegram», «принтер не печатает», «почта не отправляется»)
2. Сам диагностировать (read-only тулы) и предлагать решения
3. Выполнять починку (write-action тулы) только после подтверждения клиента
4. Работать с его документами и почтой через RAG
5. Общаться через 3 интерфейса с единой памятью: Web / Telegram / Nextcloud Talk
6. Постепенно обучаться (расширяемая RAG-база, не fine-tuning)
Бизнес: пилот → если Александр покупает, ПК физически переезжает к нему домой,
переходит в его LAN. Дальше масштабирую на других клиентов.
═══════════════════════════════════════════════════════════════════════════════
АРХИТЕКТУРА (принципы)
✅ ПОЛНАЯ АВТОНОМНОСТЬ от моей dttb-инфры. Бот не должен зависеть от:
- моего openclaw / claude-memory
- моего vault / Gitea
- моего code-server / openclaw-NetBird
- моего OmniRoute (его instance может крутиться где угодно — отдельно)
После переезда ПК к клиенту — никаких связей со мной не остаётся, кроме
возможности удалённой поддержки.
✅ ОТДЕЛЬНЫЙ vault — новый git-репозиторий `alexandr-knowledge-base`. Туда
копируется ТОЛЬКО инфра Александра (из моего vault projects/benilux/,
snippets/clients/alexandr-*, claude-memory/benelux*.md, плюс универсальные
snippets). Данные других моих клиентов (НИИКН, ММФБ, Знаменское, Главторг)
НЕ копируются ни в каком виде — это утечка их данных третьему лицу.
✅ ВНЕШНИЙ ДОСТУП через мой VPS на Spaceweb с белым IP. Я куплю домен (имя
уточню позже). От бота до VPS — обратный туннель (рекомендую Cloudflare
Tunnel — бесплатно, SSL автоматом, не требует port-forward на роутере
клиента; альтернатива — FRP или WireGuard). На VPS — Nginx Proxy Manager
или Caddy с Let's Encrypt → проксирует на бота через туннель.
✅ ОДИН ПОЛЬЗОВАТЕЛЬ (Александр). Многопользовательский режим для семьи —
возможный апгрейд в будущем, но не сейчас.
✅ ГИБРИДНЫЕ TOOLS:
- read-only (ping, lpstat, awg show, curl, RAG search) — всегда без
подтверждения
- write-action (restart_podkop, flush_dns_on_mac, change_uci_setting) —
ВСЕГДА требуют клик кнопки «Да, разрешаю» в TG/Web inline keyboard
- все действия логируются → отдельный audit-log канал в TG для меня
═══════════════════════════════════════════════════════════════════════════════
СТЕК ТЕХНОЛОГИЙ (предложение)
Слой | Технология | Где живёт
──────────────────┼─────────────────────────────────────┼──────────────────────
Гипервизор | Proxmox VE 9.1.0 | host (уже стоит)
NAS-OS | ZimaOS в VM 100 (8 GB / 128 GB) | KVM (запущена сегодня)
Reverse proxy | NPM в LXC 101 (10.0.0.207) | LXC (уже работает)
Контейнер бота | LXC (Debian, ~4 GB RAM) | новый LXC 102
LLM роутер | OmniRoute (форк или свой instance) | LXC 102
Conversation DB | PostgreSQL | LXC 102 в Docker
RAG / vector DB | Qdrant или pgvector | LXC 102 в Docker
Embeddings | через API (OpenAI text-embedding или |
| Voyage AI или Sonnet с описанием) | внешние
Email клиент | MCP-imap server | LXC 102 в Docker
Web UI | Open WebUI или собственный простой | LXC 102
Telegram bot | python-telegram-bot или Telethon | LXC 102
Nextcloud Talk | Nextcloud в Docker внутри ZimaOS | VM 100 (Zima)
| + Talk-плагин + nextcloud-talk-bot |
| (или повторить мой Антошка-Talk |
| через long-poll скрипт) |
Туннель | Cloudflare Tunnel (рекомендую) | LXC 102 → CF edge
DNS | Cloudflare (бесплатно) | для домена клиента
Secrets | sops + age, либо HashiCorp Vault | LXC 102
═══════════════════════════════════════════════════════════════════════════════
ИНТЕРФЕЙСЫ И ЕДИНОЕ СОСТОЯНИЕ
3 канала входа — Web / Telegram / Nextcloud Talk — должны делить:
- Conversation history (Postgres)
- RAG-память (Qdrant/pgvector)
- Audit log (отдельная таблица в Postgres)
То есть Александр пишет в TG: «Принтер не печатает». Потом утром идёт в Web →
видит ту же беседу с продолжением. В Nextcloud Talk пишет вечером — тот же
контекст.
═══════════════════════════════════════════════════════════════════════════════
ЗНАНИЯ И ОБУЧЕНИЕ
Старт-импорт в RAG из моего vault (передам файлы через scp или git-clone):
- projects/benilux/README.md
- projects/benilux/credentials.md (только данные Александра, не моих)
- snippets/clients/alexandr-benelux-amnezia-reinstall.md
- snippets/clients/alexandr-benelux-power-recovery.md
- claude-memory/benelux.md
- claude-memory/benelux-topology.md
- decisions/2026-05-20-benelux-compromise.md (история инцидента — учит «бот
всегда сначала диагностирует, потом действует»)
- decisions/2026-05-20-amneziavpn-macos-v1-v2-incompat.md
Также добавить универсальные знания (без привязки к Александру):
- как закрыть приложение из памяти на iOS/Android/macOS
- как сделать DNS-flush на Mac
- как проверить включён ли Private Relay
- как разбудить HP-принтер из deep sleep
- типичные коды ошибок AmneziaVPN
Self-update memory: после каждой решённой проблемы бот спрашивает Александра
«Это помогло?». Если да — записывает в RAG как новое решение. Через месяц у
бота своя локальная база типичных кейсов Александра.
═══════════════════════════════════════════════════════════════════════════════
PERSONA (стиль общения)
- Имя бота — Олег решит (поле для заполнения, например «Помощник Бенелюкса»)
- Тон: спокойный, дружелюбный, на «ты», без жаргона
- НЕ использовать: «критическая ошибка», «сбой», «недоступен», «провал»
- Использовать: «немного не работает», «давай посмотрим», «починим за минуту»
- Если Александр злится — извиниться, обещать разобраться, не оправдываться
- Перед действием объяснять простыми словами что будет делать
- После действия описывать результат человеческим языком
═══════════════════════════════════════════════════════════════════════════════
ДОСТУП БОТА К СЕТИ АЛЕКСАНДРА (для диагностики)
Сейчас на пилоте — бот живёт в моей LAN dttb (10.0.0.147), к сети Александра
(192.168.1.0/24 за роутером Cudy в Бенелюксе) подключается через NetBird.
Cudy уже в моём NetBird (openwrt-benilux 100.70.207.97). Выдам боту отдельный
NetBird-setup-key с доступом только в группу Бенелюкса.
После переезда ПК к клиенту — бот в его LAN напрямую, прямой доступ к
Cudy/Cloud Key/принтеру/устройствам семьи без NetBird-overhead.
SSH-ключи к устройствам Александра:
- Cudy роутер: ssh-ключ Олежиного Mac уже добавлен; добавим ключ бота
- Cloud Key Gen2+ (192.168.1.199): только по ключу, ключ Александра не у меня
— попросим Александра добавить наш ключ через UniFi OS Console
- Mac Александра (aleksandrgrigorev): добавим публичный ключ бота
- Принтер HP M775 (192.168.1.148): через CUPS, не SSH
═══════════════════════════════════════════════════════════════════════════════
ЭТАПЫ РЕАЛИЗАЦИИ (предложение)
Этап 1: Базовая инфра (без интернета извне)
─ LXC 102 «assistant» на pve-147 (Debian, 4 GB RAM)
─ Docker внутри LXC
─ Postgres + Qdrant в Docker
─ Каркас бота (openclaw-форк, OmniRoute с моими токенами)
─ Telegram-bot создан через @BotFather (handle и токен — Олег предоставит)
─ Простейший Web UI (Open WebUI)
─ Тест: «привет, как дела?» в TG → ответ из Sonnet через OmniRoute
Этап 2: Tools (read-only)
─ ping_host, check_router_health, check_printer, check_dns
─ NetBird-setup на боте (доступ в Бенелюкс)
─ SSH-ключ бота добавлен на Cudy, Mac Александра
─ Тест: «проверь работает ли подкоп» → бот делает awg show на Cudy
Этап 3: RAG и знания
─ Импорт vault Александра в Qdrant
─ MCP-инструменты для бота: search_knowledge, recall_history
─ Тест: «как починить TG если не открывается» → бот выдаёт инструкцию из RAG
Этап 4: Tools (write-action с подтверждением)
─ Inline keyboard в TG: «Да, разрешаю» / «Нет»
─ restart_podkop, flush_dns_on_mac, restart_printer_queue
─ Audit log в отдельный TG-канал для Олега
─ Тест: «принтер не печатает» → бот предлагает действие → клик → перезапуск
Этап 5: Внешний доступ
─ Куплен домен (Олег)
─ Cloudflare Tunnel настроен (LXC 102 → CF edge → домен)
─ Web UI доступен снаружи по HTTPS через домен
─ Telegram-bot работает (он и так через TG-API, без туннеля)
Этап 6: Nextcloud Talk и почта
─ Nextcloud в Docker на ZimaOS-NAS
─ Talk бот через long-poll (по образцу моего nextcloud-talk-bot для Антошки)
─ MCP-imap: подключение к почте Александра (IMAP-сервер уточню)
─ RAG-индексация писем и документов из NAS-share
Этап 7: Документы
─ ZimaOS-NAS share по SMB
─ Бот видит файлы через MCP-filesystem
─ Индексация в RAG
Этап 8: Обучение и калибровка
─ Олег проводит 5-10 тестовых диалогов
─ Калибровка persona (тон, длина ответов, эмодзи)
─ Тест на семейных сценариях: «помоги маме закрыть рекламу в Сафари»
Этап 9: Юридическое и передача
─ Простое соглашение на 1 страницу (Олег подготовит)
─ Демо Александру по видеосвязи
─ Если покупает — выезд к нему, физический переезд ПК
═══════════════════════════════════════════════════════════════════════════════
ОТКРЫТЫЕ ВОПРОСЫ (для уточнения у Олега в новой сессии)
1. Имя бота? (Алекс, Помощник, Лёша, Билли, что-то фирменное?)
2. Telegram-handle? Олег создаст через @BotFather и даст токен
3. Домен — какой Олег купит? (alexbot.ru, ai-helper.ru, your-helper.online?)
4. VPS Spaceweb — выделить отдельный или использовать существующий?
IP, доступ?
5. Email сервис Александра — Yandex/Gmail/Mail.ru/iCloud? IMAP-host? App-pass
или OAuth?
6. Где Александр хранит документы — Mac локально / iCloud / OneDrive? Как
ассистент к ним получит доступ?
7. Cloudflare Tunnel: использовать существующий аккаунт Олега (если есть) или
создать новый под клиента?
8. Цена пилота для Александра?
9. Топ-5 типичных сценариев которые точно должны работать к демо
(TG не открывается, принтер не печатает, что ещё?)
10. Готов ли Олег дать боту admin-уровень доступа к Cudy / Cloud Key, или
только конкретные команды через sudo-whitelist?
═══════════════════════════════════════════════════════════════════════════════
КОНТЕКСТНЫЕ ССЫЛКИ (мой vault, прочитать перед стартом)
- projects/benilux/README.md — что такое объект Бенелюкс
- projects/benilux/credentials.md — пароли (для копирования в Alex-vault)
- snippets/clients/alexandr-benelux-amnezia-reinstall.md — история инцидента
- snippets/clients/alexandr-benelux-power-recovery.md — типичные кейсы семьи
- claude-memory/benelux.md — текущее состояние Cudy
- claude-memory/benelux-topology.md — карта сети + список устройств
- decisions/2026-05-20-benelux-compromise.md — урок про безопасность
- projects/dttb/proxmox-pve-147.md — карточка целевого хоста
- claude-memory/MEMORY.md — общая память (для понимания моего стиля и инфры)
═══════════════════════════════════════════════════════════════════════════════
КОНЕЦ ПРОМТА. Действуй: задай мне 10 открытых вопросов одним сообщением,
получи ответы, начни с Этапа 1. По итогам каждого этапа — короткий статус
в чате (что сделал, что проверил, что осталось).
```
---
## Что Олег решает в чате (НЕ внутри промта)
Перед открытием новой сессии:
- [ ] Создать TG-бота через @BotFather → получить токен и handle
- [ ] Купить домен (или выбрать из существующих свободных)
- [ ] Проверить статус VPS Spaceweb (есть ли свободный с белым IP)
- [ ] Решить имя бота (или дать новой сессии выбрать варианты)
- [ ] Прикинуть цену пилота — €15/мес? €25? разово €300?
## Что в новой сессии делать НЕ нужно
- ❌ Использовать мой openclaw (LXC 137) — пилот строит свой независимый бот
- ❌ Использовать мою claude-memory или мой Anthropic-API-token
- ❌ Подключать к моему vault через rclone/git
- ❌ Использовать мой Postgres/Qdrant из dttb-инфры
- ❌ Копировать в Alex-vault инфо о других клиентах (ММФБ, НИИКН и т.п.)
## Связанные файлы в vault
- [[proxmox-pve-147]] — целевой хост
- [[../benilux/README]] — объект клиента
- [[../../snippets/clients/alexandr-benelux-amnezia-reinstall]] — история работы
- [[../../snippets/clients/alexandr-benelux-power-recovery]] — типовой плейбук

View File

@@ -98,6 +98,27 @@ status: active
| Управление NetBird | `api.netbird.io`, токен `nbp_…` в `projects/dttb/credentials.md` |
| ⚠️ Безопасность | Default-политика NetBird = `All↔All` → коробка достаёт и др. сети Олега. **Для продукта — Александра в ОТДЕЛЬНЫЙ NetBird** (изоляция + автономность). |
## Инструменты Алекса — управление устройствами Александра (2026-05-31)
Алекс ходит в сеть Александра: коробка → NetBird → Cudy (`100.70.207.97`) → LAN. Прямой роут в `192.168.1.0/24` нельзя (коллизия с Знаменское/НИИКН в NetBird) → всё джампом через Cudy. Обёрнуто в скрипты на коробке (`/opt/assistant/`), Алекс зовёт их через exec (`exec-policy` = yolo). Проверено в живом диалоге (TG): «какие точки wifi по комнатам» → Алекс сам зовёт `alex-unifi.sh`.
| Скрипт | Что делает |
|---|---|
| `alex-router.sh [status\|devices\|printer\|dns]` | Cudy: статус обхода (`awg show awg0`), DHCP-аренды, пинг принтера, FakeIP-DNS. read-only |
| `alex-unifi.sh [list\|check <ip>]` | UniFi: точки/свитчи по комнатам + онлайн-проверка пингом. read-only |
| `alex-print.sh` (текст на stdin) | Печать на HP M775, кириллица через `paps`→CUPS |
### UniFi (Cloud Key Gen2+ `192.168.1.199`)
- Доступ: **SSH через Cudy**`DROPBEAR_PASSWORD='1qaz!QAZ!QAZ' dbclient -y root@192.168.1.199` (sshpass на Cudy нет; dropbear `dbclient` берёт пароль из env).
- ⚠️ Локальный UniFi-API **залочен SSO** (`/api/auth/login` = 403). Данные тянем из **MongoDB контроллера**: `mongo --quiet --port 27117 ace --eval "db.device.find({},{name:1,ip:1,model:1,_id:0}).forEach(printjson)"`. Поле `state` пустое → онлайн проверяем пингом точки с Cudy.
- 13×UAP6MP по комнатам + 7 свитчей, см. [[benelux-topology]].
### Принтер (HP LaserJet M775 `192.168.1.148`)
- 9100/515 закрыты, открыт только **IPP/631** (+AirPrint).
- Печать: **CUPS на коробке** (`apt: cups cups-client cups-filters paps`), очередь `alex` = `ipp://100.70.207.97:6310/ipp/print` (IPP Everywhere, `lpadmin -m everywhere`).
- Коробка достаёт принтер через **DNAT на Cudy**: `100.70.207.97:6310` (NetBird) → `192.168.1.148:631`. Персистентно: `/etc/nftables.d/30-alex-printer.nft` (dstnat + masquerade только для `saddr 100.70.186.192`; `fw4 check` ОК, `fw4 reload` применён).
- Кириллица: `paps --font='DejaVu Sans Mono 11'` → PostScript → CUPS. Хелпер `/opt/assistant/alex-print.sh`. Тест-лист напечатан (job completed).
## NPM (reverse proxy)
| Параметр | Значение |

View File

@@ -6,9 +6,10 @@ tags: [dttb, proxmox]
# 🖥️ Proxmox VE — Инвентаризация VM/LXC
> **Нода:** pve (10.0.0.250)
> **Основная нода:** pve (10.0.0.250) — описана ниже
> **Вторая нода (standalone):** pve (10.0.0.147) — отдельный хост i3-2100/15GB/SSD+1.8TB HDD, см. [[proxmox-pve-147]] (VM 100 ZimaOS, LXC 101 второй NPM)
>
> Последнее обновление: 2026-05-06 (VM 111 — Parsec-хост; ранее значилась как «1С»)
> Последнее обновление: 2026-05-27 (добавлена вторая нода 10.0.0.147)
---

View File

@@ -0,0 +1,115 @@
---
date: 2026-05-27
type: project
tags: [dttb, proxmox, standalone, zima, npm]
aliases: ["pve-147", "10.0.0.147", "PVE Zima"]
---
# 🖥️ Proxmox-нода `pve` (10.0.0.147)
Вторая Proxmox-нода в LAN dttb — **standalone**, не в кластере с основным `pve.dttb.ru` (10.0.0.250). Поднята как площадка под ZimaOS (NAS) и отдельный Nginx Proxy Manager.
## Хост
| Параметр | Значение |
|---|---|
| Hostname | `pve` |
| LAN IP | **10.0.0.147** |
| Gateway | 10.0.0.1 |
| OS | Proxmox VE **9.1.0** (Debian, kernel `6.17.2-1-pve`). Раньше в этой карточке версия была указана 6.17.2 — это была версия kernel, путаница исправлена 2026-05-30 |
| CPU | Intel Core i3-2100 @ 3.10GHz (Sandy Bridge, 2 ядра / 4 потока) |
| RAM | 15 GB |
| NetBird | **inactive** (нет агента) |
| SSH | `root` / `1qaz!QAZ` (через jump code-server или openclaw) |
| Web UI | <https://10.0.0.147:8006> |
## Storage
| Диск | Тип | Размер | Назначение |
|---|---|---|---|
| sda | SSD | 111.8 GB | системный (LVM `pve-root` 37 GB, swap 8 GB, data-pool 49 GB) |
| sdb | HDD | **1.8 TB** | `/mnt/pve/Work` (ext4) — Proxmox storage `Work` для образов, бэкапов, шаблонов |
## VM / LXC
### VM 100 «Zima»
| Параметр | Значение |
|---|---|
| Статус | 🔴 **stopped** (по умолчанию не стартует) |
| Machine | q35 |
| RAM | 8 GB |
| Boot disk | 128 GB |
| NIC | virtio, MAC `BC:24:11:8D:05:6A`, bridge=vmbr0, firewall=1 |
| Назначение | **ZimaOS** — NAS-операционка |
Запуск: `qm start 100`.
### LXC 101 «npm»
| Параметр | Значение |
|---|---|
| Статус | 🟢 **running** (onboot=1) |
| OS | Debian unprivileged, 1 ядро, 512 MB RAM, 4 GB rootfs |
| MAC | `BC:24:11:2E:52:B1` |
| IP | **10.0.0.207** (DHCP) |
| Назначение | Nginx Proxy Manager (Docker `jc21/nginx-proxy-manager:latest`), порты 80/81/443 |
**Это второй NPM** в инфре — основной по-прежнему в LXC 103 (10.0.0.195). Зачем второй — уточнить у Олега (вероятно staging/отдельный домен под ZimaOS).
## Что слушает на хосте
- `:22` SSH
- `:8006` Proxmox web UI
- `:25` postfix (loopback, mail-relay из VM)
- `:85` pvedaemon (loopback, internal API)
- `:111` rpcbind
- `:3128` spice-proxy (для VNC consoles)
## Доступ
- **С Mac через NetBird+jump**:
```bash
# через code-server
ssh -i ~/.ssh/id_ed25519 root@100.70.92.138
sshpass -p '1qaz!QAZ' ssh root@10.0.0.147
# или через openclaw
ssh -J root@100.70.167.54 root@10.0.0.147 # пароль 1qaz!QAZ
```
- **Web UI**: открыть `https://10.0.0.147:8006` со своего Mac, если NetBird-route на `10.0.0.0/24` есть (openclaw анонсирует — должен пройти).
## Железо
| Параметр | Значение |
|---|---|
| Материнка | **ZOTAC H61** (mini-ITX, LGA1155) |
| BIOS | AMI 4.6.4 от 13.07.2011 (не обновлять — поддержка прекращена ~2013, single-BIOS = риск кирпича, всё нужное и так есть с 2011) |
| CPU | Intel Core i3-2100 (Sandy Bridge, 2/4) |
| HDD | WDC WD20EZRX-19D8PB0 (**WD Blue 2 TB**, 5400 rpm) = `/dev/sdb` = `/mnt/pve/Work` |
## ✅ Физический визит выполнен (2026-05-30)
Олег зашёл в BIOS, включил оба пункта. Результат:
1. ✅ **Intel Virtualization Technology → Enabled** — `/dev/kvm` появилось, `kvm_intel` модуль загружен, `vmx` + `ept` + `unrestricted_guest` в `/proc/cpuinfo`
2. ✅ **Restore AC Power Loss → Power On** — хост сам поднимается после света
После ребута поднялись: хост + LXC 101 NPM. Но **VM 100 Zima не стартовала автоматически** — в её конфиге был **`kvm: 0`** (KVM отключён для конкретно этой VM) при `cpu: host` (который требует KVM). Конфликт.
**Лечение** (2026-05-30 20:08):
```bash
qm set 100 -kvm 1 # включить KVM для VM 100
qm start 100 # запустилась нормально
```
После этого ZimaOS стартует и при ручном `qm start 100`, и автоматически при boot (autostart настроен: `onboot=1, startup=order=2,up=30`).
## Открытые вопросы
- [ ] Поставить NetBird-агент чтобы хост был в overlay-сети напрямую (не нужен будет jump через code-server/openclaw)
- [ ] После включения VT-x в BIOS запустить VM 100 ZimaOS, посмотреть web UI, документировать в этом же файле
- [ ] Решить про **scsi1 (1.5 TB data-диск)** — он отсутствует физически (отдетачен 2026-05-27 из конфига VM 100 чтобы попытаться стартануть). Варианты:
- Создать заново: `qm set 100 -scsi1 Work:1500`
- Отдать ZimaOS весь /dev/sdb напрямую через disk-passthrough (тогда у ZimaOS вся 2 TB как нативный диск, без overhead qcow2)
- [ ] Уточнить роль LXC 101 npm (отдельный от основного на 10.0.0.195) — для какого домена/применения