
Sistema de aprovisionamiento y compartición para SBCs
Provisioner es un asistente de aprovisionamiento orientado a desarrolladores para ordenadores de placa única (SBCs), particularmente plataformas basadas en U-Boot.

Proporciona un entorno autocontenido para:
El modelo operativo es intencionadamente simple:
Una placa => Una instancia de Provisioner
Provisioner se ejecuta cerca del hardware y expone acceso remoto controlado a los desarrolladores a través de una interfaz segura y multiplexada.
El proyecto se compone de dos elementos principales:
| Componente | Se ejecuta en | Rol |
|---|---|---|
| Provisioner | Host / nodo de laboratorio | Plano de control, puerta de enlace serie, servicios de aprovisionamiento |
| goinit | Placa objetivo | Agente de grabación y entorno de ejecución de aprovisionamiento |
Provisioner orquesta los flujos de trabajo; goinit los ejecuta localmente en la placa.
Provisioner conecta tres planos operativos:
Esto permite un control continuo desde el gestor de arranque hasta el aprovisionamiento en tiempo de ejecución.
Posee la conexión física de consola y proporciona:
La conexión serie sigue siendo la ruta de control de último recurso.
Servicios embebidos que proporcionan artefactos de arranque:
TFTP
HTTP
Provisioner expone un punto final SSH unificado que actúa como capa de acceso y control.
Todas las interacciones remotas están multiplexadas sobre una única conexión SSH y gobernadas mediante autenticación de clave pública.
Los canales multiplexados incluyen:
Gobernanza de acceso:
Por lo tanto, SSH transporta tanto:
En el corazón del modelo de E/S de Provisioner se encuentra el enrutador, un artefacto de software conectable que gestiona los flujos de terminal entre productores y consumidores.
Todo el tráfico de consola fluye a través de este componente en lugar de directamente entre subsistemas.
Los clientes del enrutador pueden:
Ejemplos:
El enrutador distingue entre dos variantes de cliente:
| Tipo | Características | Ejemplos |
|---|---|---|
| Humano | Interactivo, consciente de ANSI | Terminales SSH |
| Máquina | Determinista, E/S cruda | Scripts, automatización |
Esto permite un manejo de flujo adaptado para usabilidad versus determinismo.
Unidifusión
Multidifusión
Varios ingenieros pueden observar la misma consola sin interferencias.
Un vigilante conectable dedicado mitiga los matices del terminal ANSI:
Implementado como un plugin en lugar de lógica fija.
El shell del monitor proporciona control interactivo de la placa.
> ?
? : 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
Las reglas pueden definirse en ASCII o HEX:
filter add ascii Hello Hello World
filter add hex 48656c6c6f 48656c6c6f 576f726c64
Los filtros pueden:
Esto es útil para la automatización de arranque y la normalización de la consola.
Provisioner soporta transferencia directa de archivos por serie:
send_serial <file> <mode> [dest_path]
Modos:
| Modo | Método |
|---|---|
| plain | Base64 |
| gzip | Base64 + compresión |
| xmodem_unix | XMODEM vía rx |
| xmodem_uboot | XMODEM vía loadx |
Dependencias verificadas mediante:
send_serial_deps
Utilidades requeridas:
El motor de transferencia deriva de la utilidad independiente send_console-ng, adaptada a Provisioner. Permite la transferencia de archivos cuando:
Capacidades:
En comparación con la utilidad original:
stdbuf y cat eliminadasdd introducido por portabilidadEsto permite que Provisioner opere incluso en estados de placa gravemente degradados.
Motor de espera (expect) tipo ensamblador:
Ideal para flujos de inicio de sesión y arranque.
Ejecuta programas externos vinculados al flujo serie.
Modos:
| Modo | Comportamiento |
|---|---|
| line | Con búfer de línea |
| char | Flujo de bytes |
Existe una integración ligera de reservas, pero no es un enfoque principal del proyecto. Se utiliza solo para:
Provisioner no pretende convertirse en un planificador completo de laboratorio.
Provisioner está escrito en Go y se compila de forma cruzada fácilmente.
make
GOARCH=arm64 make
No se requieren cadenas de herramientas externas.
Se puede desplegar en: