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 規格。確切的建構器行為和支援的目標版本可能會發生變化,因此請在已部署環境中驗證最小包,而不是依賴靜態相容性表。

對於 Debian 打包,至少檢查:

  • debian/control 用於來源/二進位身分和依賴項;
  • debian/changelog 為封裝版本;
  • debian/rules 和其他可執行維護者腳本;
  • 安裝清單和系統單元;和
  • 授權和捆綁的第三方材料。

對於 RPM 打包,請查看規格的來源、建置需求、腳本、檔案清單和許可證元資料。

永遠不要假設存儲庫所有權使其建置腳本安全。套件建置在建置基礎設施的隔離邊界內執行不受信任的來源和打包邏輯。

其他套件控件

原生套件

所選發行版或明確配置的儲存庫已提供的軟體包使用os.packages

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

套件覆蓋

os.package_overrides 可聲明addremovereplace 意圖:

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

覆蓋並不能證明依賴解析來尊重它。驗證最終的包裹庫存和缺席/存在斷言。

附加儲存庫

os.extra_repos 是進階輸入。不要新增未簽署的 HTTP 儲存庫,如舊範例所示。經批准的儲存庫整合需要 HTTPS 傳輸、固定簽署金鑰、簽章實作、適合套件管理器的發布元資料以及記錄的所有權和更新策略。如果目前建構器無法表示這些信任控制,則不要使用儲存庫。

驗收證據

對於每個自訂包,請保留:

  • 儲存庫 URL 和已解析的提交;
  • 來源和聲明的許可證審查;
  • 建構環境和依賴快照;
  • 建置日誌和產生的套件名稱/版本/架構;
  • 套件摘要和儲存庫簽名證據(如果適用);
  • 顯示已安裝軟體套件的最終影像清單;
  • 服務或可執行的冒煙測試;和
  • 刪除和升級行為。

成功的原始碼包階段還不夠。映像建置稍後可能無法使用該套件,且已安裝的套件仍然無法使用。

故障排除

  • 打包元資料被拒絕: 使用相同的發行版和架構在本地驗證本機包。
  • 建置依賴項缺失: 使用該目標的已核准儲存庫中可用的依賴項;不要在維護者腳本中默默地取得任意二進位檔案。
  • 映像中缺少軟體包: 將產生的二進位軟體包名稱與標準化安裝請求和最終清單進行比較。
  • **版本未變更:**更新本機版本元資料並確認新的來源提交已解決。
  • **服務失敗:**檢查其單元、運行時依賴關係、權限和來賓日誌;在重建之前添加行為級斷言。