Recept séma
Az OpenFactory receptek snake_case JSON-t használnak. A kanonikus formát kis
felső szintű burkot, os objektumot az operációs rendszer beállításához és
scenarios tömböt a build utáni ellenőrzéshez tartalmaz.
A validáció azt mutatja, hogy a felismert mezők elfogadható alakúak. Nem bizonyítja, hogy minden csomag létezik, minden kért viselkedés szerepel, vagy hogy a kép és a tesztek sikeresek lesznek. Az ismeretlen mezők a visszafelé kompatibilitás miatt figyelmen kívül hagyhatók; mindig ellenőrizze a termék által visszaadott normalizált receptet.
Kanonikus burkolat
{
"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"]
}Ne használjon camelCase mezőket, mint a baseImage vagy a startupScripts. A
kompatibilitási validátor elfogad néhány régebbi lapos receptet, de a normalizált kimenet
az OS mezőket az os alá ágyazza. Az új integrációk a kanonikus formátumot küldjék.
Felső szintű mezők
| Mező | Típus | Kötelező/alapértelmezett | Jelentés |
|---|---|---|---|
name | string | Kötelező; 3–100 karakter | Stabil belső receptnév |
display_name | string vagy null | Opcionális; 1–100 karakter | Embernek szóló név |
description | string | "" | Tervezett eredmény és határ |
base_image | string | debian-trixie | Disztribúció/build cél; használja a konzol aktuális listáját |
task | string vagy null | Opcionális | Operatív cél |
executor | string vagy null | Opcionális | A feladatot végző technológia |
use_case | string | General | Elsődleges használati eset |
hardware | object | Alapértelmezések lent | Telepítési követelmények |
os | object | Üres/alapértelmezett objektum | OS csomagok, felhasználók, szolgáltatások, biztonság, asztal, installer és szkriptek |
scenarios | array | [] | Teszt topológiák és célok |
publish_to | string array | ["local"] | Kért kimeneti célok |
delivery | object | {} | További deklarált kézbesítési beállítás |
community | boolean | false | Közösségi marketplace láthatóság kérése; a publikálási szabály továbbra is érvényes |
Célfüggő haladó mezők léteznek forrás ISO remasterhez, Proxmox vendég payloadokhoz, policy származáshoz és kézbesítési integrációkhoz. Használja a telepített verzió szerkesztőjét vagy API szerződését a régi példa másolása helyett.
Hardware
{
"hardware": {
"platform": "pc",
"architecture": "x86_64",
"gpu": null,
"min_cpu_cores": 2,
"min_memory_gb": 4,
"min_storage_gb": 16,
"nic_count": 1
}
}A platform értéke pc, phone vagy raspberry_pi; a támogatott eszközértékek célfüggők.
Az architecture értéke x86_64 vagy aarch64. A GPU értékek támogatott szállítót vagy
kombinációt neveznek meg. Ezek deklarált követelmények, nem bizonyíték arra, hogy az eredmény
képet megfelelő fizikai hardveren tesztelték.
OS objektum
Gyakori os mezők:
| Mező | Típus | Cél |
|---|---|---|
features | string array | Regisztrált funkciómodulok |
packages | string array | Kért natív csomagok |
excluded_packages | string array | Csomagok, amelyek a funkcióbővítés után hiányozniuk kell |
custom_packages | array | Forrás repók csomagolása a támogatott build útvonalon |
package_overrides | array | Explicit add, remove vagy replace műveletek |
extra_repos | string array | További repók; a bizalom és kulcskezelés továbbra is felülvizsgálatot igényel |
services | array | Elnevezett szolgáltatás engedélyezés és konfiguráció |
users | array | Képen lokális fiókok és csoportok |
security | object | Deklarált hardening, titkosítás, audit, SELinux és fail2ban választások |
networking | object | Interfész és hálózati szándék |
desktop_settings | object | Asztal megjelenése és viselkedése |
branding | object | Disztribúció identitás és eszközök |
runtime | object | Init/szolgáltatás/csomagkezelő identitás |
boot | object | Kernel argumentumok és GRUB választások |
installer | object | Install-to-disk konfiguráció |
persistence | object | Live perzisztencia és zónapolitika |
integrity | object | Kért dm-verity, Secure Boot és IMA/EVM beállítások |
file_attachments | array | Korábban feltöltött fájlok file_id alapján |
startup_scripts | array | Korlátozott systemd one-shot szkriptek |
time_zone | string vagy null | Kép időzóna beállítása |
Az integrity vagy security mező jelenléte konfigurációs szándék. Nem bizonyíték arra, hogy a mechanizmus létrejött, futásidőben érvényesült, vagy megfelel egy compliance rendszernek. Kérjen illeszkedő build és teszt bizonyítékot.
Felhasználók
{
"os": {
"users": [
{
"username": "deploy",
"full_name": "Deployment Operator",
"groups": ["sudo"],
"shell": "/bin/bash"
}
]
}
}A felhasználó- és csoportnevek biztonságos Linux fiók karakterekre és hosszra korlátozódnak.
Ha a password nincs beállítva, jelszóval zárolt fiók jön létre kulcs-only vagy telepítéskori
hitelesítő adat folyamatokhoz. Kerülje a plain text hitelesítő adatokat mentett receptekben.
Szolgáltatások
{
"os": {
"services": [
{
"name": "ssh",
"enabled": true,
"config": {
"port": 22,
"disable_password_auth": true
}
}
]
}
}A config szolgáltatásfüggő. Egy szintaktikailag érvényes kulcsot figyelmen kívül hagyhat
egy olyan generátor, amely nem implementálja. Ellenőrizze a normalizált receptet, a generált
konfigurációt és a vendég viselkedését.
Biztonság és 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"
}
}
}Az installer típusok célfüggők (calamares, anaconda vagy elster-mobile). Az installer
bekapcsolása után egyszer használatos lemezre telepítő teszt következzen; egy ikon a live
asztalon nem bizonyítja, hogy a telepítés működik.
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"
}
]
}
}Legfeljebb 32 startup script fogadható el. A parancsok nem lehetnek üresek, és nem tartalmazhatnak
NUL bájtokat. Root jogú shell kódként kezelje őket, hacsak a run_as mást nem mond; ellenőrizze
az idempotenciát, az idézőjelezést, a hálózati hibát és a titkok kitettségét.
Forgatókönyvek és 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}
}
]
}
]
}
]
}A forgatókönyv definiálhat topology-t VM-ekkel és hálózatokkal, benchmark formátumú teszteket
és CIS beállításokat is. A hiányzó topológia az alapértelmezett egy VM-es útvonalat jelenti.
Az assertions ember által olvasható description-t és típusspecifikus paramétereket igényel.
Az ismeretlen assertion típusok túlélhetik a séma feldolgozást; erősítse meg a runner támogatását,
mielőtt bizonyítékként kezelné őket.
Teljes minimális példa
{
"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"]
}Validációs folyamat
- Validálja a JSON-t az aktuális recept szerkesztőben, API-n vagy MCP
validate_recipeeszközön. - Hasonlítsa össze a visszakapott normalizált receptet az eredeti kéréssel.
- Az eldobott ismeretlen mezőket recept hibának tekintse, ne sikeres konfigurációnak.
- Csak akkor buildeljen, ha az explicit követelmények szerepelnek.
- Vizsgálja meg a generált bizonyítékot, és futtassa az assertions-t az eredmény vendégen.
Lásd az Első build oldalt hiba és letöltés helyreállítási útmutatóért.