21.3. RPM の主な変更点
Red Hat Enterprise Linux 10 には RPM バージョン 4.19 が同梱されています。このバージョンでは、以前のバージョンに加えて、多くの機能拡張が導入されました。
21.3.1. ユーザーエクスペリエンスとセキュリティーの向上 リンクのコピーリンクがクリップボードにコピーされました!
Sequoia をベースにした新しい OpenPGP バックエンド
RPM で、パッケージ署名の検証に Sequoia PGP が使用されるようになりました。これは従来の OpenPGP パーサーに代わるものです。Sequoia PGP は、安全性と堅牢性を重視した、OpenPGP 標準の新しい Rust ベースの実装です。
新しい rpmlua
コマンドラインツール
このツールは、Lua スクリプトレットとマクロの開発とテストに使用できる RPM Lua インタープリターをスタンドアロンで実行します。詳細は、システムの rpmlua(8)
man ページを参照してください。
新しい rpmsort
コマンドラインツール
このツールは、標準入力で渡された RPM バージョンを、sort(1)
に似た方法でソートできますが、RPM のバージョニング方式を認識して処理します。詳細は、システムの rpmsort(8)
man ページを参照してください。
新しい dbus-announce
プラグイン
このプラグインは、パッケージがインストールまたは削除されたときなど、RPM トランザクションに関する基本情報をシステム D-Bus に書き込みます。他のプログラムはこれらのシグナルをサブスクライブして、そのようなイベントの通知を受け取ることができます。
--freshen
モードでのサポートのダウングレード
以前は、--freshen
オプションを使用して、すでにインストールされているパッケージのみをアップグレードし、インストールされていないパッケージをスキップすることが可能でした。この機能拡張により、この操作を使用してこのようなパッケージをダウングレードすることもできます。これを行うには、--freshen
(F
) オプションと --oldpackage
オプションを組み合わせます。
21.3.2. 改善されたパッケージ体験 リンクのコピーリンクがクリップボードにコピーされました!
動的 spec
生成のサポート
spec
部分を含むファイルを事前定義された場所に配置することで、ビルドプロセス中にサブパッケージを追加できるようになりました。詳細は、動的仕様生成 を参照してください。
rpmspec
コマンドラインツールの新しい --shell
オプション
このオプションは、spec
ファイルのコンテキスト内外のいずれかで RPM マクロの開発とテストに使用できる対話型 RPM マクロインタープリターを実行します。詳細は、システムの rpmspec(8)
man ページを参照してください。
%autopatch
での個別パッチ適用のサポート
特定のパッチ番号を位置引数としてリストできるようになりました。たとえば、%autopatch 1 4 6
の場合は、パッチ番号 1、4、6 が適用されます。
%files
セクションでの適切なシェルのようなグロブとエスケープ
ファイル名内のワイルドカードパターンやエスケープ文字 (バックスラッシュや引用符など) は、Bash などのシェルインタープリターの動作を反映した、より一般的な方法で解釈されるようになりました。以前は、これらのルールに対する文書化されていない制限と例外によって予期しない結果が生じ、spec
ファイルの %files
セクションでより複雑なパターンが使用できなくなる可能性がありました。
分析され展開された spec
ファイルのコンテンツを含むソース RPM パッケージの新しいタグ
パッケージングの問題の分析を支援するために、ソース RPM パッケージに新しい RPMTAG_SPEC
タグが追加されました。このタグには、ビルド中に使用される形式で拡張された spec
ファイルの内容が含まれます。このタグは、rpm --qf ‘%{spec}’ -q /path/to/my/src.rpm
コマンドを実行すると表示できます。
ビルドの並列処理でシステムリソースが考慮されるようになる
RPM は、パッケージのビルド時に使用する並列プロセスとスレッドの数を見積もる際に、利用可能な物理メモリーとアドレス空間を考慮するようになりました。これは、CPU の数が多いがメモリーの量が限られているシステムなど、リソースが制限されたシステムでのパフォーマンスの問題やビルドの失敗を防ぐのに役立ちます。
これらの見積もりは、ビルド時に 1 つのプロセスまたはスレッドが必要とすると想定されるメモリー量を指定することで調整できます。それぞれ、%_smp_tasksize_proc
マクロと %_smp_tasksize_thread
マクロを定義して設定します。どちらのマクロもデフォルト値は 512 MB です。たとえば、システムにパフォーマンスの問題がある場合は、RPM のこれらの値を増やして、ビルドに割り当てる CPU の数を減らすことができます。同様に、システムが十分に活用されていない場合は、RPM のこれらの値を減らして、より多くの CPU を割り当てることができます。
詳細は、Macros for controlling build parallelism を参照してください。
zstd
によるペイロード圧縮がマルチスレッドをサポートするようになる
zstdio
圧縮メソッドは、ビルド中にペイロードを圧縮する際に使用するスレッドの数を指定するオプションの T
パラメーターを受け入れるようになりました。これにより、大規模なパッケージのビルド時間を短縮できます。この機能を有効にするには、%_binary_payload
および %_source_payload
マクロを適宜設定します。詳細は、/usr/lib/rpm/macros
ファイル内の関連するコメントブロックと 期待される形式の表 を参照してください。
新しいオプションの %conf
spec
ファイルセクション
このセクションを使用すると、spec
ファイルの %prep
または %build
セクションで設定する代わりに、ビルド用に展開されたソースを設定できます。
Lua ネイティブマクロ統合
組み込み Lua インタープリターが更新され、次の機能拡張が追加されました。
Lua テーブルを通じたオプションと引数への簡単なアクセス。
以前は、パラメトリクス Lua マクロのオプションと引数にアクセスするには、
rpm.expand()
関数を使用する必要がありました。この機能拡張により、これらのマクロはオプションと引数をそれぞれopt
およびarg
ローカルテーブルとして受け取ります。グローバルマクロコンテキスト。
マクロは、グローバル Lua 環境の
macros
テーブルを通じてアクセスできるようになりました。このテーブルは、すべての組み込みマクロを含むパラメトリクスマクロを呼び出すためにも使用できます。RPM バージョンオブジェクトと I/O ストリームの新しいバインディング。
新しい
rpm.ver()
関数を使用して、RPM バージョン文字列からオブジェクトを作成できるようになりました。これらのオブジェクトを使用して、次のアクションを実行できます。-
事前に解析された個々の EVR コンポーネントをそれぞれ
e
、v
、r
フィールドを通じて取得します。 - RPM バージョン文字列を相互に比較します。
また、新しい
rpm.open()
関数を使用して、透過的な圧縮や展開などの RPM の I/O 機能を使用するファイルストリームを開くこともできます。-
事前に解析された個々の EVR コンポーネントをそれぞれ
詳細は、Lua in RPM を参照してください。
Lua に実装された便利な文字列操作用の新しいマクロ
シェルのサブプロセスを実行しなくても、RPM マクロを使用して、部分文字列の抽出や長さの取得などの基本的な文字列操作を直接実行できるようになりました。詳細は、String operations を参照してください。
組み込みマクロとユーザー定義マクロの統一された呼び出し規則
マクロの呼び出しに使用される %foo arg
、%{foo arg}
、および %{foo:arg}
表記が同等に扱われるようになりました。ただし、小さな例外や違いが存在する可能性があることに注意してください。
複数の新しい組み込みマクロ
複数の新しい組み込みマクロが利用できるようになりました。特に注目すべきものは次のとおりです。
-
%{rpmversion}
: システムにインストールされている RPM のバージョンを取得する -
%{exists:…}
: ファイルの存在をテストする -
%{shescape:…}
: 単一の引数を期待するシェルコマンドで使用するために、文字列を一重引用符 (''
) で囲みます。
新しい %preuntrans
および %postuntrans
スクリプトレット
%preuntrans
および %postuntrans
アンインストール時スクリプトレットは、既存のインストール時 %pretrans
および %posttrans
スクリプトレットを補完します。
-
%preuntrans
スクリプトレットは、このトランザクションによって削除されるパッケージのトランザクションの前に実行されます。 -
%postuntrans
スクリプトレットは、このトランザクションによって削除されたパッケージのトランザクション後に実行されます。
Sequoia PGP によるパッケージの署名のサポートがテクノロジープレビューとして利用可能になる
パッケージの署名に GnuPG ではなく Sequoia PGP を使用するように RPM を設定する macros.rpmsign-sequoia
マクロファイルが、テクノロジープレビューとして利用できるようになりました。使用を有効にするには、次の手順を実行します。
以下のパッケージをインストールします。
dnf install rpm-sign sequoia-sq
# dnf install rpm-sign sequoia-sq
Copy to Clipboard Copied! Toggle word wrap Toggle overflow macros.rpmsign-sequoia
ファイルを/etc/rpm/
ディレクトリーにコピーします。cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/
$ cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
21.3.3. その他の主な変更点 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー名とグループ名の解決が厳密にローカルになる
パッケージをインストールするときに、RPM は、Name Service Switch (NSS) を使用するのではなく、ローカルシステムの passwd(5)
と group(5)
ファイルからそれぞれユーザーとグループに関する情報を取得するようになりました。
パッケージをビルドするときに、%defattr
ディレクティブは、実際の所有権に関する情報をディスクから取得する代わりに、ユーザーおよびグループ属性のダッシュ (-
) プレースホルダーを root
として解釈するようになりました。同様に、spec
ファイル、ソースアーカイブ、パッチファイルなどのソース RPM パッケージ内のファイルは、ディスク上の所有権に関係なく、常に root ユーザーとグループによって所有されるようになりました。
ビルドの成功後、ビルドツリー (%_builddir
) がデフォルトで削除されるようになる
以前は、rpmbuild(8)
は -bb
などのより一般的に使用されるモードではなく、--rebuild
モードでのみビルドディレクトリーをクリーンアップしました。その結果、複数のパッケージがビルドされ、時間の経過とともに不要なファイルが蓄積されるようになりました。この機能拡張により、致命的ではないビルドの問題を調査するなど、ビルドツリーを常に保持したい場合は、--noclean
オプションを使用できます。
%patch
ディレクティブは、適用するパッチ番号を明示的に指定する必要がある
パッチ番号は次のいずれかの方法で指定できます。
-
-P
オプションを使用すると、たとえば%patch -P1 -P2
のようにパッチ番号 1 と 2 を適用できます。 -
パッチ番号を位置引数として渡すと、たとえば、
%patch 1 2
のようにパッチ番号 1 と 2 が適用されます。
%patchN
構文 (N
は適用するパッチ番号) は非推奨となりました。
%patch
ディレクティブで明示的なパッチ番号が指定されていない場合、ビルドはエラーで終了します。
%patch
ディレクティブを使用して個々のパッチを手動で適用するのではなく、可能な限り %autosetup
マクロを使用することを推奨します。%autosetup
を使用すると、パッチはパッチ番号で識別される順序で自動的に適用されます。その結果、spec
ファイルの読み取りと保守が容易になります。詳細は、パッチ適用の自動化 を参照してください。