
RPM 6.0への移行は、Red Hat Enterprise Linux 、SUSE、およびその派生エコシステムで最も広く使用されているパッケージマネージャにとって転換点となります。このリリースは、セキュリティ、パッケージ形式、およびツールの近代化に向けた長年の取り組みの集大成であり、プロジェクトのあらゆる側面にその成果が表れています。システム管理やソフトウェアパッケージングに携わる方にとって、この変更はパッケージのビルド、署名、検証、およびインストール方法に影響を与えるため、重要な意味を持ちます。
リリースは2025年9月22日に行われ、リリース候補版が最終バージョンとして確定しました。公式発表に加え、ドキュメントの充実とデフォルト動作の変更にも多大な労力が費やされました。RPM 6.0では、新しいv6フォーマットとの互換性が導入され、暗号化検証が強化されるとともに、v4パッケージのサポートが維持され、v3のインストールが不要になりました。
RPM 6.0とは何か、そしてなぜそれが重要なのか
RPM 6.0では、より安全な署名方法を統合し、旧式のアルゴリズムを無効化し、最新のサイズとメタデータに対応したパッケージ形式への道を開きました。v4形式は25年前のものであり、コードベースは30周年を迎えようとしているため、現在の標準規格と現代のリポジトリのサイズに対応するには、今回の大幅な改訂が必要でした。
公式発表では、複数のOpenPGP署名の管理、OpenPGP v6の鍵と署名(ポスト量子暗号を含む)のサポート、そして完全かつ検証可能なリリースtarballを取得するための戦略の採用といった重要な成果が強調されています。主な目的は、パッケージ作成者や管理者の日常業務における互換性を損なうことなく、セキュリティ水準を向上させることです。
ダウンロードとフットプリント
配布ファイルには、メインソースファイル rpm-6.0.0.tar.bz2 と、整合性検証用の SHA256 チェックサムが含まれています。SHA256 : 14abb1b944476788d90005d8d61d5d30fce80d9f0de11eb657b14e5c9ef27441。
4.20.1 と比較した変更点の概要
- v4およびv6パッケージのサポート詳細な互換性に関する注意事項が記載されています。
- パケットごとに複数の OpenPGP 署名と、OpenPGP v6 および PQC キーのサポート。
- 以前にインポートしたキーを更新し、サイクル全体を通じて完全な指紋または ID を使用します。
- v3 パッケージ インストーラーは廃止されます。rpm2cpio を使用して表示および抽出することはできますが、インストールすることはできません。
- デフォルトで署名検証を厳格に実施し、エコシステムのセキュリティを強化します。
- マニュアルページとドキュメントが大幅に改訂され、公式 Web サイトにバージョン管理されたコンテンツが掲載されました。
- 純粋で検証可能なリリースtarball再現性と監査を強化します。
一般的な使用のための変更と改善
rpmkeysユーティリティは、キー管理において大きな注目を集めています。rpmkeys --importコマンドによるキーの更新(短い曖昧な識別子を完全なフィンガープリントに更新する機能を含む)、パイプからのインポート、rpmkeys --exportコマンドによるエクスポート、そして異なるキーリングバックエンド間での一貫した操作が可能になりました。さらに、rpmkeys --rebuildコマンドを使用すると、キーリングの内容を再構築してバックエンド間で移行でき、キー検索では大文字と小文字が区別されなくなりました。
rpmsignも大きく進化しました。マクロ%_openpgp_signで制御されるGnuPGまたはSequoia-sqで署名できるようになりました。サブコマンドrpmsign –addsignは既存の署名を置き換えなくなりました。デフォルトでは、v6パッケージに任意の数の署名を追加し、–rpmv6オプションが使用されている場合はv4パッケージにも追加します。一方、rpmsign –resignは以前のすべての署名を新しい署名に置き換えます。
クエリでは、rpmformat(v3、v4、v6のいずれであるかを判別するため)やopenpgp(すべてのOpenPGP署名を管理するため)などのタグ拡張機能が追加されます。:hashalgoフォーマッタが組み込まれ、ハッシュアルゴリズム名が表示されます。また、–filemimeエイリアスが登場し、各ファイルのMIMEタイプを照会できます。メッセージ内の用語は標準化され、OpenPGPが一貫して使用され、v3のヘッダーおよびペイロード署名はレガシーとしてラベル付けされます。
RPM 6.0 の新しい計算機能とバグ修正
新しい機能により、検証中に設定可能なサマリーセットが計算され、RPMデータベースに保存されるため、ソースパッケージファイルの識別に役立ちます。複数の運用上の問題が解決されました。スクリプトレットのエラーがトランザクション結果コードに影響を与えるようになりました。特定のトリガーの失敗が関連する操作に影響を与えるようになりました。また、`--hash`、`--percent`、`--test`と`--restore`の組み合わせに関する問題が修正されました。
rpmgraph(rpm2archiveがtarとcpioに使用する接尾辞)におけるセグメンテーション違反やメモリリークなどのバグが修正され、manページも大幅に書き直されました。統一されたスタイルと例、コンポーネントとフォーマットに関する新しいページ、ユーザーコマンドのセクション1への移動、そしてこれまで文書化されていなかった側面への対応などが含まれています。公式ウェブサイトのバージョン管理されたドキュメントには、manページ、リファレンスマニュアル、およびAPIドキュメントが含まれています。
包装とパッケージ構造
rpmbuild は、%_rpmformat マクロ (値 6 または 4) によって制御される 2 種類のフォーマットを生成できるようになりました。さらに、%_openpgp_autosign_id が定義されている場合、ビルド プロセスで自己署名が有効になり、この設定を容易にするために rpm-setup-autosign ツールが追加されました。
マクロでは、複数行の定義を容易にするために %{span:…} が追加され、XDG ベース パスを評価するために %{xdg:…} が追加されました。E2Kアーキテクチャのサポートが組み込まれ、一連の修正も含まれています。ヘッダー内のフォントとパッチの順序、c 引数を尊重する Lua glob、正しい位置でのアーキテクチャ検証、ビルド システム固有の %prep セクションの受け入れ、RPATH と RUNPATH が共存する場合の check-rpaths の修正などです。
`rpmspec --shell` のメモリリーク、存在しないディレクトリを使用した `rpmbuild -rs` におけるバージョン 4.20 への回帰、および `rpm --eval` における余分な改行が修正されました。マルチモードでの無効な依存関係ジェネレータ出力によるセグメンテーション違反も解決され、`brp-elfperms` ポリシーが削除されました。最後に、非推奨の `--nodirtokens` スイッチが `rpmbuild` から削除されました。
APIの変更
キーリング領域では、キーの反復処理と管理を行うための関数として、rpmKeyringInitIterator、rpmKeyringIteratorNext、rpmKeyringIteratorFree、rpmKeyringVerifySig2、rpmKeyringLookupKey、rpmKeyringModify が追加されました。また、rpmPubkey には、同じキーの記述子をマージするための rpmPubkeyMerge に加え、rpmPubkeyFingperint、rpmPubkeyFingerprintAsHex、rpmPubkeyKeyIDAsHex、rpmPubkeyArmorWrap などのアクセサリが追加されました。
永続トランザクションキーストアには、rpmtxnImportPubkey、rpmtxnDeletePubkey、およびrpmtxnRebuildKeystoreが含まれます。rpmSign操作は、RPMSIGN_FLAG_RESIGN、RPMSIGN_FLAG_RPMV4、およびRPMSIGN_FLAG_RPMV6という新しいフラグで制御されます。また、rpmteVfyLevelとrpmteSetVfyLevelも追加され、Pythonバインディングではそれぞれte.VfyLevelとte.SetVfyLevelが使用できます。
複数の署名の場合、RPMTAG_OPENPGP、RPMSIGTAG_OPENPGP (前のもののエイリアス)、検証フラグ RPMVSF_NOOPENPGP などの識別子が表示されます。新しいタグが追加されます: RPMTAG_PAYLOADSIZE、RPMTAG_PAYLOADSIZEALT、RPMTAG_RPMFORMAT、RPMTAG_FILEMIMEINDEX、RPMTAG_MIMEDICT、RPMTAG_FILEMIMES、RPMTAG_SOURCENEVR、RPMTAG_PAYLOADSHA512、RPMTAG_PAYLOADSHA512ALT、RPMTAG_PAYLOADSHA3_256、RPMTAG_PAYLOADSHA3_256ALT、RPMTAG_SHA3_256HEADER。
タグ名が変更されました。RPMTAG_PAYLOADDIGEST は RPMTAG_PAYLOADSHA256 に、RPMTAG_PAYLOADDIGESTALT は RPMTAG_PAYLOADSHA256ALT に、RPMTAG_PAYLOADDIGESTALGO は RPMTAG_PAYLOADSHA256ALGO の下に廃止済みとしてマークされます。SHA -3 識別子RPM_HASH_SHA3_256 と RPM_HASH_SHA3_512 が追加され、v6 パッケージのファイルごとの MIME 関連シンボル (rpmfilesFMime や rpmfiFMime など) と RPMFI_NOFILEMIME フラグが追加されます。
OpenPGP環境では、RFC 9580に準拠した識別子が追加され、v6署名のプレソルトを取得するためのpgpDigParamsSalt関数も追加されました。ダイジェストセットについては、rpmDigestBundleUpdateID関数(個々の識別子を更新)が追加されました。その他の新機能としては、rpmtsAddInstallElement関数がサポートされていない形式に対して3を返すようになったこと、fdSize関数が非正規ファイルタイプのエラーを報告するようになったことなどが挙げられます。
メホラス・インターナス
RPMコードはC++20に移行中です(Pythonプラグインとバインディングを除く)。ソースファイルは.ccと.hhに名前変更され、動的構造体はSTLに移行され、参照カウントはアトミック操作によって強化されます。さらに、テストスイートが拡張され、テスト作成が簡素化されます。
真のキーチェーン抽象化と、openpgp.cert.d に基づく実験的なバックエンドが導入されました。ローカルドキュメントを表示するための`build make site` ターゲットが追加され、テストイメージがツールボックスに適合しました。RPMTAG 名にアンダースコアが使用できるようになり、予約済みの署名サイズや代替メカニズムが署名に干渉する問題など、リグレッションが修正されました。
トランザクションロックなしのキーリング読み取り、rpmioMkpath の競合状態、マクロエラーメッセージの再帰深度、passwd または group の空のフィールドが原因でエントリが無視されるシナリオが修正されました。内部マクロがファイルの読み込み前に再び使用できるようになり、rpmSign の fdSize の失敗が正しく処理され、--querytags の擬似タグがクリーンアップされ、find-provides および find-requires のレガシースクリプトでインストールプレフィックスが尊重されるようになりました。
その他の内部改善
ファイルに関連する Python の参照リークも解決され、非決定性を防ぐために依存関係ストレージが安定化され、u! エントリを使用した sysusers スクリプトでの chroot エスケープが修正され、更新失敗時の戻りコードで 4.19 に回帰する問題が対処されました。rpmrcのマクロファイルについて警告が表示され、トランザクションロックが `--rebuilddb` の後に再作成され、`provides gpg(keyid)` が `gpg-pubkey` から削除され、意図せず ABI に漏洩したシンボルがクリーンアップされました。
Signalの非移植的な使用箇所が排除され、rpmlogのブロッキングが最適化され、Pythonバインディングは複数のサブインタープリタのモジュール分離をサポートするようになり、ASANテストによってリソースリークが修正されました。これらの改善により、全体的な堅牢性、移植性、保守性が向上します。
RPMをコンパイルするための要件
C99コンパイラに加えてC++20コンパイラも必要になりました。C++20モジュールのサポートは不要です。Sequoiaでビルドするには、rpm-sequoia 1.9.0以降(デフォルト)、バインディング用のPython 3.10以降、およびmanページ用のscdocジェネレータが必要です。
リリース版のtarballには、事前に構築されたAPIドキュメントは含まれなくなりました。Doxygenを使用してドキュメントを作成するのは任意です。バージョン固有の事前に構築されたAPIは、プロジェクトのFTPサーバーで入手できます。
RPM 6.0 の互換性とフォーマットの基調講演
v6 パッケージ形式では、64 ビットのファイル サイズと関連する制限が導入され、暗号化の近代化として MD5 と SHA1 が削除され、ヘッダーに SHA3-256 ハッシュ、ペイロードに SHA512 と SHA3-256 ダイジェストが使用されるようになりました。MIME情報はファイルごとに追加され、バージョン 4.14 以降は RPM が幅広くサポートされています (一部制限あり)。v6 では外部依存関係ジェネレーター モードはサポートされなくなり、バージョン 4.6 より前の rpmlib の依存関係が削除され、ノイズが削減されています。
v6 パッケージは、バージョン 4.6 以降の RPM を使用して照会でき、4.12 で解凍でき、4.14 以降で検証およびインストールできますが、既知の制限事項があります。v4パッケージは引き続き完全にサポートされており、6.0 で生成されたパッケージは 4.x ブランチのパッケージと同一です。ただし、デフォルト設定では、4.14 より前の RPM を使用してビルドされたパッケージは、弱いダイジェストを使用しているため検証されません。これらのダイジェストを無視するには、`%_pkgverify_level` を `signature` に変更するか、弱いダイジェストを検証する必要がある場合は、`%_pkgverify_flags` を 0 に設定して 4.x の動作に戻すことができます。
v3 のインストールは削除されますが、rpm2cpio を使用して照会および抽出することは可能です。デフォルトでは、RPM は v6 パッケージをビルドします。これは、%_rpmformat を 4 に設定することで元に戻すことができます。RPM 6.0 以降でビルドされたパッケージでは、Lua posix.fork ファミリーは無効になりますが、4.20 以前でビルドされたパッケージでは引き続き機能します。
その他の考慮事項:署名キーの設定は、%_openpgp_sign_id で定義されるようになりました(%_gpg_name との下位互換性)。低レベルの署名マクロはパラメトリックになり、%__gpg_sign_cmd のカスタムオーバーライドはそのままでは機能しなくなりました。%_passwd_path と %_group_path は、複数の NSS ソースを使用するためにコロン区切りのリストとしてサポートされるようになり、–pkgid および –hdrid クエリスイッチは削除されました。
RPM 6.0 と Fedora 43: 範囲、利点、テスト
Fedora 43におけるRPM 6.0へのアップグレードは、セキュリティの強化とv6フォーマットへの移行を目的としていますが、現時点では新しいフォーマットをデフォルトとして採用するわけではありません。Fedora 43では引き続きデフォルトでv4が生成され、署名検証の厳格な実施は、今後のリリースにおけるシステム変更として対応される予定です。
Fedoraにとっての主なメリットは、OpenPGPキーが常にフィンガープリントまたは完全なIDで識別されるようになり、rpmkeys –importコマンドで更新できるようになったこと、パッケージごとに複数の署名がサポートされたこと、ビルド時にローカルで自己署名が可能になったこと、そしてGnuPGの代替としてSequoia-sqが使用できるようになったことです。また、v6フォーマットをエコシステム内でテストしやすくなり、グローバルな採用を強制する必要もなくなりました。
以下の事項は対象外です。Fedoraのv6フォーマットへの全般的な移行、およびデフォルトの検証モードの変更。変更を担当するメンバーはRPMのオーバーライド処理と互換性の問題への対応を担当し、その他の開発者はテスト、問題報告、および必要に応じたサードパーティツールの適応を担当します。
アップデートの影響と互換性:新しいキーアドレス形式と関連する署名出力の変更により、サードパーティ製のスクリプトやツールに調整が必要になる場合があります。早期テストでは、インポートしたキーの更新、rpmkeysを使用したキーチェーン管理、およびv6形式と外部ソフトウェアとの互換性(%_rpmformatを6に設定)を検証することをお勧めします。
Fedora での RPM 6.0 ユーザーエクスペリエンス
ユーザーエクスペリエンス:署名とキー関連の出力は、大文字と小文字の両方に標準化され、キーは指紋または完全なIDで表示され、衝突が発生しやすい従来の短いIDは廃止されます。rpmkeysが公式のキーリングツールとして確立され、gpg-pubkey擬似パッケージを手動で操作するなどの従来の方法は非推奨となり、rpmkeysまたは新しいAPIに移行する必要があります。
依存関係: soname は変更されないため、依存関係の再構築は不要です。他の Fedora の変更との依存関係はありません。RPM は C++ のようにビルドされるため、libstdc++ へのランタイム依存関係が追加されます。Sequoiaによる署名には、オプションの依存関係として sequoia-sq 1.0 以降が必要で、パッケージ署名にのみ影響します。
緊急時対応計画:必要に応じてRPM 4.20に戻す(ベータ版のフリーズを期限とするが、リリースは停止しない)。v6形式がまだディストリビューションのデフォルトになっていない場合でも、配信は継続する。
RPM 6.0 リリースノートと背景発表
前回のリリース候補版にはバグ修正とマニュアルページの更新が組み込まれており、最終版に昇格しました。RPMチームが署名したこの発表では、このマイルストーンに向けた作業は 2007 年頃の rpm.org の再起動以来進行中であり、マイルストーンには 64 ビット ファイル サイズ、プラグイン可能な依存関係ジェネレータ、トランザクション プラグイン、豊富な依存関係、ファイル トリガー、デバッグ情報の改善、新しいデータベース バックエンド、Lua 統合とマクロ式、動的なビルド要件、仕様生成、ユーザーとグループのサポート、宣言型ビルド システムなどが含まれていることが強調されています。
300人以上が、複数のディストリビューションや組織からコードを提供してきました。プロジェクトの歴史とコミュニティの活動は、 RPM 6.0が継承し、さらに発展させている安定性と規模を物語っています。
RPM 6.0が描くのは、今後10年間を見据えた強化されたパッケージマネージャーの姿です。より優れた暗号化、大容量に対応したフォーマット、より強力なツール、最新のドキュメントに加え、管理者、パッケージ作成者、エコシステムが予期せぬ事態なく新機能を採用できるよう、明確な互換性パスが用意されています。