
Bereitstellungs- und Freigabesystem für SBCs
Provisioner ist ein entwicklerorientierter Bereitstellungsassistent für Einplatinencomputer (SBCs), insbesondere für U-Boot-basierte Plattformen.

Es bietet eine eigenständige Umgebung, um:
Das Betriebsmodell ist bewusst einfach:
Ein Board => Eine Provisioner-Instanz
Provisioner läuft hardwarenah und bietet Entwicklern kontrollierten Fernzugriff über eine sichere, gemultiplexte Schnittstelle.
Das Projekt besteht aus zwei primären Elementen:
| Komponente | Läuft auf | Rolle |
|---|---|---|
| Provisioner | Host / Labor-Knoten | Steuerungsebene, serielles Gateway, Bereitstellungsdienste |
| goinit | Ziel-Board | Flash-Agent und Bereitstellungslaufzeitumgebung |
Provisioner orchestriert Workflows; goinit führt sie lokal auf dem Board aus.
Provisioner verbindet drei Betriebsebenen:
Dies ermöglicht eine kontinuierliche Kontrolle vom Bootloader bis zur Laufzeitbereitstellung.
Besitzt die physische Konsolenverbindung und bietet:
Seriell bleibt der ultimative Rückfall-Steuerungspfad.
Eingebettete Dienste stellen Boot-Artefakte bereit:
TFTP
HTTP
Provisioner stellt einen einheitlichen SSH-Endpunkt bereit, der sowohl als Zugriffs- als auch als Steuerungsebene fungiert.
Alle Ferninteraktionen werden über eine einzige SSH-Verbindung gemultiplext und durch Public-Key-Authentifizierung gesteuert.
Gemultiplexte Kanäle umfassen:
Zugriffsverwaltung:
SSH überträgt daher beides:
Im Kern des I/O-Modells von Provisioner sitzt der Router, ein steckbares Software-Artefakt, das Terminal-Ströme zwischen Produzenten und Konsumenten vermittelt.
Der gesamte Konsolenverkehr fließt durch diese Komponente und nicht direkt zwischen Subsystemen.
Router-Clients können:
Beispiele:
Der Router unterscheidet zwischen zwei Client-Varianten:
| Typ | Merkmale | Beispiele |
|---|---|---|
| Menschlich | Interaktiv, ANSI-bewusst | SSH-Terminals |
| Maschinell | Deterministisch, rohe E/A | Skripte, Automatisierung |
Dies ermöglicht eine maßgeschneiderte Stream-Behandlung für Benutzerfreundlichkeit vs. Determinismus.
Unicast
Multicast
Mehrere Ingenieure können dieselbe Konsole ohne Störungen beobachten.
Ein dedizierter, steckbarer Watcher mildert ANSI-Terminal-Nuancen:
Als Plugin implementiert, nicht als fest codierte Logik.
Die Monitor-Shell bietet interaktive Board-Steuerung.
> ?
? : 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
Regeln können in ASCII oder HEX definiert werden:
filter add ascii Hello Hello World
filter add hex 48656c6c6f 48656c6c6f 576f726c64
Filter können:
Dies ist nützlich für Boot-Automatisierung und Konsolennormalisierung.
Provisioner unterstützt direkte serielle Dateiübertragung:
send_serial <file> <mode> [dest_path]
Modi:
| Mode | Methode |
|---|---|
| plain | Base64 |
| gzip | Base64 + Komprimierung |
| xmodem_unix | XMODEM über rx |
| xmodem_uboot | XMODEM über loadx |
Abhängigkeiten werden geprüft über:
send_serial_deps
Erforderliche Programme:
Die Übertragungs-Engine stammt von dem eigenständigen Dienstprogramm send_console-ng, adaptiert für Provisioner. Sie ermöglicht Dateiübertragungen, wenn:
Fähigkeiten:
Im Vergleich zum ursprünglichen Dienstprogramm:
stdbuf- und cat-Abhängigkeiten entferntdd zur Portabilität eingeführtDies ermöglicht Provisioner, selbst in stark degradierten Board-Zuständen zu operieren.
Assembler-ähnliche Expect-Engine:
Am besten geeignet für Anmelde- und Boot-Abläufe.
Führt externe Programme aus, die an den seriellen Stream gebunden sind.
Modi:
| Mode | Verhalten |
|---|---|
| line | Zeilenweise gepuffert |
| char | Bytestrom |
Eine einfache Reservierungsintegration existiert, ist aber kein primärer Projektfokus. Verwendet nur für:
Provisioner zielt nicht darauf ab, ein vollständiger Laborplaner zu werden.
Provisioner ist in Go geschrieben und lässt sich leicht cross-kompilieren.
make
GOARCH=arm64 make
Keine externen Toolchains erforderlich.
Einsetzbar auf: