Files
rmm-openwrt/CHECKLIST.md
2026-06-05 02:35:45 +03:00

12 KiB
Raw Blame History

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.md
    • docs/api.md
    • docs/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.
  • [~] Начать Go-agent migration:
    • skeleton agent/go/cmd/rmm-agent;
    • config /etc/rmm-agent.conf;
    • lock/backoff/graceful shutdown;
    • enrollment/heartbeat;
    • inventory/metrics MVP;
    • command polling/result/spool;
    • перенос allowlist команд из shell-agent;
    • OpenWrt cross-build/package integration.

Этап 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: static HTML/CSS/JS.
  • Создать web/.
  • Добавить настройку API base URL: same-origin API.
  • Добавить ввод/хранение 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-устройстве.

Ближайшие задачи

  1. Собрать rmm-agent.ipk в OpenWrt buildroot.
  2. Проверить агента на реальном OpenWrt.
  3. Создать минимальный web UI.
  4. Добавить расширенные metrics/inventory.
  5. Добавить max_attempts и более явный command expiry.
  6. Начать UCI managed configuration.
  7. Добавить UCI backup command.
  8. Добавить UCI preview command.
  9. Добавить UCI presets в UI.
  10. Улучшить command output UX.
  11. Добавить agent lock/backoff/result buffer.