Na een jaar van ontwikkeling is de release van de pakketbeheerder RPM 4.20.0. Het RPM4-project wordt ontwikkeld door Red Hat en wordt gebruikt in distributies zoals RHEL, Fedora, SUSE, openSUSE, ALT Linux, OpenMandriva, Mageia, PCLinuxOS en Tizen. De code van het project wordt verspreid onder de GPLv2- en LGPLv2-licenties.
Volgend jaar wordt de publicatie van een significante tak van RPM 6 verwacht, waarin een nieuw archiefformaat zal worden ingezet, dat, in tegenstelling tot het momenteel gebruikte cpio-formaat, pakketten groter dan 4 GB mogelijk maakt (het overwinnen van deze beperking is belangrijk, aangezien het SRC-pakket van Chromium dicht bij de limiet ligt en een grootte heeft van 3,7 GB). In de nieuwe tak is het ook de bedoeling om het gebruik van de programmeertaal C++ voor de ontwikkeling van RPM toe te staan. De nieuwe belangrijke tak zal worden gelanceerd ter gelegenheid van de jubileum van het project - op 27 november 2025 is het 30 jaar geleden dat de eerste commit in RPM plaatsvond. De versies RPM 5.x zullen worden overgeslagen om overlapping met het project RPM5 te vermijden, dat niet direct verband houdt met RPM van Red Hat, zich heeft ontwikkeld door een onafhankelijk team van ontwikkelaars en sinds 2016 niet is bijgewerkt.
De meest opvallende verbeteringen in RPM 4.20:
- Een nieuwe tool rpm2archive is toegevoegd, die de oude tool rpm2cpio vervangt en de overgang naar het nieuwe pakketformaat, dat geen gebruik maakt van cpio, in de toekomst vergemakkelijkt. In tegenstelling tot rpm2cpio, transformeert de nieuwe tool het RPM-bestand niet naar een cpio-archief, maar naar een tar-archief dat is gecomprimeerd met gzip. De oude tool rpm2cpio is vervangen door een symbolische link naar rpm2archive.
- Een declaratief bouwsysteem is voorgesteld, gebaseerd op het gebruik van de nieuwe richtlijn "BuildSystem", waarmee het bouwsysteem kan worden gedefinieerd dat wordt gebruikt voor het samenstellen van het pakket. De broncode wordt automatisch voorbereid, gecompileerd en geĆÆnstalleerd met inachtneming van het opgegeven bouwsysteem, zonder dat afzonderlijk in het SPEC-bestand scripts voor voorbereiding, bouw en installatie in de secties "%prep", "%build" en "%install" hoeven te worden gedefinieerd. In RPM worden de ondersteunde bouwsystemen gedefinieerd in de vorm van collecties macro's.
Het belangrijkste idee is dat het declaratieve configuratieformaat ontwikkelaars van distributies in staat stelt om aparte macro's te creƫren voor typische buildprocessen, zodat herhaaldelijke scripts niet in elk pakket gedefinieerd hoeven te worden. In plaats van bijvoorbeeld volgordes van de configuratie- en make-commando's voor programma's die Autotools gebruiken te definiƫren, is het nu voldoende om "BuildSystem: autotools" op te geven en zonder de secties "%prep", "%build" en "%install" toe te kunnen.
- Ondersteuning is toegevoegd voor het aanhechten van extra secties met de voorbereidings-, bouw-, installatie-, configuratie-, schoonmaak- en controlecommando's, die de basissecties %prep, %conf, %build, %install, %check en %clean aanvullen. Voor het uitvoeren van een extra script vóór de uitvoering van de code uit de basissectie is de optie "-p" aangeboden en na de basissectie de optie "-a". Dergelijke substituties kunnen nuttig zijn voor een gerichte aanpassing van gedrag bij het gebruik van de hierboven beschreven declaratieve buildmodus.
- In dynamisch gegenereerde delen van SPEC-bestanden is het toegestaan om directieven en secties op te nemen die geen invloed hebben op het bouwproces.
- De macro %builddir is toegevoegd en er is een via RPM beheerde mogelijkheid geĆÆmplementeerd om eigen builddirectories aan afzonderlijke pakketten te koppelen.
- Een nieuw protocol "multi-file" is voorgesteld, dat de generatie van afhankelijkheden aanzienlijk versnelt.
- De rpm-opdracht heeft de optie "ājson" gekregen voor het weergeven van de resultaten van verzoeken in JSON-formaat.
- De plugin rpm-plugin-unshare is toegevoegd, die isolatie biedt van scripts die worden uitgevoerd in de buildsecties, door gebruik te maken van namespaces in Linux. De plugin maakt bijvoorbeeld het verbieden van netwerktoegang mogelijk en beperkt de toegang tot het bestandssysteem, en maakt aparte privƩ directories /tmp en /home beschikbaar ter bescherming in geval van onveilige bewerkingen met tijdelijke bestanden tijdens het bouwen van pakketten.
- Een openbare API voor de ontwikkeling van plugins is voorgesteld, die compatibiliteit tussen releases zal behouden. Voorheen was de API voor plugins alleen bedoeld voor intern gebruik en kon deze van release tot release veranderen.
- De rpmkeys-opdracht heeft de opties "ālist" en "ādelete" toegevoegd.
- De rpmsign tool heeft ondersteuning gekregen voor het aanmaken van digitale handtekeningen voor pakketten met ECDSA-sleutels.
- Verbeterde ondersteuning voor herhaalbare builds. Een macro '%build_mtime_policy' is toegevoegd, waarmee de inhoud van tijdstempels die tijdens de build worden toegevoegd, kan worden beheerd (met de waarde clamp_to_source_date_epoch kan een vaste tijdstempel worden gebruikt, en met clamp_to_buildtime kan de werkelijke bouwtijd worden opgegeven).
- In sysusers.d-bestanden is het toegestaan om regels toe te voegen voor het definiƫren van groepsleden.
- Er is correcte, distributie-onafhankelijke ondersteuning voor debuginfo-bestanden verzekerd.
- De syntaxis van de %patchN macro (zonder spatie voor N) is verouderd verklaard; het gebruik ervan zal nu een fout veroorzaken (gebruik de syntaxis '%patch N' of '%patch -P N', waarbij N het patchnummer is).
- De verouderde OpenPGP-parser is verwijderd.
- Afhankelijkheidsgeneratoren voor Perl en Python ABI zijn naar aparte repositories verplaatst.
Bron: opennet.ru
