Skip to Content
Building Os소스 저장소의 맞춤형 소프트웨어

소스 저장소의 맞춤형 소프트웨어

OpenFactory 레시피는 Git 저장소를 지원되는 이미지 빌더의 사용자 정의 패키지 입력으로 참조할 수 있습니다. 이는 공급망에 민감한 경로입니다. 리포지토리, 해결된 개정, 패키징 지침, 빌드 종속성 및 생성된 패키지 모두 검토가 필요합니다.

지원은 대상별로 다릅니다. 현재 Raspberry Pi 및 Proxmox 경로를 포함한 일부 빌더에서는 소스 패키지 빌드가 거부됩니다. 패키지 생산을 약속하기 전에 정규화된 레시피 및 빌드 계획의 가용성을 확인하세요.

레시피 형태

사용자 정의 패키지 항목은 os.custom_packages 아래에 있습니다.

{ "os": { "custom_packages": [ { "name": "my-agent", "git_url": "https://github.com/example/my-agent.git", "branch": "release-1.x" } ] } }

스키마는 변경할 수 없는 커밋 필드가 아닌 분기 이름을 허용합니다. 제어된 릴리스의 경우 빌드로 해결된 정확한 커밋을 기록하고 해당 커밋을 보관된 출처의 일부로 만듭니다. 움직이는 가지만으로는 재현 가능한 입력이 아닙니다.

저장소 준비

현재 패키지 경로에는 대상에 적합한 기본 패키징 메타데이터가 필요합니다. 일반적인 예로는 Debian debian/ 디렉터리 또는 RPM 사양이 있습니다. 정확한 빌더 동작과 지원되는 대상 버전은 변경될 수 있으므로 정적 호환성 표에 의존하기보다는 배포된 환경에서 최소한의 패키지를 검증하세요.

데비안 패키징의 경우 최소한 다음을 검토하세요.

  • 소스/바이너리 ID 및 종속성을 위한 debian/control
  • 패키지 버전의 경우 debian/changelog;
  • debian/rules 및 기타 실행 가능한 유지 관리 스크립트
  • 매니페스트와 시스템 유닛을 설치합니다. 그리고
  • 라이센스 및 번들로 제공되는 제3자 자료.

RPM 패키징의 경우 사양 소스, 빌드 요구 사항, 스크립틀릿, 파일 목록 및 라이선스 메타데이터를 검토하세요.

저장소 소유권을 가정하지 마십시오. 빌드 스크립트가 안전해집니다. 패키지 빌드는 빌드 인프라의 격리 경계 내에서 신뢰할 수 없는 소스 및 패키징 논리를 실행합니다.

기타 패키지 컨트롤

네이티브 패키지

선택한 배포판이나 명시적으로 구성된 저장소에서 이미 제공한 패키지의 경우 os.packages을 사용하세요.

{ "os": { "packages": ["curl", "jq"] } }

패키지 재정의

os.package_overridesadd, remove 또는 replace 인텐트를 선언할 수 있습니다.

{ "os": { "package_overrides": [ {"name": "nano", "action": "replace", "replacement": "neovim"}, {"name": "telnet", "action": "remove"} ] } }

재정의는 종속성 해결이 이를 적용했다는 증거가 아닙니다. 최종 패키지 인벤토리와 부재/존재 어설션을 확인합니다.

추가 저장소

os.extra_repos은 고급 입력입니다. 이전 예에 표시된 것처럼 서명되지 않은 HTTP 저장소를 추가하지 마십시오. 승인된 저장소 통합에는 HTTPS 전송, 고정된 서명 키, 서명 시행, 패키지 관리자에 적합한 릴리스 메타데이터, 문서화된 소유권 및 업데이트 정책이 필요합니다. 해당 신뢰 제어가 현재 빌더로 표시될 수 없는 경우 저장소를 사용하지 마십시오.

수락 증거

모든 맞춤 패키지에 대해 다음을 유지하세요.

  • 저장소 URL 및 해결된 커밋
  • 소스 및 선언된 라이선스 검토
  • 빌드 환경 및 종속성 스냅샷
  • 빌드 로그 및 결과 패키지 이름/버전/아키텍처
  • 해당되는 경우 패키지 다이제스트 및 저장소 서명 증거
  • 설치된 패키지를 보여주는 최종 이미지 인벤토리
  • 서비스 또는 실행 가능한 연기 테스트 그리고
  • 제거 및 업그레이드 동작.

성공적인 소스 패키지 단계만으로는 충분하지 않습니다. 나중에 이미지 빌드에서 패키지를 사용하지 못할 수 있으며 설치된 패키지를 계속 사용할 수 없습니다.

문제 해결

  • 패키징 메타데이터 거부됨: 동일한 배포 릴리스 및 아키텍처를 사용하여 로컬에서 기본 패키지의 유효성을 검사합니다.
  • 빌드 종속성 누락: 해당 대상에 대해 승인된 저장소에서 사용 가능한 종속성을 사용합니다. 관리자 스크립트에서 임의의 바이너리를 자동으로 가져오지 마세요.
  • 이미지에 패키지가 없음: 생성된 바이너리 패키지 이름을 정규화된 설치 요청 및 최종 인벤토리와 비교합니다.
  • 버전이 변경되지 않았습니다: 기본 버전 메타데이터를 업데이트하고 새 소스 커밋이 해결되었는지 확인합니다.
  • 서비스 실패: 해당 유닛, 런타임 종속성, 권한 및 게스트 로그를 검사합니다. 다시 빌드하기 전에 동작 수준 어설션을 추가하세요.