Files
rmm-openwrt/CHECKLIST.md
2026-06-04 15:26:43 +03:00

295 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
- [~] Command lifecycle: timeout, retry, history.
- [x] OpenWrt package skeleton.
- [~] Минимальный 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`.
- [~] Добавить расширенный сбор метрик:
- [ ] memory usage в нормализованном виде;
- [ ] disk usage;
- [ ] WAN IP;
- [ ] DHCP leases;
- [ ] Wi-Fi clients;
- [ ] 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.
- [ ] Добавить request id.
- [ ] Добавить structured logging.
- [ ] Добавить graceful shutdown.
## Этап 3: MVP Web UI
- [ ] Выбрать frontend stack.
- [x] Создать `web/`.
- [~] Добавить настройку API base URL.
- [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`.
- [ ] Добавить `expires_at`.
- [x] Добавить `attempt_count`.
- [ ] Добавить `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.
- [~] 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
- [~] Спроектировать safe UCI operation model.
- [x] Добавить read-only UCI inventory command.
- [x] Добавить backup текущей конфигурации.
- [~] Добавить preview diff.
- [~] Добавить apply/commit/revert workflow.
- [x] Добавить restore из последнего локального backup.
- [x] Добавить commit with connectivity confirmation.
- [~] Управление Wi-Fi SSID.
- [ ] Управление firewall rules.
- [~] Управление DHCP.
- [ ] Управление static routes.
- [ ] Тесты на недопустимые изменения.
## Этап 8: Monitoring And Alerts
- [x] Online/offline detection на основе `last_seen_at`.
- [~] Базовые system metrics через heartbeat.
- [ ] История heartbeat.
- [ ] Хранение временных рядов метрик.
- [ ] WAN status.
- [ ] Packet loss checks.
- [ ] Latency checks.
- [ ] Alert rules.
- [ ] Alert state.
- [ ] Email notification.
- [ ] Telegram notification.
- [ ] Webhook notification.
## Этап 9: Remote Access
- [ ] Спроектировать reverse tunnel.
- [ ] Выбрать транспорт tunnel.
- [ ] Временный SSH-доступ через сервер.
- [ ] Browser-based terminal.
- [ ] TCP port forwarding.
- [ ] Доступ к LuCI через tunnel.
- [ ] Ограничение доступа по времени.
- [ ] Audit events для remote sessions.
## Этап 10: Packages And Updates
- [x] Команда `opkg_list_installed`.
- [ ] Нормализованный список установленных пакетов.
- [ ] `opkg update`.
- [ ] Проверка доступных обновлений.
- [ ] Установка пакета.
- [ ] Удаление пакета.
- [ ] История изменений пакетов.
- [ ] Защита опасных операций подтверждением.
- [ ] Совместимость с конкретными версиями OpenWrt.
## Этап 11: Fleet Management
- [ ] Группы устройств.
- [ ] Теги.
- [ ] Поиск и фильтры.
- [ ] Массовые команды.
- [ ] Rollout limits.
- [ ] Canary-группы.
- [ ] Политики.
- [ ] Шаблоны конфигурации.
- [ ] Отчет о применении изменений.
## Этап 12: Production Hardening
- [ ] 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.
- [ ] MVP проверен на реальном OpenWrt-устройстве.
## Ближайшие задачи
1. [ ] Собрать `rmm-agent.ipk` в OpenWrt buildroot.
2. [ ] Проверить агента на реальном OpenWrt.
3. [x] Создать минимальный web UI.
4. [ ] Добавить расширенные metrics/inventory.
5. [ ] Добавить `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.