
Système de provisionnement et de partage pour SBCs
Provisioner est un assistant de provisionnement orienté développeur pour les ordinateurs monocartes (SBC), en particulier les plateformes basées sur U-Boot.

Il fournit un environnement autonome pour :
Le modèle opérationnel est intentionnellement simple :
Une carte => Une instance de Provisioner
Provisioner s'exécute près du matériel et expose un accès distant contrôlé aux développeurs via une interface sécurisée et multiplexée.
Le projet est composé de deux éléments principaux :
| Composant | Exécuté sur | Rôle |
|---|---|---|
| Provisioner | Hôte / nœud de labo | Plan de contrôle, passerelle série, services de provisionnement |
| goinit | Carte cible | Agent de flashage & environnement d'exécution de provisionnement |
Provisioner orchestre les workflows ; goinit les exécute localement sur la carte.
Provisioner sert de pont entre trois plans opérationnels :
Cela permet un contrôle continu, du chargeur d'amorçage au provisionnement à l'exécution.
Possède la connexion console physique et fournit :
La liaison série reste le chemin de contrôle de repli ultime.
Les services intégrés fournissent les artefacts de démarrage :
TFTP
HTTP
Provisioner expose un point de terminaison SSH unifié agissant à la fois comme couche d'accès et de contrôle.
Toutes les interactions à distance sont multiplexées sur une seule connexion SSH et gouvernées par l'authentification par clé publique.
Les canaux multiplexés incluent :
Gouvernance d'accès :
SSH transporte donc à la fois :
Au cœur du modèle d'E/S de Provisioner se trouve le routeur, un artefact logiciel enfichable qui agit comme courtier pour les flux de terminal entre producteurs et consommateurs.
Tout le trafic console transite par ce composant plutôt que directement entre sous-systèmes.
Les clients du routeur peuvent :
Exemples :
Le routeur distingue deux variantes de clients :
| Type | Caractéristiques | Exemples |
|---|---|---|
| Humain | Interactif, compatible ANSI | Terminaux SSH |
| Machine | Déterministe, E/S brutes | Scripts, automatisation |
Cela permet une gestion adaptée des flux pour l'utilisabilité vs le déterminisme.
Unicast
Multicast
Plusieurs ingénieurs peuvent observer la même console sans interférence.
Un observateur enfichable dédié atténue les nuances des terminaux ANSI :
Implémenté comme un plugin plutôt que comme une logique codée en dur.
Le shell du moniteur offre un contrôle interactif de la carte.
> ?
? : 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
Les règles peuvent être définies en ASCII ou en HEX :
filter add ascii Hello Hello World
filter add hex 48656c6c6f 48656c6c6f 576f726c64
Les filtres peuvent :
Ceci est utile pour l'automatisation du démarrage et la normalisation de la console.
Provisioner prend en charge le transfert direct de fichiers série :
send_serial <file> <mode> [dest_path]
Modes :
| Mode | Méthode |
|---|---|
| plain | Base64 |
| gzip | Base64 + compression |
| xmodem_unix | XMODEM via rx |
| xmodem_uboot | XMODEM via loadx |
Dépendances vérifiées via :
send_serial_deps
Utilitaires requis :
Le moteur de transfert est dérivé de l'utilitaire autonome send_console-ng, adapté dans Provisioner. Il permet le transfert de fichiers lorsque :
Capacités :
Comparé à l'utilitaire d'origine :
stdbuf et cat suppriméesdd introduit pour la portabilitéCela permet à Provisioner de fonctionner même dans des états de carte gravement dégradés.
Moteur de type expect :
Idéal pour les flux de connexion et de démarrage.
Exécute des programmes externes liés au flux série.
Modes :
| Mode | Comportement |
|---|---|
| line | Tamponné par ligne |
| char | Flux d'octets |
Une intégration légère de réservation existe mais n'est pas un objectif principal du projet. Utilisée uniquement pour :
Provisioner ne vise pas à devenir un planificateur de laboratoire complet.
Provisioner est écrit en Go et se compile facilement en croisé.
make
GOARCH=arm64 make
Aucune chaîne d'outils externe requise.
Déployable sur :