Skip to Content
Referenceסכימת מתכונים

סכימת מתכונים

מתכוני 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"] }

זרימת עבודה של אימות

  1. אמת את ה-JSON באמצעות עורך המתכונים הנוכחי, API או MCP כלי validate_recipe.
  2. השווה את המתכון המנורמל שהוחזר עם הבקשה המקורית.
  3. התייחס לשדות לא ידועים שנפלו כאל פגם במתכון, לא כמוצלח תצורה.
  4. בנה רק לאחר ייצוג דרישות מפורשות.
  5. בדוק ראיות שנוצרו והפעל טענות נגד האורח שהתקבל.

ראה המבנה הראשון שלך לכשל והורדה הדרכה להתאוששות.