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/controlkvôli identite source/binary a závislostiam;debian/changelogkvôli verzii balíčka;debian/rulesa ď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.