Après un an de développement, la version 4.20.0 du gestionnaire de paquets RPM a été publiée. Le projet RPM4 est développé par Red Hat et est utilisé dans des distributions telles que RHEL, Fedora, SUSE, openSUSE, ALT Linux, OpenMandriva, Mageia, PCLinuxOS et Tizen. Le code du projet est distribué sous les licences GPLv2 et LGPLv2.
L'année prochaine, une branche majeure de RPM 6 devrait être publiée, intégrant un nouveau format d'archive qui permettra, contrairement au format cpio actuellement utilisé, de créer des paquets de plus de 4 Go (cette limitation est importante car le paquet SRC de Chromium est proche de la limite avec une taille de 3.7 Go). La nouvelle branche devrait également permettre l'utilisation du langage C++ pour le développement de RPM. Cette nouvelle branche significative coïncidera avec l'anniversaire du projet — le 27 novembre 2025, cela fera 30 ans depuis le premier commits dans RPM. Les versions RPM 5.x seront omises pour éviter tout chevauchement avec le projet RPM5, qui n'est pas directement lié au RPM de Red Hat, développé par une équipe de développeurs indépendante et qui n'est pas mis à jour depuis 2016.
Les améliorations les plus notables dans RPM 4.20 :
- Une nouvelle utilitaire rpm2archive a été introduit, remplaçant l'utilitaire rpm2cpio, et facilitera ultérieurement la transition vers le nouveau format de paquets, ne s'appuyant pas sur cpio. Contrairement à rpm2cpio, ce nouvel utilitaire convertit le fichier RPM non pas en archive cpio, mais en archive au format tar, compressée avec gzip. L'ancienne utilitaire rpm2cpio est remplacée par un lien symbolique vers rpm2archive.
- Un système de construction déclaratif a été proposé, basé sur l'utilisation de la nouvelle directive « BuildSystem », à travers laquelle le système de construction utilisé lors de la création du paquet peut être défini. Le code source est automatiquement préparé, compilé et installé en tenant compte du système de construction spécifié, sans avoir à définir séparément dans le fichier SPEC les scripts de préparation, de construction et d'installation dans les blocs « %prep », « %build » et « %install ». Dans RPM, les systèmes de construction pris en charge sont définis sous forme de collections de macros.
L'idée principale est que le format de configuration déclaratif permettra aux développeurs de distributions de créer des macros distinctes pour des processus de construction standardisés, afin d'éviter de définir des scénarios répétitifs dans chaque paquet. Par exemple, au lieu de définir des séquences de lancement pour les commandes configure et make pour les programmes utilisant Autotools, il suffit maintenant d'indiquer « BuildSystem: autotools » et de se passer des sections « %prep », « %build » et « %install ». À l'heure actuelle, de telles macros ont été préparées pour Autotools et CMake. Si un comportement non standard doit être mis en œuvre, les mainteneurs de paquets peuvent ajouter leurs propres macros pour redéfinir différentes étapes de la formation du paquet.
- Ajout du support pour l'attachement de sections supplémentaires aux commandes de préparation, de construction, d'installation, de configuration, de nettoyage et de vérification, complétant les sections de base %prep, %conf, %build, %install, %check et %clean. Pour exécuter un script supplémentaire avant l'exécution du code de la section de base, une option « -p » est proposée, et après la section de base — l'option « -a ». Ces substituts peuvent être utiles pour un ajustement précis du comportement lors de l'utilisation du mode de construction déclaratif décrit ci-dessus.
- Il est désormais permis d'inclure des directives et des sections qui n'affectent pas le processus de construction dans les parties générées dynamiquement des fichiers SPEC.
- Ajout de la macro %builddir et mise en œuvre d'une fonctionnalité gérée par RPM pour lier ses propres répertoires de construction à des paquets individuels.
- Un nouveau protocole « multi-file » a été proposé, qui accélère considérablement la génération de dépendances.
- Une option « —json » a été ajoutée à la commande rpm pour afficher les résultats des requêtes au format JSON.
- Ajout du plugin rpm-plugin-unshare, qui assure l'isolement des scripts exécutés dans les sections de construction, en utilisant des espaces de noms dans Linux. Par exemple, le plugin permet d'interdire l'accès au réseau et de restreindre l'accès au système de fichiers, tout en utilisant des répertoires privés distincts /tmp et /home pour une protection en cas de manipulation non sécurisée de fichiers temporaires lors de la construction de paquets.
- Une API publique pour le développement de plugins a été proposée, qui maintiendra la compatibilité entre les versions. Auparavant, l'API pour les plugins était destinée à un usage interne et pouvait changer d'une version à l'autre.
- Ajout des options « —list » et « —delete » à la commande rpmkeys.
- L'équipe rpmsign a ajouté la prise en charge de la création de signatures numériques pour les paquets, en utilisant des clés ECDSA.
- La prise en charge des constructions répétées a été améliorée. Un macro « %build_mtime_policy » a été ajouté, permettant de gérer le contenu des étiquettes ajoutées lors de la construction (avec la valeur clamp_to_source_date_epoch, une étiquette fixe peut être utilisée, et avec clamp_to_buildtime, le temps de construction réel peut être spécifié).
- Il est désormais possible d'ajouter des lignes dans les fichiers sysusers.d pour définir les membres d'un groupe.
- Un support correct et indépendant de la distribution a été assuré pour les fichiers debuginfo.
- La syntaxe du macro %patchN (sans espace avant le N) a été déclarée obsolète, son utilisation entraînera désormais une erreur (il convient d'utiliser la syntaxe « %patch N » ou « %patch -P N », où N est le numéro du patch).
- Le parser OpenPGP obsolète a été supprimé.
- Les générateurs de dépendances pour Perl et Python ABI ont été déplacés dans des référentiels séparés.
Source : opennet.ru
