Dopo un anno di sviluppo, è stato rilasciato il gestore di pacchetti RPM 4.20.0. Il progetto RPM4 è sviluppato da Red Hat e viene utilizzato in distribuzioni come RHEL, Fedora, SUSE, openSUSE, ALT Linux, OpenMandriva, Mageia, PCLinuxOS e Tizen. Il codice del progetto è distribuito sotto le licenze GPLv2 e LGPLv2.
Il prossimo anno è prevista la pubblicazione di una nuova importante versione di RPM 6, che utilizzerà un nuovo formato di archivio, il quale, a differenza del formato cpio attualmente in uso, permetterà di creare pacchetti di dimensioni superiori a 4 GB (superare questa limitazione è importante poiché il pacchetto SRC con Chromium si avvicina al limite e ha una dimensione di 3,7 GB). Nella nuova versione si prevede anche di consentire l'uso del linguaggio C++ per lo sviluppo di RPM. Questa nuova significativa versione sarà dedicata all'anniversario del progetto: il 27 novembre 2025 ricorreranno 30 anni dal primo commit in RPM. Le versioni RPM 5.x saranno saltate per evitare sovrapposizioni con il progetto RPM5, che non è direttamente collegato a RPM di Red Hat, ma è stato sviluppato da un team indipendente di sviluppatori ed è fermo dal 2016.
I miglioramenti più significativi in RPM 4.20:
- È stata inclusa una nuova utility rpm2archive, che sostituisce l'utility rpm2cpio e faciliterà ulteriormente la transizione verso il nuovo formato di pacchetti, che non utilizza cpio. A differenza di rpm2cpio, la nuova utility converte il file RPM non in un archivio cpio, ma in un archivio nel formato tar, compresso con gzip. La vecchia utility rpm2cpio è stata sostituita da un link simbolico a rpm2archive.
- È stata proposta un sistema di build dichiarativo, basato sull'uso di una nuova direttiva 'BuildSystem', attraverso la quale può essere definito il sistema di build utilizzato durante la creazione del pacchetto. Il codice sorgente viene automaticamente preparato, compiliato e installato tenendo conto del sistema di build specificato, senza necessità di definire separatamente negli SPEC file gli script di preparazione, build e installazione nei blocchi '%prep', '%build' e '%install'. Nei RPM, i sistemi di build supportati sono definiti sotto forma di collezioni di macro.
L'idea principale è che il formato dichiarativo di configurazione consenta agli sviluppatori di distribuzioni di creare macro separate per processi di compilazione standardizzati, per evitare di definire scenari ripetitivi in ogni pacchetto. Ad esempio, invece di definire le sequenze di comando 'configure' e 'make' per i programmi che utilizzano Autotools, ora è sufficiente indicare 'BuildSystem: autotools' e fare a meno delle sezioni '%prep', '%build' e '%install'. Attualmente, macro simili sono state preparate per Autotools e CMake. Se necessario implementare comportamenti non standard, è possibile per i manutentori dei pacchetti collegare le proprie macro per ridefinire varie fasi della creazione del pacchetto.
- È stata aggiunta la supporto per l'aggiunta di sezioni aggiuntive con comandi di preparazione, compilazione, installazione, configurazione, pulizia e controllo, integrando le sezioni di base %prep, %conf, %build, %install, %check e %clean. Per eseguire uno script aggiuntivo prima dell'esecuzione del codice nella sezione di base, è stata proposta l'opzione '-p', mentre dopo la sezione di base è l'opzione '-a'. Tali sostituzioni possono essere utili per una corretta regolazione del comportamento durante l'uso della modalità di compilazione dichiarativa sopra descritta.
- È consentito includere nei file SPEC parti dinamicamente generate direttive e sezioni che non influenzano il processo di compilazione.
- È stata aggiunta la macro %builddir, e implementata la possibilità di legare i propri directory di compilazione a pacchetti separati gestita tramite RPM.
- È stato proposto un nuovo protocollo 'multi-file', che accelera significativamente la generazione delle dipendenze.
- Nel comando rpm è stata aggiunta l'opzione '--json' per la visualizzazione dei risultati delle query in formato JSON.
- È stato aggiunto il plugin rpm-plugin-unshare, che fornisce isolamento per gli script eseguiti nelle sezioni di compilazione, utilizzando gli spazi dei nomi in Linux. Ad esempio, il plugin consente di vietare l'accesso alla rete e limitare l'accesso al file system, nonché di utilizzare directory private separate /tmp e /home per proteggere in caso di operazioni non sicure con file temporanei durante la compilazione dei pacchetti.
- È stato proposto un API pubblico per lo sviluppo di plugin, che manterrà la compatibilità tra le versioni. In precedenza, l'API per i plugin era destinata solo all'uso interno e poteva cambiare da una versione all'altra.
- Nel comando rpmkeys sono state aggiunte le opzioni '--list' e '--delete'.
- Nel comando rpmsign è stata aggiunta la supporto per la creazione di firme digitali per i pacchetti, utilizzando chiavi ECDSA.
- Migliorata la supporto per le build ripetitive. Aggiunto il macro «%build_mtime_policy», che permette di gestire il contenuto delle etichette aggiunte durante la build in base al tempo (attraverso il valore clamp_to_source_date_epoch si può utilizzare un'etichetta fissa, e tramite clamp_to_buildtime si può specificare l'effettivo tempo di build).
- Nei file sysusers.d è consentito aggiungere righe per definire i membri del gruppo.
- Assicurata la corretta e distribuzione-indipendente supporto dei file debuginfo.
- Dichiarata obsoleta la sintassi dei macro %patchN (senza spazio prima di N), il cui utilizzo ora porterà a un errore (si consiglia di utilizzare la sintassi «%patch N» o «%patch -P N», dove N è il numero della patch).
- Rimosso il parser obsoleto OpenPGP.
- I generatori di dipendenze per Perl e Python ABI sono stati spostati in repository separati.
Fonte: opennet.ru
