Skip to Content
ReferenceSchéma receptury

Schéma receptury

Receptury OpenFactory používají JSON ve snake_case. Kanonický formát má malou obálku na nejvyšší úrovni, objekt os pro konfiguraci operačního systému a pole scenarios pro ověření po sestavení.

Validace ukazuje, že rozpoznaná pole mají přijatelný tvar. Nedokazuje, že každý balíček existuje, že každé požadované chování bylo zohledněno, ani že obraz a testy uspějí. Neznámá pole mohou být kvůli zpětné kompatibilitě ignorována; vždy zkontrolujte normalizovanou recepturu vrácenou produktem.

Kanonická obálka

{ "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"] }

Nepoužívejte pole camelCase jako baseImage nebo startupScripts. Validátor kompatibility přijme některé starší ploché receptury, ale normalizovaný výstup vnořuje pole OS pod os. Nové integrace by měly posílat kanonický formát.

Pole nejvyšší úrovně

PoleTypPovinné/výchozíVýznam
namestringPovinné; 3–100 znakůStabilní interní název receptury
display_namestring nebo nullVolitelné; 1–100 znakůNázev pro lidi
descriptionstring""Zamýšlený výsledek a hranice
base_imagestringdebian-trixieDistribuce/cíl sestavení; použijte aktuální seznam v konzoli
taskstring nebo nullVolitelnéOperační cíl
executorstring nebo nullVolitelnéTechnologie, která má úkol provést
use_casestringGeneralHlavní případ použití
hardwareobjectVýchozí hodnoty nížePožadavky na nasazení
osobjectPrázdný/výchozí objektBalíčky OS, uživatelé, služby, zabezpečení, desktop, installer a skripty
scenariosarray[]Testovací topologie a cíle
publish_tostring array["local"]Požadovaná cílová umístění výstupu
deliveryobject{}Další deklarovaná konfigurace doručení
communitybooleanfalsePožádat o viditelnost na community marketplace; pravidla publikace platí dál

Pokročilá pole závislá na cíli existují pro remasterování zdrojového ISO, payloady hosta Proxmox, provenienci politik a integrace doručení. Použijte editor nebo kontrakt API nasazené verze místo kopírování starého příkladu.

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 je pc, phone nebo raspberry_pi; podporované hodnoty zařízení závisí na cíli. architecture je x86_64 nebo aarch64. Hodnoty GPU pojmenovávají podporovaného dodavatele nebo kombinaci. Jde o deklarované požadavky, ne o důkaz, že výsledný obraz byl testován na odpovídajícím fyzickém hardwaru.

Objekt OS

Běžná pole os:

PoleTypÚčel
featuresstring arrayRegistrované moduly funkcí
packagesstring arrayNativní balíčky k požádání
excluded_packagesstring arrayBalíčky, které po rozšíření funkcí nesmí být přítomny
custom_packagesarrayZdrojová repozitáře k zabalení podporovanou cestou sestavení
package_overridesarrayExplicitní operace add, remove nebo replace
extra_reposstring arrayDalší repozitáře; důvěra a práce s klíči stále vyžadují kontrolu
servicesarrayPojmenované zapnutí a konfigurace služeb
usersarrayÚčty a skupiny lokální v obrazu
securityobjectDeklarované volby hardeningu, šifrování, auditu, SELinux a fail2ban
networkingobjectZáměr rozhraní a sítě
desktop_settingsobjectVzhled a chování desktopu
brandingobjectIdentita distribuce a assety
runtimeobjectIdentita init/služby/správce balíčků
bootobjectArgumenty jádra a volby GRUB
installerobjectKonfigurace install-to-disk
persistenceobjectTrvalost live a politika zón
integrityobjectPožadovaná nastavení dm-verity, Secure Boot a IMA/EVM
file_attachmentsarrayDříve nahrané soubory identifikované přes file_id
startup_scriptsarrayOmezené jednorázové skripty systemd
time_zonestring nebo nullNastavení časového pásma obrazu

Přítomnost pole integrity nebo security vyjadřuje záměr konfigurace. Není důkazem, že mechanismus byl vytvořen, vynucen za běhu nebo kvalifikován pro režim compliance. Vyžadujte odpovídající důkazy ze sestavení a testů.

Uživatelé

{ "os": { "users": [ { "username": "deploy", "full_name": "Deployment Operator", "groups": ["sudo"], "shell": "/bin/bash" } ] } }

Jména uživatelů a skupin jsou omezena na bezpečné znaky a délku linuxových účtů. Bez nastaveného password vznikne účet uzamčený heslem pro workflow pouze s klíčem nebo s přihlašovacími údaji až při nasazení. Vyhněte se nešifrovaným přihlašovacím údajům v uložených recepturách.

Služby

{ "os": { "services": [ { "name": "ssh", "enabled": true, "config": { "port": 22, "disable_password_auth": true } } ] } }

config závisí na službě. Syntakticky platný klíč může generátor, který ho neimplementuje, ignorovat. Ověřte normalizovanou recepturu, vygenerovanou konfiguraci a chování hosta.

Zabezpečení a 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" } } }

Typy installeru závisí na cíli (calamares, anaconda nebo elster-mobile). Po zapnutí installeru následuje test instalace na jednorázový disk; ikona na live desktopu nedokazuje, že instalace funguje.

Startup Scripts

{ "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" } ] } }

Přijme se nejvýše 32 startup skriptů. Příkazy musí být neprázdné a nesmí obsahovat bajty NUL. Považujte je za shell kód s právy root, pokud run_as neříká jinak; kontrolujte idempotenci, quoting, selhání sítě a únik tajemství.

Scénáře a assertions

{ "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} } ] } ] } ] }

Scénář může také definovat topology s VM a sítěmi, testy ve formátu benchmark a nastavení CIS. Chybějící topologie defaultuje na běžnou cestu s jednou VM. Assertions potřebují lidsky čitelný description a parametry podle typu. Neznámé typy assertions mohou projít parsováním schématu; ověřte podporu v runneru, než je berete jako důkaz.

Úplný minimální příklad

{ "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"] }

Workflow validace

  1. Validujte JSON v aktuálním editoru receptur, API nebo MCP nástroji validate_recipe.
  2. Porovnejte vrácenou normalizovanou recepturu s původním požadavkem.
  3. Zahozená neznámá pole považujte za chybu receptury, ne za úspěšnou konfiguraci.
  4. Sestavujte až poté, co jsou explicitní požadavky zohledněny.
  5. Prohlédněte vygenerované důkazy a spusťte assertions proti výslednému hostu.

Viz Váš první build pro postup při selhání a obnově stažení.