După un an de dezvoltare, a fost lansat managerul de pachete RPM 4.20.0. Proiectul RPM4 este dezvoltat de compania Red Hat și este utilizat în distribuții precum RHEL, Fedora, SUSE, openSUSE, ALT Linux, OpenMandriva, Mageia, PCLinuxOS și Tizen. Codul proiectului este distribuit sub licențele GPLv2 și LGPLv2.
Anul viitor se așteaptă publicarea unei ramuri semnificative a RPM 6, în care va fi utilizat un nou format de arhivă, care, spre deosebire de formatul cpio utilizat în prezent, va permite crearea de pachete mai mari de 4 GB (depășirea acestei limite este importantă, deoarece pachetul SRC pentru Chromium este aproape de limită, având o dimensiune de 3.7 GB). În noua ramură se intenționează, de asemenea, autorizarea utilizării limbajului C++ pentru dezvoltarea RPM. Noua ramură semnificativă va coincide cu aniversarea proiectului — pe 27 noiembrie 2025 se împlinesc 30 de ani de la primul commit în RPM. Versiunile RPM 5.x vor fi omise pentru a evita suprapunerile cu proiectul RPM5, care nu este direct legat de RPM de la Red Hat, fiind dezvoltat de o echipă independentă de dezvoltatori și nu a fost actualizat din 2016.
Cele mai notabile îmbunătățiri în RPM 4.20:
- A fost inclusă o nouă utilitate rpm2archive, care a înlocuit utilitatea rpm2cpio și va simplifica în continuare tranziția la noul format de pachete, care nu utilizează cpio. Spre deosebire de rpm2cpio, noua utilitate transformă fișierul RPM nu într-o arhivă cpio, ci într-o arhivă în format tar, comprimat cu gzip. Vechea utilitate rpm2cpio a fost înlocuită cu un link simbolic către rpm2archive.
- A fost propus un sistem de construire declarațional, bazat pe utilizarea noii directive „BuildSystem”, prin care poate fi definit sistemul de construire utilizat la generarea pachetului. Codul sursă este pregătit, compilat și instalat automat, ținând cont de sistemul de construire specificat, fără a necesita definirea separată în fișierul SPEC a scripturilor de pregătire, construire și instalare în blocurile „%prep”, „%build” și „%install”. În RPM, sistemele de construire acceptate sunt definite sub formă de colecții de macrocomenzi.
Ideea principală este că formatul declarat de configurare va permite dezvoltatorilor de distribuții să creeze macrocomenzi separate pentru procesele tipice de compilare, evitând astfel definirea scenariilor repetitive în fiecare pachet. De exemplu, în loc să se definească secvențe de comenzi precum configure și make pentru programele care folosesc Autotools, acum este suficient să specificăm „BuildSystem: autotools” și să ne descurcăm fără secțiunile „%prep”, „%build” și „%install”. În prezent, asemenea macrocomenzi sunt pregătite pentru Autotools și CMake. În cazul în care este necesară implementarea unui comportament non-standard, autorii pachetelor au posibilitatea de a conecta propriile lor macrocomenzi pentru a suprascrie diferite etape de formare a pachetului.
- A fost adăugată suportul pentru atașarea unor secțiuni suplimentare cu comenzi de pregătire, compilare, instalare, configurare, curățare și verificare, care completează secțiunile de bază %prep, %conf, %build, %install, %check și %clean. Pentru a rula un script suplimentar înainte de a executa codul din secțiunea de bază, a fost propusă opțiunea „-p”, iar după secțiunea de bază — opțiunea „-a”. Astfel de substituții pot fi utile pentru ajustări punctuale ale comportamentului în utilizarea modului de compilare declarat menționat anterior.
- În părțile generate dinamic ale fișierelor SPEC este permisă includerea de directive și secțiuni care nu afectează procesul de compilare.
- A fost adăugată macrocomanda %builddir și a fost implementată o opțiune gestionată prin RPM care permite legarea propriilor directoare de compilare la pachete separate.
- A fost propus un nou protocol „multi-file”, care accelerează semnificativ generarea dependențelor.
- În comanda rpm a fost adăugată opțiunea „—json” pentru a genera rezultatele interogărilor în format JSON.
- A fost adăugat pluginul rpm-plugin-unshare, care oferă izolare pentru scripturile executate în secțiunile de compilare, utilizând spații de nume în Linux. De exemplu, pluginul permite interzicerea accesului la rețea și limitarea accesului la sistemul de fișiere, precum și utilizarea unor directoare private separate \/tmp și \/home pentru a asigura protecția în cazul în care se lucrează nesigur cu fișiere temporare în timpul compilării pachetelor.
- A fost propus un API public pentru dezvoltarea de pluginuri, care va menține compatibilitatea între versiuni. Anterior, API-ul pentru pluginuri era destinat doar utilizării interne și putea suferi modificări de la o versiune la alta.
- În comanda rpmkeys au fost adăugate opțiunile „—list” și „—delete”.
- Echipa rpmsign a adăugat suport pentru crearea de semnături digitale pentru pachete, folosind chei ECDSA.
- Suportul pentru compilările repetate a fost îmbunătățit. A fost adăugat macrocomanda „%build_mtime_policy”, care permite gestionarea conținutului etichetelor adăugate în timpul compilării (prin valoarea clamp_to_source_date_epoch se poate utiliza o etichetă fixă, iar prin clamp_to_buildtime se poate specifica timpul efectiv de compilare).
- În fișierele sysusers.d este permisă adăugarea de linii pentru definirea membrilor grupului.
- S-a asigurat suport corect și independent de distribuții pentru fișierele debuginfo.
- Sintaxa macrocomenzilor %patchN (fără spațiu înainte de N) a fost declarată învechită, utilizarea acesteia va conduce acum la o eroare (trebuie folosită sintaxa „%patch N” sau „%patch -P N”, unde N este numărul patch-ului).
- Parserul OpenPGP învechit a fost eliminat.
- Generatoarele de dependențe pentru Perl și Python ABI au fost mutate în repozitorii separate.
Sursa: opennet.ro
