第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) に切り替わりました。その結果、パッケージのインストール時間が短縮されました。特に大規模なトランザクションなどで顕著になる可能性が高いです。