22.3.2. 改善されたパッケージ体験
RHEL 9 と RHEL 10 の間で、パッケージングエクスペリエンスがどのように改善されたかを確認してください。
- 動的
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ファイル内の関連するコメントブロックと 期待される形式の表 を参照してください。 - 新しいオプションの
%confspecファイルセクション -
このセクションを使用すると、
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-sqmacros.rpmsign-sequoiaファイルを/etc/rpm/ディレクトリーにコピーします。$ cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/