第7章 ソフトウェア管理
以下の章では、ソフトウェア管理に関する RHEL 8 と RHEL 9 の間の最も重要な変更点を説明します。
7.1. ソフトウェア管理における注目すべき変更
DNF/YUM によるパッケージ管理
Red Hat Enterprise Linux 9 では、ソフトウェアインストールは DNF により保証されます。Red Hat は、以前の RHEL のメジャーバージョンとの整合性を保つため、yum
コマンドの使用を引き続きサポートします。yum
の代わりに dnf
と入力しても、どちらも互換性のためのエイリアスなので、コマンドは期待通りに動作します。
RHEL 8 と RHEL 9 はDNFをベースにしていますが、RHEL 7 で使用していたYUMとの互換性があります。
詳細は、DNF ツールを使用したソフトウェアの管理 を参照してください。
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 1
bootstrap
ビルド条件 (デフォルトで無効) を作成するには、次のように指定します。%bcond bootstrap 0
openssl
ビルド条件 (デフォルトでgnutls
の反対) を作成するには、次のように指定します。%bcond openssl %{without gnutls}
-
RPM データベースは現在
sqlite
ライブラリーをベースとするようになりました。BerkeleyDB
データベースに対する読み取り専用のサポートは、移行および照会の目的で保持されています。 -
トランザクションに関する監査ログイベントを発行するための新しい
rpm-plugin-audit
プラグイン (以前は RPM 自体に組み込まれていた) パッケージビルドの並列性向上
パッケージビルドプロセスの並列化には改善が数多く行われています。この改善には、さまざまな buildroot ポリシースクリプトと、サニティーチェック、ファイル分類、サブパッケージの作成と順序付けが含まれます。その結果、パッケージは、特に大規模なパッケージ向けに、マルチプロセッサーシステムをベースに構築されるようになり、高速化と効率化が図られるようになりました。
- ビルド時のヘッダーデータの UTF-8 検証の強制
RPM は、Zstandard (
zstd
) 圧縮アルゴリズムをサポートするようになりましたRHEL 9 では、デフォルトの RPM 圧縮アルゴリズムが Zstandard (
zstd
) に切り替わりました。その結果、パッケージのインストール時間が短縮されました。特に大規模なトランザクションなどで顕著になる可能性が高いです。