Skip to Content
Building OsPrilagođeni softver iz repozitorija izvornog koda

Prilagođeni softver iz repozitorija izvornog koda

OpenFactory recepti na podržanim graditeljima slika mogu navesti Git repozitorij kao ulaz prilagođenog paketa. To je put osjetljiv na lanac opskrbe: repozitorij, razriješenu reviziju, upute za pakiranje, ovisnosti gradnje i nastali paket treba pregledati.

Podrška ovisi o cilju. Gradnje izvornih paketa neki graditelji odbijaju, uključujući trenutačne putove Raspberry Pi i Proxmox. Dostupnost potvrdite u normaliziranom receptu i planu gradnje prije nego što obećate da će paket nastati.

Oblik recepta

Unosi prilagođenih paketa nalaze se pod os.custom_packages:

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

Shema prihvaća naziv grane, a ne nepromjenjivo polje commit. Za kontrolirano izdanje zabilježite točan commit koji gradnja razriješi i uključite ga u zadržanu provenance. Samo grana koja se pomiče nije reproduktibilan ulaz.

Pripremite repozitorij

Trenutačni put paketa očekuje izvorne metapodatke pakiranja prikladne cilju. Uobičajeni primjeri su Debian direktorij debian/ ili RPM spec. Točno ponašanje graditelja i podržane verzije cilja mogu se promijeniti, pa provjerite minimalni paket u implementiranom okruženju umjesto oslanjanja na statičnu tablicu kompatibilnosti.

Za Debian pakiranje pregledajte barem:

  • debian/control radi identiteta source/binary i ovisnosti;
  • debian/changelog radi verzije paketa;
  • debian/rules i druge izvršive maintainer skripte;
  • instalacijske manifeste i systemd jedinice; i
  • licenciranje i uključeni materijal trećih strana.

Za RPM pakiranje pregledajte izvore u spec, zahtjeve gradnje, scriptlete, popis datoteka i metapodatke licence.

Nikada ne pretpostavljajte da vlasništvo repozitorija čini njegove skripte gradnje sigurnima. Gradnje paketa izvršavaju nepouzdani izvor i logiku pakiranja unutar granice izolacije infrastrukture gradnje.

Ostale kontrole paketa

Izvorni paketi

Koristite os.packages za pakete koje već isporučuje odabrana distribucija ili eksplicitno konfigurirani repozitorij:

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

Zamjene paketa

os.package_overrides može deklarirati namjeru add, remove ili replace:

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

Zamjena nije dokaz da je razrješavanje ovisnosti poštovalo namjeru. Provjerite konačni inventar paketa i tvrdnje absence/presence.

Dodatni repozitoriji

os.extra_repos je napredni ulaz. Ne dodajte nepotpisani HTTP repozitorij kao u starijim primjerima. Odobrena integracija repozitorija treba HTTPS prijenos, prikvačeni ključ za potpis, provođenje potpisa, metapodatke release prikladne upravitelju paketa te dokumentirano vlasništvo i politiku ažuriranja. Ako ih trenutačni graditelj ne može predstaviti, repozitorij ne koristite.

Dokazi za prihvaćanje

Za svaki prilagođeni paket zadržite:

  • URL repozitorija i razriješeni commit;
  • pregled izvora i deklarirane licence;
  • okruženje gradnje i snimku ovisnosti;
  • zapise gradnje te nastali naziv/verziju/arhitekturu paketa;
  • digest paketa i dokaz potpisa repozitorija gdje je primjenjivo;
  • konačni inventar slike s instaliranim paketom;
  • smoke testove usluge ili izvršne datoteke; i
  • ponašanje pri uklanjanju i nadogradnji.

Uspješna faza izvornog paketa nije dovoljna. Gradnja slike kasnije može ne iskoristiti paket, a instalirani paket i dalje može biti neupotrebljiv.

Rješavanje problema

  • Metapodaci pakiranja odbijeni: provjerite izvorni paket lokalno s istim release distribucije i arhitekturom.
  • Nedostaje ovisnost gradnje: koristite ovisnosti iz odobrenih repozitorija za taj cilj; u maintainer skripti ne preuzimajte po tišini proizvoljne binarne datoteke.
  • Paket nije na slici: usporedite nastali naziv binarnog paketa s normaliziranim zahtjevom instalacije i konačnim inventarom.
  • Verzija se nije promijenila: ažurirajte izvorne metapodatke verzije i potvrdite da je razriješen novi source commit.
  • Usluga nije uspjela: pregledajte njezinu unit, runtime ovisnosti, dozvole i zapise gosta; prije ponovne gradnje dodajte tvrdnju na razini ponašanja.