Skip to Content
Building OsMukautettu ohjelmisto lähdekoodirepositorioista

Mukautettu ohjelmisto lähdekoodirepositorioista

OpenFactory-reseptit voivat viitata Git-repositorioon custom package -syötteenä tuetuilla image-buildereilla. Tämä on supply chain -herkkä polku: repositorio, ratkaistu revisio, pakkausohjeet, build-riippuvuudet ja tuotettu paketti vaativat kaikki tarkistuksen.

Tuki riippuu kohteesta. Source package -buildit hylätään joillakin buildereilla, mukaan lukien nykyiset Raspberry Pi- ja Proxmox-polut. Varmista saatavuus normalisoidusta reseptistä ja build-suunnitelmasta ennen kuin lupaat paketin tuotannon.

Reseptin muoto

Custom package -merkinnät ovat polussa os.custom_packages:

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

Skeema hyväksyy haaran nimen, ei muuttumatonta commit-kenttää. Kontrolloidussa julkaisussa kirjaa buildin ratkaisema tarkka commit ja sisällytä se säilytettyyn provenanceen. Pelkkä liikkuva haara ei ole toistettava syöte.

Valmistele repositorio

Nykyinen package-polku odottaa kohteeseen sopivia natiiveja pakkausmetatietoja. Tyypillisiä esimerkkejä ovat Debian-hakemisto debian/ tai RPM-spec. Tarkka builder-käyttäytyminen ja tuetut kohdeversiot voivat muuttua, joten validoi minimaalinen paketti käyttöönotetussa ympäristössä äläkä luota staattiseen yhteensopivuustaulukkoon.

Debian-pakkauksessa tarkista vähintään:

  • debian/control lähde-/binääri-identiteetille ja riippuvuuksille;
  • debian/changelog paketin versiolle;
  • debian/rules ja muut suoritettavat maintainer-skriptit;
  • asennusmanifestit ja systemd-yksiköt; sekä
  • lisensointi ja mukana oleva kolmannen osapuolen materiaali.

RPM-pakkauksessa tarkista specin lähteet, build-vaatimukset, scriptletit, tiedostolista ja lisenssimetatiedot.

Älä koskaan oleta, että repositorion omistus tekee build-skripteistä turvallisia. Package-buildit suorittavat epäluotettavaa lähde- ja pakkauslogiikkaa build-infrastruktuurin eristysrajalla.

Muut package-asetukset

Native packages

Käytä os.packages paketeille, jotka valittu jakelu tai eksplisiittisesti konfiguroitu repositorio jo tarjoaa:

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

Package overrides

os.package_overrides voi ilmoittaa intentin add, remove tai replace:

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

Override ei todista, että dependency resolution noudatti sitä. Varmista lopullinen paketti-inventaario ja absence/presence-assertiot.

Lisärepositoriot

os.extra_repos on edistynyt syöte. Älä lisää allekirjoittamatonta HTTP-repositoriota kuten vanhemmissa esimerkeissä. Hyväksytty repository-integraatio vaatii HTTPS-kuljetuksen, kiinnitetyn signing keyn, allekirjoitusten valvonnan, package manageriin sopivat release-metatiedot sekä dokumentoidun omistajuuden ja päivityskäytännön. Jos nykyinen builder ei voi esittää näitä trust control -asetuksia, älä käytä repositoriota.

Hyväksyntätodisteet

Jokaisesta custom packagesta säilytä:

  • repositorion URL ja ratkaistu commit;
  • lähteen ja ilmoitetun lisenssin tarkistus;
  • build-ympäristö ja dependency-snapshot;
  • build-lokit sekä paketin nimi/versio/arkkitehtuuri;
  • package digest ja repository-signature -todiste tarvittaessa;
  • lopullinen image-inventaario, jossa paketti on asennettuna;
  • palvelu- tai executable-smoke-testit; sekä
  • poisto- ja päivityskäyttäytyminen.

Onnistunut source package -vaihe ei riitä. Image-build voi myöhemmin epäonnistua paketin kulutuksessa, ja asennettu paketti voi silti olla käyttökelvoton.

Vianetsintä

  • Pakkausmetatiedot hylätty: validoi natiivi paketti paikallisesti samalla jakeluversiolla ja arkkitehtuurilla.
  • Build-riippuvuus puuttuu: käytä hyväksytyistä repositorioista saatavia riippuvuuksia kyseiseen kohteeseen; älä hae satunnaisia binäärejä hiljaa maintainer-skriptissä.
  • Paketti puuttuu imagesta: vertaa tuotettua binääripaketin nimeä normalisoituun asennuspyyntöön ja lopulliseen inventaarioon.
  • Versio ei muuttunut: päivitä natiivit versiometatiedot ja varmista, että uusi source-commit ratkaistiin.
  • Palvelu epäonnistui: tarkista yksikkö, runtime-riippuvuudet, oikeudet ja vieraslogit; lisää käyttäytymisassertio ennen rebuildia.