Schema ricetta
Le ricette OpenFactory usano JSON snake_case. Il formato canonico ha piccola
envelope top-level, oggetto os per configurazione sistema operativo e array
scenarios per verifica post-build.
La validazione prova che campi riconosciuti abbiano forme accettabili. Non prova che ogni pacchetto esista, ogni comportamento richiesto sia rappresentato o immagine e test riescano. Campi sconosciuti possono essere ignorati per compatibilità backward, quindi ispeziona sempre ricetta normalizzata restituita dal prodotto.
Envelope canonica
{
"name": "debian-web-check",
"display_name": "Debian Web Check",
"description": "Small Debian image with explicit smoke tests.",
"base_image": "debian-trixie",
"use_case": "Server evaluation",
"hardware": {},
"os": {},
"scenarios": [],
"publish_to": ["local"]
}Non usare campi camelCase come baseImage o startupScripts. Il validator
compatibilità accetta alcune ricette flat più vecchie, ma output normalizzato
annida campi OS sotto os. Nuove integrazioni devono inviare formato canonico.
Campi top-level
| Campo | Tipo | Required/default | Significato |
|---|---|---|---|
name | string | Required; 3–100 caratteri | Nome ricetta interno stabile |
display_name | string o null | Opzionale; 1–100 caratteri | Nome human-facing |
description | string | "" | Esito previsto e confine |
base_image | string | debian-trixie | Target distribuzione/build; usa elenco console corrente |
task | string o null | Opzionale | Obiettivo operativo |
executor | string o null | Opzionale | Tecnologia attesa per eseguire task |
use_case | string | General | Caso d’uso primario |
hardware | object | Default mostrati sotto | Requisiti deploy |
os | object | Oggetto empty/default | Pacchetti OS, utenti, servizi, sicurezza, desktop, installer e script |
scenarios | array | [] | Topologie test e obiettivi |
publish_to | string array | ["local"] | Destinazioni output richieste |
delivery | object | {} | Configurazione delivery dichiarata aggiuntiva |
community | boolean | false | Richiede visibilità marketplace community; policy pubblicazione si applica ancora |
Campi avanzati specifici target esistono per remastering ISO sorgente, payload guest Proxmox, provenienza policy e integrazioni delivery. Usa editor o contratto API per release deployata invece di copiare esempio vecchio.
Hardware
{
"hardware": {
"platform": "pc",
"architecture": "x86_64",
"gpu": null,
"min_cpu_cores": 2,
"min_memory_gb": 4,
"min_storage_gb": 16,
"nic_count": 1
}
}platform è pc, phone o raspberry_pi; valori device supportati sono
specifici target. architecture è x86_64 o aarch64. Valori GPU nominano
vendor supportato o combinazione vendor. Sono requisiti dichiarati, non prova che
immagine risultante sia testata su hardware fisico corrispondente.
Oggetto OS
Campi os comuni sono:
| Campo | Tipo | Scopo |
|---|---|---|
features | string array | Moduli feature registrati |
packages | string array | Pacchetti nativi da richiedere |
excluded_packages | string array | Pacchetti che devono restare assenti dopo espansione feature |
custom_packages | array | Repository sorgente da impacchettare tramite percorso build supportato |
package_overrides | array | Operazioni add, remove o replace esplicite |
extra_repos | string array | Repository aggiuntivi; fiducia e gestione chiavi richiedono ancora revisione |
services | array | Abilitazione e configurazione servizio nominati |
users | array | Account e gruppi locali immagine |
security | object | Scelte hardening, encryption, audit, SELinux e fail2ban dichiarate |
networking | object | Intento interfaccia e rete |
desktop_settings | object | Aspetto e comportamento desktop |
branding | object | Identità distribuzione e risorse |
runtime | object | Identità init/servizio/package-manager |
boot | object | Argomenti kernel e scelte GRUB |
installer | object | Configurazione install-to-disk |
persistence | object | Persistenza live e policy zone |
integrity | object | Impostazioni dm-verity, Secure Boot e IMA/EVM richieste |
file_attachments | array | File caricati in precedenza identificati da file_id |
startup_scripts | array | Script systemd one-shot delimitati |
time_zone | string o null | Impostazione fuso orario immagine |
Presenza campo integrity o security è intento configurazione. Non è evidenza che meccanismo sia prodotto, applicato a runtime o qualificato per regime conformità. Richiedi evidenza build e test corrispondente.
Utenti
{
"os": {
"users": [
{
"username": "deploy",
"full_name": "Deployment Operator",
"groups": ["sudo"],
"shell": "/bin/bash"
}
]
}
}Nomi utente e gruppo sono limitati a caratteri account Linux sicuri e lunghezza.
Lasciare password non impostato crea account bloccato password per workflow
chiave-only o credenziale al deploy. Evita credenziali plaintext in ricette
salvate.
Servizi
{
"os": {
"services": [
{
"name": "ssh",
"enabled": true,
"config": {
"port": 22,
"disable_password_auth": true
}
}
]
}
}config è specifico servizio. Chiave sintatticamente valida può essere ignorata
da generatore che non la implementa. Verifica ricetta normalizzata, configurazione
generata e comportamento guest.
Sicurezza e installer
{
"os": {
"security": {
"hardening_level": "standard",
"disk_encryption": false,
"audit_logging": true,
"selinux": false,
"fail2ban": true
},
"installer": {
"enabled": false,
"type": "calamares",
"desktop_launcher": true,
"bootloader": "grub",
"delivery": [],
"user_setup": "build_time"
}
}
}Tipi installer dipendono da target (calamares, anaconda o
elster-mobile). Abilitare installer deve essere seguito da test install su
disco usa e getta; icona in desktop live non prova che installazione funzioni.
Script di avvio
{
"os": {
"startup_scripts": [
{
"name": "write-build-marker",
"description": "Create a local marker after networking is available.",
"command": "install -m 0644 /dev/null /var/lib/example-ready",
"packages": [],
"run_as": "root",
"after": "network.target"
}
]
}
}Sono accettati al massimo 32 script di avvio. Comandi devono essere non vuoti e
non possono contenere byte NUL. Trattali come codice shell con capacità root salvo
diversa indicazione in run_as; rivedi idempotenza, quoting, fallimento rete ed
esposizione secret.
Scenari e asserzioni
{
"scenarios": [
{
"id": "primary-smoke",
"name": "Primary image smoke test",
"enabled": true,
"tests": ["boot", "login", "packages"],
"custom_tests": [
{
"description": "Confirm SSH is enabled on the configured port.",
"assertions": [
{
"type": "service_enabled",
"description": "The SSH service starts at boot.",
"params": {"service": "ssh"}
},
{
"type": "port_listening",
"description": "The guest listens on TCP port 22.",
"params": {"port": 22}
}
]
}
]
}
]
}Uno scenario può anche definire topology con VM e reti, test formato benchmark
e impostazioni CIS. Topologia omessa default al normale percorso single-VM.
Asserzioni richiedono descrizione leggibile e params specifici tipo. Tipi
asserzione sconosciuti possono sopravvivere parsing schema, quindi conferma
supporto runner prima di trattarli come evidenza.
Esempio minimo completo
{
"name": "debian-web-check",
"display_name": "Debian Web Check",
"description": "Debian image with SSH, curl, and explicit smoke tests.",
"base_image": "debian-trixie",
"use_case": "Server evaluation",
"hardware": {
"platform": "pc",
"architecture": "x86_64",
"min_cpu_cores": 2,
"min_memory_gb": 4,
"min_storage_gb": 16,
"nic_count": 1
},
"os": {
"features": ["ssh"],
"packages": ["curl"],
"users": [
{
"username": "deploy",
"groups": ["sudo"],
"shell": "/bin/bash"
}
],
"services": [
{
"name": "ssh",
"enabled": true,
"config": {"port": 22, "disable_password_auth": true}
}
],
"security": {
"hardening_level": "standard",
"audit_logging": true
},
"installer": {"enabled": false}
},
"scenarios": [
{
"id": "primary-smoke",
"name": "Primary image smoke test",
"enabled": true,
"tests": ["boot", "login", "packages"]
}
],
"publish_to": ["local"]
}Flusso validazione
- Valida JSON tramite editor ricetta corrente, API o tool MCP
validate_recipe. - Confronta ricetta normalizzata restituita con richiesta originale.
- Tratta campi unknown scartati come difetto ricetta, non configurazione riuscita.
- Builda solo dopo che requisiti espliciti sono rappresentati.
- Ispeziona evidenza generata ed esegui asserzioni sul guest risultante.
Vedi La tua prima build per guida recovery fallimento e download.