סכימת מתכונים
מתכוני OpenFactory משתמשים ב-snake_case JSON. לפורמט הקנוני יש קטן
מעטפה ברמה העליונה, אובייקט 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. שילובים חדשים צריכים לשלוח את הפורמט הקנוני.
שדות ברמה העליונה
| שדה | הקלד | נדרש/ברירת מחדל | המשמעות |
|---|---|---|---|
name | מחרוזת | דָרוּשׁ; 3–100 תווים | שם מתכון פנימי יציב |
display_name | מחרוזת או ריק | אופציונלי; 1–100 תווים | שם הפונה לאדם |
description | מחרוזת | "" | התוצאה והגבול המיועדים |
base_image | מחרוזת | debian-trixie | יעד הפצה/בנייה; השתמש ברשימת הקונסולות הנוכחית |
task | מחרוזת או ריק | אופציונלי | יעד מבצעי |
executor | מחרוזת או ריק | אופציונלי | טכנולוגיה צפויה לבצע את המשימה |
use_case | מחרוזת | General | מקרה שימוש ראשוני |
hardware | חפץ | ברירות מחדל מוצגות להלן | דרישות פריסה |
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 | חפץ | בחירות מוצהרות של הקשחה, הצפנה, ביקורת, SELinux ו-fail2ban |
networking | חפץ | ממשק וכוונת רשת |
desktop_settings | חפץ | מראה והתנהגות שולחן העבודה |
branding | חפץ | זהות הפצה ונכסים |
runtime | חפץ | זהות מנהל/ת שירות/חבילות |
boot | חפץ | טיעוני ליבה ובחירות GRUB |
installer | חפץ | תצורת התקנה לדיסק |
persistence | חפץ | מדיניות התמדה חיה ואזור |
integrity | חפץ | הגדרות dm-verity, Secure Boot ו-IMA/EVM מבוקשות |
file_attachments | מערך | קבצים שהועלו בעבר שזוהו על ידי file_id |
startup_scripts | מערך | סקריפטים מוגבלים מערכתית חד-פעמית |
time_zone | מחרוזת או ריק | הגדרת אזור זמן של תמונה |
הנוכחות של שדה שלמות או אבטחה היא כוונת תצורה. זה כן לא הוכחה לכך שהמנגנון נוצר, נאכף בזמן ריצה או כשיר למשטר ציות. דרוש הוכחות בנייה ובדיקה תואמות.
משתמשים
{
"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 בתים. התייחס אליהם כקוד מעטפת בעל יכולת שורש אלא אם כן 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 עם מחשבים וירטואליים ורשתות, בפורמט בנצ’מרק
בדיקות והגדרות 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"]
}זרימת עבודה של אימות
- אמת את ה-JSON באמצעות עורך המתכונים הנוכחי, API או MCP
כלי
validate_recipe. - השווה את המתכון המנורמל שהוחזר עם הבקשה המקורית.
- התייחס לשדות לא ידועים שנפלו כאל פגם במתכון, לא כמוצלח תצורה.
- בנה רק לאחר ייצוג דרישות מפורשות.
- בדוק ראיות שנוצרו והפעל טענות נגד האורח שהתקבל.
ראה המבנה הראשון שלך לכשל והורדה הדרכה להתאוששות.