
Система развертывания и совместного использования для SBC
Provisioner — это инструмент для подготовки одноплатных компьютеров (SBC), ориентированный на разработчиков, особенно на платформах на базе U-Boot.

Он предоставляет самодостаточную среду для:
Модель работы намеренно проста:
Одна плата => Один экземпляр Provisioner
Provisioner работает близко к оборудованию и предоставляет разработчикам контролируемый удалённый доступ через защищённый мультиплексированный интерфейс.
Проект состоит из двух основных элементов:
| Компонент | Запускается на | Роль |
|---|---|---|
| Provisioner | Хост / лабораторный узел | Плоскость управления, последовательный шлюз, сервисы развёртывания |
| goinit | Целевая плата | Агент прошивки и среда выполнения развёртывания |
Provisioner координирует рабочие процессы; goinit выполняет их локально на плате.
Provisioner связывает три операционные плоскости:
Это обеспечивает непрерывное управление от загрузчика до развёртывания во время выполнения.
Владеет физическим подключением консоли и предоставляет:
Последовательный интерфейс остаётся основным резервным каналом управления.
Встроенные сервисы предоставляют загрузочные артефакты:
TFTP
HTTP
Provisioner предоставляет единую SSH-точку, выступающую в качестве как уровня доступа, так и уровня управления.
Все удалённые взаимодействия мультиплексируются через одно SSH-соединение и управляются аутентификацией по открытому ключу.
Мультиплексированные каналы включают:
Управление доступом:
Таким образом, SSH переносит как:
В сердце модели ввода-вывода Provisioner находится маршрутизатор — подключаемый программный компонент, который управляет потоками терминала между производителями и потребителями.
Весь консольный трафик проходит через этот компонент, а не напрямую между подсистемами.
Клиенты маршрутизатора могут:
Примеры:
Маршрутизатор различает два типа клиентов:
| Тип | Характеристики | Примеры |
|---|---|---|
| Человек | Интерактивный, поддерживает ANSI | SSH-терминалы |
| Машина | Детерминированный, сырой ввод-вывод | Скрипты, автоматизация |
Это позволяет адаптировать обработку потоков для удобства использования или детерминизма.
Unicast
Multicast
Несколько инженеров могут наблюдать за одной и той же консолью без помех.
Выделенный подключаемый наблюдатель смягчает нюансы ANSI-терминалов:
Реализован как плагин, а не как жестко закодированная логика.
Оболочка монитора обеспечивает интерактивное управление платой.
> ?
? : this text
board_stat : report last goinit board stat; board must have printed PROVISIONER_MGMT_*
echo : echoes back the argument
enuser : enable user for tunnel
exec_assm : Load and executes the specified assm script
exec_scr : Load and executes the specified script
exec_state : returns the state of the specified script
exit : exit this shell
filter : Filter commands: type 'filter help' for more info
help : this text
log_serial : copies in a file ser.log all sent and received from the serial. Note: overwrites previous.
log_serial_stop : Requires serila log subsystem to stop.
send_serial : send file over serial: send_serial <file> <plain|gzip|xmodem_unix|xmodem_uboot> [dest_path]
send_serial_deps : check remote deps for send_serial plain/gzip: stty, dd, base64, gzip, rm (or busybox).
toff : command PDU using snmp to turn off the board
ton : command PDU using snmp to turn on the board
tterm : terminate serial tunnel connection
ulist : list user state for tunnel
>
filter help
available: enable, disable, default, show, add, remove, help
Правила могут быть определены в ASCII или HEX:
filter add ascii Hello Hello World
filter add hex 48656c6c6f 48656c6c6f 576f726c64
Фильтры могут:
Это полезно для автоматизации загрузки и нормализации консоли.
Provisioner поддерживает прямую последовательную передачу файлов:
send_serial <file> <mode> [dest_path]
Режимы:
| Режим | Метод |
|---|---|
| plain | Base64 |
| gzip | Base64 + сжатие |
| xmodem_unix | XMODEM через rx |
| xmodem_uboot | XMODEM через loadx |
Зависимости проверяются через:
send_serial_deps
Требуемые утилиты:
Движок передачи произошёл от автономной утилиты send_console-ng, адаптированной в Provisioner. Он обеспечивает передачу файлов, когда:
Возможности:
По сравнению с оригинальной утилитой:
stdbuf и catdd для портативностиЭто позволяет Provisioner работать даже в сильно деградированных состояниях платы.
Движок expect, подобный ассемблеру:
Лучше всего подходит для процессов входа и загрузки.
Выполняет внешние программы, привязанные к последовательному потоку.
Режимы:
| Режим | Поведение |
|---|---|
| line | Буферизованный по строкам |
| char | Байтовый поток |
Существует лёгкая интеграция с бронированием, но это не основная цель проекта. Используется только для:
Provisioner не стремится стать полноценным планировщиком лаборатории.
Provisioner написан на Go и легко кросс-компилируется.
make
GOARCH=arm64 make
Внешние цепочки инструментов не требуются.
Разворачивается на: