23.3. RPM の主な機能および変更
Red Hat Enterprise Linux 9 には RPM バージョン 4.16 が同梱されています。このバージョンでは、以前のバージョンに加えて、多くの機能拡張が導入されました。
主な変更には以下のものがあります。
以下の主要機能を含む新しい SPEC の機能
高速なマクロベースの依存関係ジェネレータ
依存関係ジェネレーターを通常の RPM マクロとして定義できるようになりました。これは、組み込みの Lua インタープリター (
%{lua:…}) と組み合わせて使用すると特に便利です。これにより、洗練された高速なジェネレーターを作成し、冗長なフォークを回避してシェルスクリプトを実行できます。以下に例を示します。
%__foo_provides() %{basename:%{1}}動的ビルド依存関係の生成を可能にする
%generate_buildrequiresセクション追加のビルド依存関係は、RPM のビルド時に、新しく利用可能になった
%generate_buildrequiresを使用してプログラムで生成できるようになりました。これは、特殊なユーティリティーが、Rust、Golang、Node.js、Ruby、Python、Haskell などのランタイム依存関係またはビルド時依存関係を判断するために、一般的に使用される言語で記述されたソフトウェアをパッケージ化する場合に役立ちます。メタ (順不同) な依存関係
metaと呼ばれる新しい依存関係修飾子により、特にインストール時依存関係またはランタイム依存関係ではない依存関係を表現できます。これは、メタパッケージの依存関係を指定する場合など、通常の依存関係の順序付けにより発生する可能性のある不要な依存関係ループを回避するのに役立ちます。以下に例を示します。
Requires(meta): <pkgname>式でのネイティブなバージョン比較
新しく対応した
v"…"形式を使用することで、式内の任意のバージョン文字列を比較できるようになりました。以下に例を示します。
%if v"%{python_version}" < v"3.9"チルダとは異なるカレットバージョンの演算子
新しいキャレット (
^) 演算子を使用すると、ベースバージョンよりも高いバージョンを表すことができます。これは、逆の意味を持つ既存のチルダ (~) 演算子を補完するものです。-
%elif、%elifos、および%elifarchステートメント オプションの自動パッチとソースのナンバリング
番号のない
Patch:タグおよびSource:タグは、リスト表示されている順序に基づいて自動的に番号が付けられるようになりました。%autopatchがパッチの範囲を受け入れる%autopatchマクロで、適用する最小パッチ番号と最大パッチ番号をそれぞれ制限する-mパラメーターと-Mパラメーターが使用できるようになりました。%patchlistおよび%sourcelistセクション新しく追加した
%patchlistセクションおよび%sourcelistセクションを使用して、各項目の前に各Patch: タグおよびSource:タグを付けずに、パッチファイルおよびソースファイルのリストを表示できるようになりました。より直感的なビルド条件の宣言方法
RHEL 9.2 以降では、新しい
%bcondマクロをビルド条件に使用できます。%bcondマクロは、ビルド条件名とデフォルト値を引数として受け取ります。古い%bcond_withおよび%bcond_withoutマクロと比較して、%bcondは理解しやすく、ビルド時にデフォルト値を計算できます。デフォルト値には任意の数値式を指定できます。以下に例を示します。
gnutlsビルド条件 (デフォルトで有効) を作成するには、次のように指定します。%bcond gnutls 1bootstrapビルド条件 (デフォルトで無効) を作成するには、次のように指定します。%bcond bootstrap 0opensslビルド条件 (デフォルトでgnutlsの反対) を作成するには、次のように指定します。%bcond openssl %{without gnutls}
%patch Nがパッチ番号 0 を適用しなくなる以前は、
%patch N構文(Nはパッチ数)を使用すると、構文はNで指定されたパッチに加えて、パッチ番号 0 (Patch0)も適用していました。RHEL 9.6 では、
%patch N構文が修正され、パッチ番号Nのみが適用されるようになりました。重要パッチ番号を指定せずに
%patchディレクティブを使用すると、%patch 0の省略形としてPatch0が適用されます。ただし、明示的な構文(例:%patch 0または%patch -P 0)を使用して、ゼロのパッチを適用するという警告が表示されます。
-
RPM データベースは現在
sqliteライブラリーをベースとするようになりました。BerkeleyDBデータベースに対する読み取り専用のサポートは、移行および照会の目的で保持されています。 -
トランザクションに関する監査ログイベントを発行するための新しい
rpm-plugin-auditプラグイン (以前は RPM 自体に組み込まれていた) パッケージビルドの並列性向上
パッケージビルドプロセスの並列化には改善が数多く行われています。この改善には、さまざまな buildroot ポリシースクリプトと、サニティーチェック、ファイル分類、サブパッケージの作成と順序付けが含まれます。その結果、パッケージは、特に大規模なパッケージ向けに、マルチプロセッサーシステムをベースに構築されるようになり、高速化と効率化が図られるようになりました。
- ビルド時のヘッダーデータの UTF-8 検証の強制
RPM は、Zstandard (
zstd) 圧縮アルゴリズムをサポートするようになりましたRHEL 9 では、デフォルトの RPM 圧縮アルゴリズムが Zstandard (
zstd) に切り替わりました。その結果、パッケージのインストール時間が短縮されました。特に大規模なトランザクションなどで顕著になる可能性が高いです。