23.3. RPM の主な機能および変更
Red Hat Enterprise Linux 9 には RPM バージョン 4.16 が同梱されています。このバージョンでは、以前のバージョンに加えて、多くの機能拡張が導入されました。
主な変更には以下のものがあります。
以下の主要機能を含む新しい SPEC の機能
高速なマクロベースの依存関係ジェネレータ
依存関係ジェネレーターを通常の RPM マクロとして定義できるようになりました。これは、組み込みの Lua インタープリター (
%{lua:…}
) と組み合わせて使用すると特に便利です。これにより、洗練された高速なジェネレーターを作成し、冗長なフォークを回避してシェルスクリプトを実行できます。以下に例を示します。
%__foo_provides() %{basename:%{1}}
%__foo_provides() %{basename:%{1}}
Copy to Clipboard Copied! 動的ビルド依存関係の生成を可能にする
%generate_buildrequires
セクション追加のビルド依存関係は、RPM のビルド時に、新しく利用可能になった
%generate_buildrequires
を使用してプログラムで生成できるようになりました。これは、特殊なユーティリティーが、Rust、Golang、Node.js、Ruby、Python、Haskell などのランタイム依存関係またはビルド時依存関係を判断するために、一般的に使用される言語で記述されたソフトウェアをパッケージ化する場合に役立ちます。メタ (順不同) な依存関係
meta
と呼ばれる新しい依存関係修飾子により、特にインストール時依存関係またはランタイム依存関係ではない依存関係を表現できます。これは、メタパッケージの依存関係を指定する場合など、通常の依存関係の順序付けにより発生する可能性のある不要な依存関係ループを回避するのに役立ちます。以下に例を示します。
Requires(meta): <pkgname>
Requires(meta): <pkgname>
Copy to Clipboard Copied! 式でのネイティブなバージョン比較
新しく対応した
v"…"
形式を使用することで、式内の任意のバージョン文字列を比較できるようになりました。以下に例を示します。
%if v"%{python_version}" < v"3.9"
%if v"%{python_version}" < v"3.9"
Copy to Clipboard Copied! チルダとは異なるカレットバージョンの演算子
新しいキャレット (
^
) 演算子を使用すると、ベースバージョンよりも高いバージョンを表すことができます。これは、逆の意味を持つ既存のチルダ (~
) 演算子を補完するものです。-
%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 1
%bcond gnutls 1
Copy to Clipboard Copied! bootstrap
ビルド条件 (デフォルトで無効) を作成するには、次のように指定します。%bcond bootstrap 0
%bcond bootstrap 0
Copy to Clipboard Copied! openssl
ビルド条件 (デフォルトでgnutls
の反対) を作成するには、次のように指定します。%bcond openssl %{without gnutls}
%bcond openssl %{without gnutls}
Copy to Clipboard Copied!
%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
) に切り替わりました。その結果、パッケージのインストール時間が短縮されました。特に大規模なトランザクションなどで顕著になる可能性が高いです。