Files
rmm-openwrt/CHECKLIST.md
T
2026-06-05 02:14:18 +03:00

295 lines
12 KiB
Markdown

# OpenWrt RMM Checklist
Практический чеклист разработки. Он дополняет `ROADMAP.md`: roadmap описывает направление, а этот файл фиксирует, что уже сделано, что делаем следующим и что считается готовностью этапов.
## Статусы
- `[x]` - сделано и проверено.
- `[~]` - частично сделано, требует доработки.
- `[ ]` - не начато.
## Текущий фокус
- [x] Первый вертикальный сценарий: enrollment -> heartbeat -> command queue -> command result.
- [x] Сервер на Go.
- [x] SQLite storage для MVP.
- [x] Shell-agent для OpenWrt.
- [x] HTTP polling вместо постоянного соединения.
- [x] Operator bearer token для MVP.
- [x] Command lifecycle: timeout, retry, history.
- [x] OpenWrt package skeleton.
- [x] Минимальный web UI.
## Этап 0: Подготовка проекта
- [x] Выбрать backend stack: Go.
- [x] Выбрать storage для MVP: SQLite.
- [x] Выбрать agent transport: outbound HTTP polling.
- [x] Выбрать agent MVP format: POSIX shell.
- [x] Создать базовую структуру репозитория.
- [x] Создать `ROADMAP.md`.
- [x] Создать документацию:
- [x] `docs/architecture.md`
- [x] `docs/api.md`
- [x] `docs/openwrt.md`
- [~] Зафиксировать минимальные версии OpenWrt.
- [ ] Создать `docs/security.md`.
- [ ] Описать threat model.
- [ ] Описать release/versioning policy.
## Этап 1: MVP Agent
- [x] Создать shell-agent.
- [x] Добавить конфигурационный файл агента через `/etc/rmm-agent.conf`.
- [x] Реализовать enrollment по shared token.
- [x] Сохранять `DEVICE_ID` и `DEVICE_TOKEN`.
- [x] Реализовать heartbeat.
- [x] Отправлять inventory:
- [x] hostname;
- [x] OpenWrt version;
- [x] `ubus call system board`;
- [x] network interfaces;
- [x] default route.
- [x] Отправлять metrics:
- [x] `ubus call system info`;
- [x] `/proc/loadavg`;
- [x] `/proc/uptime`.
- [x] Добавить расширенный сбор метрик:
- [x] memory usage в нормализованном виде;
- [x] disk usage;
- [x] WAN IP;
- [x] DHCP leases;
- [x] Wi-Fi clients;
- [x] interface counters/errors.
- [x] Реализовать polling команд.
- [x] Реализовать отправку результата команды.
- [x] Добавить allowlist команд на агенте:
- [x] `ping`;
- [x] `traceroute`;
- [x] `reboot`;
- [x] `service_restart`;
- [x] `opkg_list_installed`.
- [x] Добавить OpenWrt procd init script.
- [x] Добавить локальный буфер событий/результатов при потере связи.
- [x] Добавить backoff при сетевых ошибках.
- [x] Добавить lock-файл, чтобы не запускать несколько копий агента.
- [ ] Добавить shell syntax check в CI/dev scripts.
## Этап 2: MVP Server API
- [x] Создать Go module.
- [x] Реализовать HTTP server.
- [x] Реализовать SQLite migrations.
- [x] Реализовать device enrollment.
- [x] Реализовать per-device bearer token.
- [x] Реализовать heartbeat endpoint.
- [x] Хранить текущее состояние устройства.
- [x] Реализовать command queue.
- [x] Реализовать shell-friendly `commands/next`.
- [x] Реализовать command result endpoint.
- [x] Реализовать device list endpoint.
- [x] Реализовать device detail endpoint.
- [x] Реализовать create command endpoint.
- [x] Добавить allowlist команд на сервере.
- [x] Добавить operator bearer token:
- [x] `RMM_OPERATOR_TOKEN`;
- [x] защита `/api/devices`;
- [x] защита `/api/devices/{id}`;
- [x] защита `/api/devices/{id}/commands`.
- [x] Разнести сервер по пакетам:
- [x] `server/cmd/rmm-server`;
- [x] `server/internal/httpapi`;
- [x] `server/internal/store`;
- [x] `server/internal/model`.
- [x] Добавить API smoke test.
- [x] Проверить `go build ./server/cmd/rmm-server`.
- [x] Проверить `go test ./...`.
- [x] Добавить endpoint истории команд: `GET /api/devices/{id}/commands`.
- [x] Добавить command detail endpoint.
- [x] Добавить timeout для `claimed` команд.
- [x] Добавить повторную выдачу зависших команд.
- [x] Добавить статус `cancelled`.
- [x] Добавить отмену команды.
- [x] Добавить basic audit log.
- [x] Добавить request id.
- [x] Добавить structured logging.
- [ ] Добавить graceful shutdown.
## Этап 3: MVP Web UI
- [x] Выбрать frontend stack: static HTML/CSS/JS.
- [x] Создать `web/`.
- [x] Добавить настройку API base URL: same-origin API.
- [x] Добавить ввод/хранение operator token для MVP.
- [x] Реализовать список устройств.
- [x] Показать online/offline.
- [x] Реализовать карточку устройства.
- [x] Показать inventory.
- [x] Показать metrics.
- [x] Показать network interfaces.
- [x] Реализовать запуск команды `ping`.
- [x] Реализовать запуск команды `traceroute`.
- [x] Показать историю команд.
- [x] Показать результат команды.
- [x] Добавить basic error states.
- [x] Добавить loading states.
- [x] Проверить UI в браузере.
## Этап 4: Command Lifecycle
- [x] Добавить поля/индексы для lifecycle, если текущей схемы недостаточно.
- [x] Определить таймаут `claimed` команд.
- [x] Вернуть зависшие `claimed` команды в `queued` или `expired`.
- [x] Добавить `expires_at`.
- [x] Добавить `attempt_count`.
- [x] Добавить `max_attempts`.
- [x] Добавить `cancelled`.
- [x] Добавить endpoint отмены команды.
- [x] Добавить command history per device.
- [x] Покрыть lifecycle тестами.
- [x] Обновить `docs/api.md`.
## Этап 5: OpenWrt Package
- [x] Создать `agent/package/Makefile`.
- [x] Описать package metadata.
- [x] Установить `/usr/bin/rmm-agent`.
- [x] Установить `/etc/init.d/rmm-agent`.
- [x] Добавить default config.
- [ ] Решить формат конфигурации:
- [x] `/etc/rmm-agent.conf`;
- [ ] `/etc/config/rmm-agent`.
- [ ] Добавить postinst/prerm scripts.
- [~] Проверить установку на OpenWrt.
- [x] Описать build/install flow в `docs/openwrt.md`.
## Этап 6: Security Hardening
- [x] Shared enrollment token для MVP.
- [x] Per-device bearer token.
- [x] Operator bearer token для MVP.
- [x] Allowlist команд на сервере.
- [x] Allowlist команд на агенте.
- [x] Redaction sensitive command output.
- [x] Audit log для operator actions.
- [ ] Audit log для agent actions.
- [ ] Token rotation для устройств.
- [ ] Secure enrollment flow вместо постоянного shared token.
- [ ] Hash device tokens в базе.
- [ ] Rate limits.
- [ ] Replay protection.
- [ ] Command signatures.
- [ ] RBAC.
- [ ] Organization isolation.
- [ ] mTLS или signed device tokens.
## Этап 7: OpenWrt Configuration Management
- [x] Спроектировать safe UCI operation model.
- [x] Добавить read-only UCI inventory command.
- [x] Добавить backup текущей конфигурации.
- [x] Добавить preview diff.
- [x] Добавить apply/commit/revert workflow.
- [x] Добавить restore из последнего локального backup.
- [x] Добавить commit with connectivity confirmation.
- [x] Управление Wi-Fi SSID.
- [ ] Управление firewall rules.
- [x] Управление DHCP.
- [ ] Управление static routes.
- [ ] Тесты на недопустимые изменения.
## Этап 8: Monitoring And Alerts
- [x] Online/offline detection на основе `last_seen_at`.
- [x] Базовые system metrics через heartbeat.
- [ ] История heartbeat.
- [x] Хранение временных рядов метрик.
- [x] WAN status.
- [x] Packet loss checks.
- [x] Latency checks.
- [x] Alert rules.
- [x] Alert state.
- [ ] Email notification.
- [ ] Telegram notification.
- [ ] Webhook notification.
## Этап 9: Remote Access
- [x] Спроектировать reverse tunnel.
- [x] Выбрать транспорт tunnel.
- [x] Временный SSH-доступ через сервер.
- [ ] Browser-based terminal.
- [x] TCP port forwarding.
- [x] Доступ к LuCI через tunnel.
- [x] Ограничение доступа по времени.
- [x] Audit events для remote sessions.
## Этап 10: Packages And Updates
- [x] Команда `opkg_list_installed`.
- [ ] Нормализованный список установленных пакетов.
- [x] `opkg update`.
- [x] Проверка доступных обновлений.
- [x] Установка пакета.
- [x] Удаление пакета.
- [ ] История изменений пакетов.
- [x] Защита опасных операций подтверждением.
- [~] Совместимость с конкретными версиями OpenWrt.
## Этап 11: Fleet Management
- [x] Группы устройств.
- [x] Теги.
- [x] Поиск и фильтры.
- [x] Массовые команды.
- [ ] Rollout limits.
- [ ] Canary-группы.
- [ ] Политики.
- [ ] Шаблоны конфигурации.
- [ ] Отчет о применении изменений.
## Этап 12: Production Hardening
- [x] Structured logging.
- [ ] Server metrics.
- [ ] Health checks глубже, чем `/healthz`.
- [ ] DB backup/restore.
- [ ] Версионированные миграции.
- [ ] Graceful shutdown.
- [~] Retry policies.
- [ ] E2E tests agent-server.
- [ ] Load tests.
- [ ] CI pipeline.
- [ ] Release artifacts.
- [ ] OpenWrt package build automation.
## Definition Of Done: MVP
- [x] Agent enrollment работает.
- [x] Heartbeat работает.
- [x] Basic inventory передается.
- [x] Device list API работает.
- [x] Device detail API работает.
- [x] Command queue работает.
- [x] Command result работает.
- [x] Allowlist команд есть на сервере и агенте.
- [x] Offline detection есть на server API.
- [x] Basic audit log.
- [x] Web UI показывает устройство online.
- [x] OpenWrt package устанавливает агент как service.
- [x] MVP проверен на реальном OpenWrt-устройстве.
## Ближайшие задачи
1. [ ] Собрать `rmm-agent.ipk` в OpenWrt buildroot.
2. [x] Проверить агента на реальном OpenWrt.
3. [x] Создать минимальный web UI.
4. [x] Добавить расширенные metrics/inventory.
5. [x] Добавить `max_attempts` и более явный command expiry.
6. [x] Начать UCI managed configuration.
7. [x] Добавить UCI backup command.
8. [x] Добавить UCI preview command.
9. [x] Добавить UCI presets в UI.
10. [x] Улучшить command output UX.
11. [x] Добавить agent lock/backoff/result buffer.