23.2. RPM の主な変更点


Red Hat Enterprise Linux 9 には RPM バージョン 4.16 が同梱されています。

ポスト量子 RPM 検証が利用可能です

新たな暗号化の脅威からインフラストラクチャーを保護するため、RHEL 9.7 では耐量子計算機暗号 (PQC) を使用して RPM パッケージを検証する機能が導入されました。マルチシグ DNF プラグインを使用すると 、ポスト量子 RPM 署名検証を有効に できます。

RPM パッケージが有効とみなされるためには、そのすべての署名が検証に合格する必要があります。ポスト量子署名を使用して RHEL RPM パッケージを検証する 場合、RHEL 署名の検証に必要なすべての OpenPGP 証明書がシステムによって信頼されていることを確認する必要があります。これは、ソフトウェアサプライチェーンの完全性と信頼性を維持するのに役立ちます。

新機能

RHEL 9 では、RPM は以前のバージョンに比べて複数の新しい 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}
  • %patch N がパッチ番号 0 を適用しなくなる

    以前は、%patch N 構文( N はパッチ数)を使用すると、構文は N で指定されたパッチに加えて、パッチ番号 0 (Patch0)も適用していました。

    RHEL 9.6 では、%patch N 構文が修正され、パッチ番号 N のみが適用されるようになりました。

    重要

    パッチ番号を指定せずに %patch ディレクティブを使用すると、%patch 0 の省略形として Patch0 が適用されます。ただし、明示的な構文(例: %patch 0 または %patch -P 0 )を使用して、ゼロパッチ を適用するという警告が表示されます。

SQLite ベースの RPM データベース

RPM データベースは sqlite ライブラリーに基づいています。BerkeleyDB データベースに対する読み取り専用のサポートは、移行および照会の目的で保持されています。

新しい rpm-plugin-audit プラグイン

今回のアップデートにより、以前は RPM 自体に組み込まれていたトランザクションの監査ログイベントを発行するための新しい rpm-plugin-audit プラグインを使用できるようになります。

パッケージビルドの並列性向上

パッケージビルドプロセスの並列化には改善が数多く行われています。この改善には、さまざまな buildroot ポリシースクリプトと、サニティーチェック、ファイル分類、サブパッケージの作成と順序付けが含まれます。その結果、パッケージは、特に大規模なパッケージ向けに、マルチプロセッサーシステムをベースに構築されるようになり、高速化と効率化が図られるようになりました。

ビルド時のヘッダーデータの UTF-8 検証の強制

今回のアップデートにより、ヘッダーデータの UTF-8 検証がビルド時に強制的に適用されるようになりました。

RPM は Zstandard (zstd) 圧縮アルゴリズムをサポートしています。

RHEL 9 では、デフォルトの RPM 圧縮アルゴリズムが Zstandard (zstd) に切り替わりました。その結果、パッケージのインストール時間が短縮されました。特に大規模なトランザクションなどで顕著になる可能性が高いです。

RPM がインストール中に元のパッケージのチェックサムを記録します

RHEL 9.7 以降、RPM はインストール時に .rpm パッケージ全体の SHA256 および SHA512 ダイジェストを記録します。そのため、ユーザーは、RPM データベースからこれらのダイジェストを取得し、インストールされたパッケージが特定の .rpm ファイルに対応していることを確認できます。その結果、インストールされたパッケージセットが、DNF リポジトリーで使用可能なパッケージなど、既知の .rpm パッケージセットとビット単位で一致することを遡及的に検証することで、RHEL システムの整合性を向上させることができます。インストールされたパッケージのパッケージダイジェストを出力するには、次のコマンドを使用します。

$ rpm -q --qf "[%{packagedigestalgos:hashalgo} %{packagedigests}\n]" <package-name>

新しい %_pkgverify_digests マクロを設定することで、データベースに記録されるダイジェストタイプをカスタマイズすることもできます。次に例を示します。

%_pkgverify_digests 8:10

RPM が spec ファイルローカルなファイル属性と依存関係ジェネレーターをサポートするようになりました

ファイル属性とその依存関係ジェネレーターは、通常、別々のパッケージに同梱されるため、これらの属性を使用するパッケージをビルドする前にインストールする必要があります。しかし、場合によっては、ファイル属性を同梱するパッケージのビルド中にこの属性を有効にする必要があります。また、パッケージをビルドするためだけにファイル属性が必要で、属性をパッケージに同梱せずに済ませたいという場合もあります。

RHEL 9.7 以降では、以下の手順を実行することで、spec -local ファイル属性とジェネレーターを登録できます。

  1. %_local_file_attrs マクロを定義します。%_local_file_attrs は、spec ファイルに直接登録する新しい属性名のコロン区切りリストを受け入れます。
  2. 各属性に対して、%__NAME_provides%__NAME_path などの 1 つ以上の依存関係ジェネレーターマクロを定義します。NAME はローカルファイル属性の名前です。

これにより、RPM が、spec ファイルのビルド時に、依存関係の生成にファイル属性を使用するようになります。その結果、必ずしもインストール用ではないビルド時のファイル属性を作成することが可能になります。

たとえば、次の spec ファイルスニペットは、パッケージのソースにバンドルされている foobar.sh スクリプトを使用して、パッケージ化される各ファイルの provides を生成します。

Source1: foobar.sh
[...]
%define _local_file_attrs foobar
%define foobar_provides %{SOURCE1} %define foobar_path .*
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る