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

baseImage 또는 startupScripts과 같은 camelCase 필드를 사용하지 마십시오. 는 호환성 검사기는 일부 오래된 단순 레시피를 허용하지만 정규화된 출력 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개체강화, 암호화, 감사, SELinux 및 Fail2ban 선택 선언
networking개체인터페이스 및 네트워크 의도
desktop_settings개체데스크탑 모양 및 동작
branding개체유통 아이덴티티 및 자산
runtime개체초기화/서비스/패키지 관리자 ID
boot개체커널 인수 및 GRUB 선택
installer개체디스크에 설치 구성
persistence개체실시간 지속성 및 영역 정책
integrity개체요청된 dm-verity, 보안 부팅 및 IMA/EVM 설정
file_attachments배열이전에 업로드된 파일은 file_id로 식별됨
startup_scripts배열제한된 시스템의 원샷 스크립트
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 바이트를 포함합니다. 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} } ] } ] } ] }

시나리오는 VM 및 네트워크, 벤치마크 형식을 사용하여 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. 현재 레시피 편집기, API 또는 MCP를 통해 JSON을 검증합니다. validate_recipe 도구.
  2. 반환된 정규화된 레시피를 원래 요청과 비교합니다.
  3. 삭제된 알 수 없는 필드를 성공이 아닌 레시피의 결함으로 처리합니다. 구성.
  4. 명시적인 요구사항이 나타난 후에만 빌드하십시오.
  5. 생성된 증거를 검사하고 결과 게스트에 대해 어설션을 실행합니다.

실패 및 다운로드는 첫 번째 빌드를 참조하세요. 회복 지침.