
Sistema di provisioning e condivisione per SBC
Provisioner è un assistente di provisioning orientato agli sviluppatori per computer a scheda singola (SBC), in particolare piattaforme basate su U-Boot.

Fornisce un ambiente autonomo per:
Il modello operativo è intenzionalmente semplice:
Una scheda => Un'istanza di Provisioner
Provisioner viene eseguito vicino all'hardware ed espone l'accesso remoto controllato agli sviluppatori attraverso un'interfaccia sicura e multiplexata.
Il progetto è composto da due elementi principali:
| Componente | Esegue su | Ruolo |
|---|---|---|
| Provisioner | Host / nodo lab | Piano di controllo, gateway seriale, servizi di provisioning |
| goinit | Scheda target | Agente di flashing e runtime di provisioning |
Provisioner orchestra i flussi di lavoro; goinit li esegue localmente sulla scheda.
Provisioner collega tre piani operativi:
Ciò consente un controllo continuo dal bootloader al provisioning runtime.
Possiede la connessione console fisica e fornisce:
La seriale rimane il percorso di controllo di fallback definitivo.
I servizi integrati forniscono artefatti di avvio:
TFTP
HTTP
Provisioner espone un endpoint SSH unificato che funge sia da livello di accesso che di controllo.
Tutte le interazioni remote sono multiplexate su una singola connessione SSH e governate tramite autenticazione con chiave pubblica.
I canali multiplexati includono:
Governance dell'accesso:
SSH quindi trasporta sia:
Al centro del modello I/O di Provisioner si trova il router, un artefatto software componibile che gestisce i flussi terminali tra produttori e consumatori.
Tutto il traffico della console passa attraverso questo componente piuttosto che direttamente tra i sottosistemi.
I client del router possono:
Esempi:
Il router distingue tra due varianti di client:
| Tipo | Caratteristiche | Esempi |
|---|---|---|
| Umano | Interattivo, consapevole ANSI | Terminali SSH |
| Macchina | Deterministico, I/O raw | Script, automazione |
Ciò consente una gestione del flusso su misura per usabilità vs determinismo.
Unicast
Multicast
Più ingegneri possono osservare la stessa console senza interferenze.
Un osservatore componibile dedicato attenua le sfumature del terminale ANSI:
Implementato come plugin anziché logica hardcoded.
La shell di monitoraggio fornisce il controllo interattivo della scheda.
> ?
? : 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
Le regole possono essere definite in ASCII o HEX:
filter add ascii Hello Hello World
filter add hex 48656c6c6f 48656c6c6f 576f726c64
I filtri possono:
Ciò è utile per l'automazione dell'avvio e la normalizzazione della console.
Provisioner supporta il trasferimento diretto di file seriali:
send_serial <file> <mode> [dest_path]
Modalità:
| Modalità | Metodo |
|---|---|
| plain | Base64 |
| gzip | Base64 + compressione |
| xmodem_unix | XMODEM tramite rx |
| xmodem_uboot | XMODEM tramite loadx |
Dipendenze verificate tramite:
send_serial_deps
Utility richieste:
Il motore di trasferimento deriva dall'utility standalone send_console-ng, adattata in Provisioner. Consente il trasferimento di file quando:
Capacità:
Rispetto all'utility originale:
stdbuf e cat rimossedd introdotto per portabilitàCiò consente a Provisioner di operare anche in stati di scheda gravemente degradati.
Motore expect simile ad assembly:
Ideale per flussi di login e avvio.
Esegue programmi esterni legati al flusso seriale.
Modalità:
| Modalità | Comportamento |
|---|---|
| line | Buffer di riga |
| char | Flusso byte |
Esiste un'integrazione leggera per la prenotazione, ma non è un focus primario del progetto. Utilizzata solo per:
Provisioner non mira a diventare un pianificatore completo del laboratorio.
Provisioner è scritto in Go e si cross-compila facilmente.
make
GOARCH=arm64 make
Nessuna toolchain esterna richiesta.
Distribuibile su: