Skip to Content
Building OsProgramska oprema po meri iz repozitorijev izvorne kode

Programska oprema po meri iz repozitorijev izvorne kode

Recepti OpenFactory lahko na podprtih graditeljih slik navedejo Git repozitorij kot vhod paketa po meri. To je pot, občutljiva na dobavno verigo: repozitorij, razrešeno revizijo, navodila za paketiranje, odvisnosti gradnje in nastali paket je treba pregledati.

Podpora je odvisna od cilja. Gradnje izvornih paketov nekateri graditelji zavrnejo, vključno s trenutnimi potmi Raspberry Pi in Proxmox. Razpoložljivost preverite v normaliziranem receptu in načrtu gradnje, preden obljubite, da bo paket nastal.

Oblika recepta

Vnosi paketov po meri so pod os.custom_packages:

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

Shema sprejme ime veje, ne pa nespremenljivega polja commit. Pri nadzorovanem izdaji zabeležite natančen commit, ki ga gradnja razreši, in ga vključite v ohranjeno provenance. Samo premikajoča se veja ni reproduktiven vhod.

Pripravite repozitorij

Trenutna pot paketa pričakuje domače metapodatke paketiranja, primerno za cilj. Pogosti primeri so Debian mapa debian/ ali RPM spec. Natančno obnašanje graditelja in podprte različice cilja se lahko spremenijo, zato preverite minimalen paket v nameščenem okolju namesto zanašanja na statično tabelo združljivosti.

Pri Debian paketiranju preglejte vsaj:

  • debian/control za identiteto source/binary in odvisnosti;
  • debian/changelog za različico paketa;
  • debian/rules in druge izvršljive maintainer skripte;
  • namestitvene manifeste in enote systemd; in
  • licenciranje in združen material tretjih oseb.

Pri RPM paketiranju preglejte vire v spec, zahteve gradnje, scriptlete, seznam datotek in metapodatke licence.

Nikoli ne domnevajte, da lastništvo repozitorija naredi njegove gradbene skripte varne. Gradnje paketov izvajajo nezaupanja vredno izvorno kodo in logiko paketiranja znotraj meje izolacije gradbene infrastrukture.

Drugi nadzori paketov

Domači paketi

Uporabite os.packages za pakete, ki jih že zagotavlja izbrana distribucija ali eksplicitno konfiguriran repozitorij:

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

Prepisi paketov

os.package_overrides lahko deklarira namen add, remove ali replace:

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

Prepis ne dokazuje, da je razreševanje odvisnosti upoštevalo namen. Preverite končni inventar paketov in trditve absence/presence.

Dodatni repozitoriji

os.extra_repos je napreden vhod. Ne dodajajte nepodpisanega HTTP repozitorija, kot v starejših primerih. Odobrena integracija repozitorija potrebuje HTTPS transport, pripet ključ za podpis, uveljavljanje podpisa, metapodatke release, primerno za upravitelja paketov, ter dokumentirano lastništvo in politiko posodobitev. Če jih trenutni graditelj ne more predstaviti, repozitorija ne uporabljajte.

Dokazi za sprejem

Za vsak paket po meri ohranite:

  • URL repozitorija in razrešen commit;
  • pregled izvora in deklarirane licence;
  • okolje gradnje in posnetek odvisnosti;
  • dnevnike gradnje ter nastali naziv/različico/arhitekturo paketa;
  • digest paketa in dokaz podpisa repozitorija, kjer velja;
  • končni inventar slike z nameščenim paketom;
  • smoke teste storitve ali izvršljive datoteke; in
  • obnašanje pri odstranitvi in nadgradnji.

Uspešna faza izvornega paketa ne zadostuje. Gradnja slike lahko paketa kasneje ne porabi, nameščen paket pa je lahko še vedno neuporaben.

Odpravljanje težav

  • Metapodatki paketiranja zavrnjeni: preverite domači paket lokalno z istim release distribucije in arhitekturo.
  • Manjka odvisnost gradnje: uporabljajte odvisnosti iz odobrenih repozitorijev za ta cilj; v maintainer skripti ne prenašajte po tiho poljubnih binarnih datotek.
  • Paketa ni na sliki: primerjajte nastali naziv binarnega paketa z normalizirano zahtevo namestitve in končnim inventarjem.
  • Različica se ni spremenila: posodobite domače metapodatke različice in potrdite, da je bil razrešen nov source commit.
  • Storitev je spodletela: preglejte njeno unit, runtime odvisnosti, dovoljenja in dnevnike gosta; pred ponovno gradnjo dodajte trditev na ravni obnašanja.