12 KiB
12 KiB
OpenWrt RMM Checklist
Практический чеклист разработки. Он дополняет ROADMAP.md: roadmap описывает направление, а этот файл фиксирует, что уже сделано, что делаем следующим и что считается готовностью этапов.
Статусы
[x]- сделано и проверено.[~]- частично сделано, требует доработки.[ ]- не начато.
Текущий фокус
- Первый вертикальный сценарий: enrollment -> heartbeat -> command queue -> command result.
- Сервер на Go.
- SQLite storage для MVP.
- Shell-agent для OpenWrt.
- HTTP polling вместо постоянного соединения.
- Operator bearer token для MVP.
- [~] Command lifecycle: timeout, retry, history.
- OpenWrt package skeleton.
- [~] Минимальный web UI.
Этап 0: Подготовка проекта
- Выбрать backend stack: Go.
- Выбрать storage для MVP: SQLite.
- Выбрать agent transport: outbound HTTP polling.
- Выбрать agent MVP format: POSIX shell.
- Создать базовую структуру репозитория.
- Создать
ROADMAP.md. - Создать документацию:
docs/architecture.mddocs/api.mddocs/openwrt.md
- [~] Зафиксировать минимальные версии OpenWrt.
- Создать
docs/security.md. - Описать threat model.
- Описать release/versioning policy.
Этап 1: MVP Agent
- Создать shell-agent.
- Добавить конфигурационный файл агента через
/etc/rmm-agent.conf. - Реализовать enrollment по shared token.
- Сохранять
DEVICE_IDиDEVICE_TOKEN. - Реализовать heartbeat.
- Отправлять inventory:
- hostname;
- OpenWrt version;
ubus call system board;- network interfaces;
- default route.
- Отправлять metrics:
ubus call system info;/proc/loadavg;/proc/uptime.
- [~] Добавить расширенный сбор метрик:
- memory usage в нормализованном виде;
- disk usage;
- WAN IP;
- DHCP leases;
- Wi-Fi clients;
- interface counters/errors.
- Реализовать polling команд.
- Реализовать отправку результата команды.
- Добавить allowlist команд на агенте:
ping;traceroute;reboot;service_restart;opkg_list_installed.
- Добавить OpenWrt procd init script.
- Добавить локальный буфер событий/результатов при потере связи.
- Добавить backoff при сетевых ошибках.
- Добавить lock-файл, чтобы не запускать несколько копий агента.
- Добавить shell syntax check в CI/dev scripts.
Этап 2: MVP Server API
- Создать Go module.
- Реализовать HTTP server.
- Реализовать SQLite migrations.
- Реализовать device enrollment.
- Реализовать per-device bearer token.
- Реализовать heartbeat endpoint.
- Хранить текущее состояние устройства.
- Реализовать command queue.
- Реализовать shell-friendly
commands/next. - Реализовать command result endpoint.
- Реализовать device list endpoint.
- Реализовать device detail endpoint.
- Реализовать create command endpoint.
- Добавить allowlist команд на сервере.
- Добавить operator bearer token:
RMM_OPERATOR_TOKEN;- защита
/api/devices; - защита
/api/devices/{id}; - защита
/api/devices/{id}/commands.
- Разнести сервер по пакетам:
server/cmd/rmm-server;server/internal/httpapi;server/internal/store;server/internal/model.
- Добавить API smoke test.
- Проверить
go build ./server/cmd/rmm-server. - Проверить
go test ./.... - Добавить endpoint истории команд:
GET /api/devices/{id}/commands. - Добавить command detail endpoint.
- Добавить timeout для
claimedкоманд. - Добавить повторную выдачу зависших команд.
- Добавить статус
cancelled. - Добавить отмену команды.
- Добавить basic audit log.
- Добавить request id.
- Добавить structured logging.
- Добавить graceful shutdown.
Этап 3: MVP Web UI
- Выбрать frontend stack.
- Создать
web/. - [~] Добавить настройку API base URL.
- Добавить ввод/хранение operator token для MVP.
- Реализовать список устройств.
- Показать online/offline.
- Реализовать карточку устройства.
- Показать inventory.
- Показать metrics.
- Показать network interfaces.
- Реализовать запуск команды
ping. - Реализовать запуск команды
traceroute. - Показать историю команд.
- Показать результат команды.
- Добавить basic error states.
- Добавить loading states.
- Проверить UI в браузере.
Этап 4: Command Lifecycle
- Добавить поля/индексы для lifecycle, если текущей схемы недостаточно.
- Определить таймаут
claimedкоманд. - Вернуть зависшие
claimedкоманды вqueuedилиexpired. - Добавить
expires_at. - Добавить
attempt_count. - Добавить
max_attempts. - Добавить
cancelled. - Добавить endpoint отмены команды.
- Добавить command history per device.
- Покрыть lifecycle тестами.
- Обновить
docs/api.md.
Этап 5: OpenWrt Package
- Создать
agent/package/Makefile. - Описать package metadata.
- Установить
/usr/bin/rmm-agent. - Установить
/etc/init.d/rmm-agent. - Добавить default config.
- Решить формат конфигурации:
/etc/rmm-agent.conf;/etc/config/rmm-agent.
- Добавить postinst/prerm scripts.
- Проверить установку на OpenWrt.
- Описать build/install flow в
docs/openwrt.md.
Этап 6: Security Hardening
- Shared enrollment token для MVP.
- Per-device bearer token.
- Operator bearer token для MVP.
- Allowlist команд на сервере.
- Allowlist команд на агенте.
- 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.
- Добавить read-only UCI inventory command.
- Добавить backup текущей конфигурации.
- [~] Добавить preview diff.
- [~] Добавить apply/commit/revert workflow.
- Добавить restore из последнего локального backup.
- Добавить commit with connectivity confirmation.
- [~] Управление Wi-Fi SSID.
- Управление firewall rules.
- [~] Управление DHCP.
- Управление static routes.
- Тесты на недопустимые изменения.
Этап 8: Monitoring And Alerts
- 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
- Команда
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
- Agent enrollment работает.
- Heartbeat работает.
- Basic inventory передается.
- Device list API работает.
- Device detail API работает.
- Command queue работает.
- Command result работает.
- Allowlist команд есть на сервере и агенте.
- Offline detection есть на server API.
- Basic audit log.
- Web UI показывает устройство online.
- OpenWrt package устанавливает агент как service.
- MVP проверен на реальном OpenWrt-устройстве.
Ближайшие задачи
- Собрать
rmm-agent.ipkв OpenWrt buildroot. - Проверить агента на реальном OpenWrt.
- Создать минимальный web UI.
- Добавить расширенные metrics/inventory.
- Добавить
max_attemptsи более явный command expiry. - Начать UCI managed configuration.
- Добавить UCI backup command.
- Добавить UCI preview command.
- Добавить UCI presets в UI.
- Улучшить command output UX.
- Добавить agent lock/backoff/result buffer.