Skip to Content
Referenceสคีมาสูตร

สคีมาสูตร

สูตร OpenFactory ใช้ JSON แบบ snake_case รูปแบบมาตรฐานมี ซองระดับบนขนาดเล็ก อ็อบเจ็กต์ os สำหรับการกำหนดค่าระบบปฏิบัติการ และ อาร์เรย์ scenarios สำหรับการตรวจหลังบิลด์

การตรวจความถูกต้องพิสูจน์ว่ารูปร่างของฟิลด์ที่รู้จักยอมรับได้ ไม่ได้ พิสูจน์ว่าทุกแพ็กเกจมีอยู่ ทุกพฤติกรรมที่ขอถูกแทนแล้ว หรือ อิมเมจและการทดสอบจะสำเร็จ ฟิลด์ที่ไม่รู้จักอาจถูกเพิกเฉยเพื่อความเข้ากันได้ ย้อนหลัง ดังนั้นให้ตรวจสูตรที่ทำให้เป็นมาตรฐานซึ่งผลิตภัณฑ์คืนมา เสมอ

ซองมาตรฐาน

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

อย่าใช้ฟิลด์ camelCase เช่น baseImage หรือ startupScripts ตัวตรวจ ความเข้ากันได้ยอมรับสูตรแบบแบนแบบเก่าบางรายการ แต่เอาต์พุตที่ทำให้เป็นมาตรฐาน ซ้อนฟิลด์ OS ใต้ os การรวมใหม่ควรส่งรูปแบบมาตรฐาน

ฟิลด์ระดับบน

ฟิลด์ประเภทจำเป็น/ค่าเริ่มต้นความหมาย
nameสตริงจำเป็น 3–100 ตัวอักษรชื่อสูตรภายในที่เสถียร
display_nameสตริงหรือ nullทางเลือก 1–100 ตัวอักษรชื่อที่มนุษย์เห็น
descriptionสตริง""ผลลัพธ์ที่ตั้งใจและขอบเขต
base_imageสตริงdebian-trixieเป้าหมายดิสทริบิวชัน/บิลด์ ใช้รายการคอนโซลปัจจุบัน
taskสตริงหรือ nullทางเลือกเป้าหมายการปฏิบัติงาน
executorสตริงหรือ nullทางเลือกเทคโนโลยีที่คาดว่าจะทำงานนั้น
use_caseสตริงGeneralกรณีใช้หลัก
hardwareอ็อบเจ็กต์ค่าเริ่มต้นด้านล่างข้อกำหนดการปรับใช้
osอ็อบเจ็กต์อ็อบเจ็กต์ว่าง/ค่าเริ่มต้นแพ็กเกจ OS ผู้ใช้ บริการ ความปลอดภัย เดสก์ท็อป ตัวติดตั้ง และสคริปต์
scenariosอาร์เรย์[]โทโพโลยีและวัตถุประสงค์การทดสอบ
publish_toอาร์เรย์สตริง["local"]จุดหมายเอาต์พุตที่ขอ
deliveryอ็อบเจ็กต์{}การกำหนดค่าการส่งที่ประกาศเพิ่ม
communityบูลีนfalseขอให้มองเห็นในตลาดชุมชน นโยบายการเผยแพร่ยังใช้

มีฟิลด์เฉพาะเป้าหมายขั้นสูงสำหรับรีมาสเตอร์ ISO ต้นทาง เพย์โหลดแขก Proxmox แหล่งที่มาของนโยบาย และการรวมการส่ง ใช้ตัวแก้ไขหรือสัญญา API ของรุ่นที่ปรับใช้แล้ว แทนการคัดลอกตัวอย่างเก่า

ฮาร์ดแวร์

{ "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 หรือ raspberry_pi ค่าอุปกรณ์ที่รองรับเป็น เฉพาะเป้าหมาย architecture เป็น x86_64 หรือ aarch64 ค่า GPU ตั้งชื่อผู้ขาย หรือชุดผู้ขายที่รองรับ สิ่งเหล่านี้เป็นข้อกำหนดที่ประกาศ ไม่ใช่ หลักฐานว่าอิมเมจที่ได้ถูกทดสอบบนฮาร์ดแวร์จริงที่ตรงกัน

อ็อบเจ็กต์ OS

ฟิลด์ os ที่พบบ่อยคือ:

ฟิลด์ประเภทจุดประสงค์
featuresอาร์เรย์สตริงโมดูลฟีเจอร์ที่ลงทะเบียน
packagesอาร์เรย์สตริงแพ็กเกจพื้นเมืองที่ขอ
excluded_packagesอาร์เรย์สตริงแพ็กเกจที่ต้องยังไม่มีหลังขยายฟีเจอร์
custom_packagesอาร์เรย์ที่เก็บต้นทางที่จะแพ็กผ่านเส้นทางบิลด์ที่รองรับ
package_overridesอาร์เรย์การเพิ่ม ถอด หรือแทนที่อย่างชัดเจน
extra_reposอาร์เรย์สตริงที่เก็บเพิ่ม ความเชื่อถือและการจัดการกุญแจยังต้องทบทวน
servicesอาร์เรย์การเปิดใช้และกำหนดค่าบริการที่มีชื่อ
usersอาร์เรย์บัญชีและกลุ่มในอิมเมจ
securityอ็อบเจ็กต์ทางเลือกการชุบแข็ง การเข้ารหัส การตรวจ (audit) SELinux และ fail2ban ที่ประกาศ
networkingอ็อบเจ็กต์ความตั้งใจของอินเทอร์เฟซและเครือข่าย
desktop_settingsอ็อบเจ็กต์ลักษณะและพฤติกรรมเดสก์ท็อป
brandingอ็อบเจ็กต์ตัวตนและสินทรัพย์ของดิสทริบิวชัน
runtimeอ็อบเจ็กต์ตัวตน init/บริการ/ตัวจัดการแพ็กเกจ
bootอ็อบเจ็กต์อาร์กิวเมนต์เคอร์เนลและทางเลือก GRUB
installerอ็อบเจ็กต์การกำหนดค่าติดตั้งลงดิสก์
persistenceอ็อบเจ็กต์ความคงอยู่แบบไลฟ์และนโยบายโซน
integrityอ็อบเจ็กต์การตั้งค่า dm-verity, Secure Boot และ IMA/EVM ที่ขอ
file_attachmentsอาร์เรย์ไฟล์ที่อัปโหลดแล้วระบุด้วย file_id
startup_scriptsอาร์เรย์สคริปต์ systemd แบบครั้งเดียวที่มีขอบเขต
time_zoneสตริงหรือ nullการตั้งค่าโซนเวลาของอิมเมจ

การมีฟิลด์ความสมบูรณ์หรือความปลอดภัยเป็นการตั้งใจกำหนดค่า ไม่ใช่ หลักฐานว่ากลไกถูกสร้าง ถูกบังคับตอนรัน หรือผ่านคุณสมบัติ สำหรับระบอบการปฏิบัติตาม ต้องมีหลักฐานบิลด์และการทดสอบที่ตรงกัน

ผู้ใช้

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

ชื่อผู้ใช้และกลุ่มจำกัดอยู่ที่อักขระบัญชี Linux ที่ปลอดภัยและความยาว การไม่ตั้ง password สร้างบัญชีที่ล็อกรหัสผ่านสำหรับเวิร์กโฟลว์ที่ใช้เฉพาะกุญแจหรือ ข้อมูลรับรองตอนปรับใช้ หลีกเลี่ยงข้อมูลรับรองแบบข้อความธรรมดาในสูตรที่บันทึก

บริการ

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

config เฉพาะบริการ คีย์ที่ถูกต้องตามวากยสัมพันธ์ยังอาจถูกตัวสร้างที่ไม่ได้ทำให้มีผลเพิกเฉย ตรวจสูตรที่ทำให้เป็นมาตรฐาน การกำหนดค่าที่ถูกสร้าง และพฤติกรรมของแขก

ความปลอดภัยและตัวติดตั้ง

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

ประเภทตัวติดตั้งขึ้นกับเป้าหมาย (calamares, anaconda หรือ elster-mobile) การเปิดตัวติดตั้งต้องตามด้วยการทดสอบติดตั้งบนดิสก์ที่ใช้แล้วทิ้ง ไอคอนบนเดสก์ท็อปไลฟ์ไม่ได้พิสูจน์ว่าการติดตั้งทำงาน

สคริปต์เริ่มต้น

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

ยอมรับสคริปต์เริ่มต้นได้สูงสุด 32 รายการ คำสั่งต้องไม่ว่างและมี ไบต์ NUL ไม่ได้ ถือว่าเป็นโค้ดเชลล์ที่รันด้วยสิทธิ์ root เว้นแต่ run_as จะระบุ เป็นอย่างอื่น ทบทวนความทำซ้ำได้ การใส่เครื่องหมายคำพูด ความล้มเหลวของเครือข่าย และการเปิดเผยความลับ

สถานการณ์และการยืนยัน

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

สถานการณ์ยังกำหนด topology พร้อม VM และเครือข่าย การทดสอบรูปแบบเกณฑ์มาตรฐาน และการตั้งค่า CIS ได้ หากละโทโพโลยี จะใช้เส้นทาง VM เดี่ยวตามปกติ การยืนยันต้องมีคำอธิบายที่อ่านได้โดยมนุษย์และพารามิเตอร์เฉพาะประเภท ประเภทการยืนยันที่ไม่รู้จักอาจผ่านการแยกสคีมา ดังนั้นให้ยืนยันว่าตัวรัน รองรับก่อนถือเป็นหลักฐาน

ตัวอย่างน้อยที่สุดที่สมบูรณ์

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

เวิร์กโฟลว์การตรวจความถูกต้อง

  1. ตรวจ JSON ผ่านตัวแก้ไขสูตรปัจจุบัน API หรือเครื่องมือ MCP validate_recipe
  2. เปรียบเทียบสูตรที่ทำให้เป็นมาตรฐานที่คืนมากับคำขอเดิม
  3. ถือว่าฟิลด์ที่ไม่รู้จักที่ถูกทิ้งเป็นข้อบกพร่องในสูตร ไม่ใช่การกำหนดค่า ที่สำเร็จ
  4. สร้างบิลด์หลังจากข้อกำหนดชัดเจนถูกแทนแล้วเท่านั้น
  5. ตรวจหลักฐานที่ถูกสร้างและรันการยืนยันกับแขกที่ได้

ดู บิลด์แรกของคุณ สำหรับแนวทางกู้จากความล้มเหลวและ การดาวน์โหลด