Egyedi szoftver forráskódtárakból
Az OpenFactory receptek a támogatott image buildereken Git-tárgyalhatnak meg egyedi csomag bemenetként. Ez az ellátási lánc szempontjából érzékeny út: a tárolót, a feloldott revíziót, a csomagolási utasításokat, a build függőségeket és az elkészült csomagot át kell nézni.
A támogatás célfüggő. A forráscsomag buildet egyes builderek elutasítják, köztük a jelenlegi Raspberry Pi és Proxmox útvonalakon. A normalizált receptben és a build tervben erősítse meg a rendelkezésre állást, mielőtt azt ígéri, hogy csomag készül.
Recept alakja
Az egyedi csomag bejegyzések az os.custom_packages alatt vannak:
{
"os": {
"custom_packages": [
{
"name": "my-agent",
"git_url": "https://github.com/example/my-agent.git",
"branch": "release-1.x"
}
]
}
}A séma ágnevet fogad el, nem pedig megváltoztathatatlan commit mezőt. Kontrollált kiadásnál rögzítse a build által feloldott pontos commitot, és vegye fel a megőrzött provenance-ba. Önmagában a mozgó ág nem reprodukálható bemenet.
Készítse elő a tárolót
A jelenlegi csomag út a célhoz illő natív csomagolási metaadatokat vár. Gyakori példák a Debian debian/ könyvtár vagy egy RPM spec. A builder pontos viselkedése és a támogatott célverziók változhatnak, ezért ellenőrizzen egy minimális csomagot a telepített környezetben, ne statikus kompatibilitási táblázatra hagyatkozzon.
Debian csomagolásnál legalább ezeket nézze át:
debian/controla source/binary identitás és függőségek miatt;debian/changeloga csomag verziója miatt;debian/rulesés más futtatható maintainer szkriptek;- telepítési manifestek és systemd egységek; és
- licencelés és csomagolt harmadik fél anyag.
RPM csomagolásnál a spec forrásait, build követelményeit, scriptleteit, fájllistáját és licenc metaadatait.
Soha ne feltételezze, hogy a tároló tulajdonlása biztonságossá teszi a build szkripteket. A csomag build nem megbízható forrást és csomagolási logikát futtat a build infrastruktúra izolációs határán belül.
További csomagvezérlés
Natív csomagok
Az os.packages a kiválasztott disztribúció vagy egy explicit beállított tároló által már szállított csomagokhoz:
{
"os": {
"packages": ["curl", "jq"]
}
}Csomag felülírások
Az os.package_overrides deklarálhat add, remove vagy replace szándékot:
{
"os": {
"package_overrides": [
{"name": "nano", "action": "replace", "replacement": "neovim"},
{"name": "telnet", "action": "remove"}
]
}
}A felülírás nem bizonyítja, hogy a függőségfeloldás tiszteletben tartotta. Ellenőrizze a végső csomagkészletet és az absence/presence állításokat.
További tárolók
Az os.extra_repos haladó bemenet. Ne adjon hozzá aláíratlan HTTP tárolót, mint a régebbi példákban. A jóváhagyott tároló integráció HTTPS szállítást, rögzített aláíró kulcsot, aláírás-érvényesítést, a csomagkezelőhöz illő release metaadatokat, valamint dokumentált tulajdonjogot és frissítési szabályzatot igényel. Ha a jelenlegi builder nem tudja ezeket a bizalmi kontrollokat képviselni, ne használja a tárolót.
Elfogadási bizonyíték
Minden egyedi csomagnál őrizze meg:
- a tároló URL-jét és a feloldott commitot;
- a forrás és a deklarált licenc áttekintését;
- a build környezetet és függőség pillanatképet;
- a build naplókat és az eredményül kapott csomagnév/verzió/architektúrát;
- a csomag digestet és a tároló aláírás bizonyítékát, ahol érvényes;
- a végső image készletet a telepített csomaggal;
- szolgáltatás vagy futtatható smoke teszteket; és
- az eltávolítás és frissítés viselkedését.
A sikeres forráscsomag fázis nem elég. Az image build később nem használhatja fel a csomagot, a telepített csomag pedig továbbra is használhatatlan lehet.
Hibaelhárítás
- Csomagolási metaadat elutasítva: ellenőrizze a natív csomagot helyben ugyanazzal a disztribúciós release-sel és architektúrával.
- Hiányzó build függőség: használjon a célhoz jóváhagyott tárolókból származó függőségeket; maintainer szkriptben ne töltse le csendben tetszőleges binárisokat.
- Nincs csomag az image-en: hasonlítsa össze az elkészült bináris csomagnévvel a normalizált telepítési kérést és a végső készletet.
- A verzió nem változott: frissítse a natív verzió metaadatokat, és erősítse meg, hogy az új source commit feloldódott.
- A szolgáltatás hibázott: nézze meg az unitját, runtime függőségeit, jogosultságait és a vendég naplóit; rebuild előtt adjon viselkedés szintű állítást.