
Sistema de provisionamento e compartilhamento para SBCs
Provisioner é um companheiro de provisionamento focado em desenvolvedores para placas de computador de placa única (SBCs), particularmente plataformas baseadas em U-Boot.

Ele fornece um ambiente autocontido para:
O modelo operacional é intencionalmente simples:
Uma placa => Uma instância do Provisioner
O Provisioner é executado próximo ao hardware e expõe acesso remoto controlado aos desenvolvedores através de uma interface multiplexada e segura.
O projeto é composto por dois elementos principais:
| Componente | Executa em | Função |
|---|---|---|
| Provisioner | Host / nó de lab | Plano de controlo, gateway serial, serviços de provisionamento |
| goinit | Placa alvo | Agente de flashing & runtime de provisionamento |
O Provisioner orquestra os fluxos de trabalho; o goinit executa-os localmente na placa.
O Provisioner faz a ponte entre três planos operacionais:
Isso permite controlo contínuo desde o bootloader até ao provisionamento em tempo de execução.
Detém a conexão física da consola e fornece:
A serial continua a ser o caminho de controlo de recurso final.
Serviços incorporados fornecem artefactos de boot:
TFTP
HTTP
O Provisioner expõe um endpoint SSH unificado que atua como camada de acesso e controlo.
Todas as interações remotas são multiplexadas numa única conexão SSH e governadas por autenticação de chave pública.
Os canais multiplexados incluem:
Governação de acesso:
O SSH transporta, portanto, ambos:
No centro do modelo de E/S do Provisioner está o roteador, um artefacto de software conectável que intermedeia fluxos de terminal entre produtores e consumidores.
Todo o tráfego da consola passa por este componente, em vez de diretamente entre subsistemas.
Os clientes do roteador podem:
Exemplos:
O roteador distingue entre duas variantes de cliente:
| Tipo | Características | Exemplos |
|---|---|---|
| Humano | Interativo, ciente de ANSI | Terminais SSH |
| Máquina | Determinístico, E/S bruta | Scripts, automação |
Isso permite tratamento de fluxo adaptado para usabilidade vs. determinismo.
Unicast
Multicast
Vários engenheiros podem observar a mesma consola sem interferência.
Um observador conectável dedicado mitiga nuances de terminais ANSI:
Implementado como um plugin, não como lógica hardcoded.
O shell do monitor fornece controlo interativo da placa.
> ?
? : este texto
board_stat : reporta o último estado da placa goinit; a placa deve ter imprimido PROVISIONER_MGMT_*
echo : devolve o argumento
enuser : ativa o túnel para o utilizador
exec_assm : Carrega e executa o script assm especificado
exec_scr : Carrega e executa o script especificado
exec_state : devolve o estado do script especificado
exit : sai deste shell
filter : Comandos de filtro: digite 'filter help' para mais info
help : este texto
log_serial : copia para um ficheiro ser.log todos os dados enviados e recebidos pela serial. Nota: substitui o anterior.
log_serial_stop : Requer paragem do subsistema de registo serial.
send_serial : envia ficheiro pela serial: send_serial <file> <plain|gzip|xmodem_unix|xmodem_uboot> [dest_path]
send_serial_deps : verifica dependências remotas para send_serial plain/gzip: stty, dd, base64, gzip, rm (ou busybox).
toff : comando PDU usando SNMP para desligar a placa
ton : comando PDU usando SNMP para ligar a placa
tterm : termina a conexão do túnel serial
ulist : lista o estado do túnel por utilizador
>
filter help
disponíveis: enable, disable, default, show, add, remove, help
As regras podem ser definidas em ASCII ou HEX:
filter add ascii Hello Hello World
filter add hex 48656c6c6f 48656c6c6f 576f726c64
Os filtros podem:
Isso é útil para automação de boot e normalização da consola.
O Provisioner suporta transferência direta de ficheiros pela serial:
send_serial <file> <mode> [dest_path]
Modos:
| Modo | Método |
|---|---|
| plain | Base64 |
| gzip | Base64 + compressão |
| xmodem_unix | XMODEM via rx |
| xmodem_uboot | XMODEM via loadx |
Dependências verificadas via:
send_serial_deps
Utilitários necessários:
O motor de transferência deriva do utilitário standalone send_console-ng, adaptado para o Provisioner. Ele permite transferência de ficheiros quando:
Capacidades:
Comparado ao utilitário original:
stdbuf e cat removidasdd introduzido para portabilidadeIsso permite que o Provisioner opere mesmo em estados de placa severamente degradados.
Motor expect semelhante a assembly:
Mais adequado para fluxos de login e boot.
Executa programas externos vinculados ao fluxo serial.
Modos:
| Modo | Comportamento |
|---|---|
| line | Bufferizado por linha |
| char | Fluxo de bytes |
Existe uma integração leve de reserva, mas não é um foco principal do projeto. Usada apenas para:
O Provisioner não pretende tornar-se um agendador de laboratório completo.
O Provisioner é escrito em Go e compila de forma cruzada facilmente.
make
GOARCH=arm64 make
Não são necessários toolchains externos.
Implementável em: