Skip to Content
Building OsVlastný softvér zo zdrojových repozitárov

Vlastný softvér zo zdrojových repozitárov

Recepty OpenFactory môžu na podporovaných image builderoch odkazovať na Git repozitár ako vstup vlastného balíčka. Ide o cestu citlivú na dodávateľský reťazec: repozitár, vyriešenú revíziu, inštrukcie na balenie, závislosti buildu a vzniknutý balíček treba skontrolovať.

Podpora závisí od cieľa. Buildy zdrojových balíčkov niektorí buildery odmietajú, vrátane súčasných ciest Raspberry Pi a Proxmox. Dostupnosť overte v normalizovanom recepte a pláne buildu skôr, než sľúbite, že balíček vznikne.

Tvar receptu

Záznamy vlastných balíčkov sú pod os.custom_packages:

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

Schéma prijíma názov vetvy, nie nemenné pole commit. Pri kontrolovanom vydaní zaznamenajte presný commit, ktorý build vyrieši, a zahrňte ho do uchovanej provenance. Samotná pohyblivá vetva nie je reprodukovateľný vstup.

Pripravte repozitár

Súčasná cesta balíčka očakáva natívne metadáta balenia zodpovedajúce cieľu. Typické príklady sú adresár Debian debian/ alebo RPM spec. Konkrétne správanie buildera a podporované verzie cieľa sa môžu meniť, preto overte minimálny balíček v nasadenom prostredí namiesto spoliehania sa na statickú tabuľku kompatibility.

Pri balení Debian skontrolujte aspoň:

  • debian/control kvôli identite source/binary a závislostiam;
  • debian/changelog kvôli verzii balíčka;
  • debian/rules a ďalšie spustiteľné maintainer skripty;
  • inštalačné manifesty a jednotky systemd; a
  • licencovanie a zviazaný materiál tretích strán.

Pri balení RPM skontrolujte zdroje v spec, požiadavky buildu, scriptlety, zoznam súborov a metadáta licencie.

Nikdy nepredpokladajte, že vlastníctvo repozitára robí jeho build skripty bezpečnými. Buildy balíčkov spúšťajú nedôveryhodný zdroj a logiku balenia vo vnútri izolačnej hranice build infraštruktúry.

Ďalšie ovládanie balíčkov

Natívne balíčky

Použite os.packages pre balíčky, ktoré už dodáva zvolená distribúcia alebo explicitne nakonfigurovaný repozitár:

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

Prepísania balíčkov

os.package_overrides môže deklarovať zámer add, remove alebo replace:

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

Prepísanie nedokazuje, že riešenie závislostí ho rešpektovalo. Overte konečný inventár balíčkov a asercie absence/presence.

Ďalšie repozitáre

os.extra_repos je pokročilý vstup. Nepridávajte nepodpísané HTTP repozitáre ako v starších príkladoch. Schválená integrácia repozitára vyžaduje transport HTTPS, pripnutý podpisový kľúč, vynútenie podpisu, metadata release zodpovedajúce správcovi balíčkov a zdokumentované vlastníctvo a politiku aktualizácií. Ak ich súčasný builder nedokáže reprezentovať, repozitár nepoužívajte.

Dôkazy pre akceptáciu

Pri každom vlastnom balíčku uchovajte:

  • URL repozitára a vyriešený commit;
  • kontrolu zdroja a deklarovanej licencie;
  • prostredie buildu a snapshot závislostí;
  • logy buildu a výsledný názov/verziu/architektúru balíčka;
  • digest balíčka a dôkaz podpisu repozitára, kde to platí;
  • konečný inventár obrazu s nainštalovaným balíčkom;
  • smoke testy služby alebo spustiteľného súboru; a
  • správanie pri odstránení a upgrade.

Úspešná fáza zdrojového balíčka nestačí. Build obrazu môže balíček neskôr nespotrebovať a nainštalovaný balíček môže byť stále nepoužiteľný.

Riešenie problémov

  • Metadáta balenia odmietnuté: overte natívny balíček lokálne so rovnakým release distribúcie a architektúrou.
  • Chýba závislosť buildu: používajte závislosti zo schválených repozitárov pre daný cieľ; v maintainer skripte potichu nestahujte ľubovoľné binárky.
  • Balíček v obraze chýba: porovnajte vyprodukovaný názov binárneho balíčka s normalizovanou požiadavkou inštalácie a konečným inventárom.
  • Verzia sa nezmenila: aktualizujte natívne metadáta verzie a potvrďte, že bol vyriešený nový source commit.
  • Služba zlyhala: preskúmajte jej unit, runtime závislosti, oprávnenia a logy hosta; pred rebuildom pridajte aserciu na úrovni správania.