パッケージレビューガイドライン
これはパッケージレビューのためのガイドラインです。できるだけ包括的に分かり易いようこのレビューガイドラインを作成しようとはしていますが、完璧なチェックリストを作成することは不可能だということに注意してください。レビューアと貢献者(パッケージャ)は、何らかの内容が不明確で疑わしいときは必ずfedora-packaging メーリングリストへ質問して、最も良い判断を行うべきです。
Author: Tom 'spot' Callaway
Revision: 0.30
Initial Draft: Monday Jun 27, 2005
Last Revised: Thursday, Jul 8, 2010
パッケージレビュープロセス
貢献者とレビューアはパッケージレビュープロセスに従います。
レビュー時にチェックすること
レビューにはとってもとっても多くのチェック項目があります。このチェックリストは、新人レビューアが探す範囲のカテゴリを明確にして彼らを支援するために提供されていますが、この内容を満たせば完璧という意味ではありません。レビューアはパッケージのレビュー時に自分たちで優れた判断を行うべきです。チェックリストの各項目は2つのカテゴリ SHOULD と MUST に分類されます。
- MUST: 全てのパッケージに rpmlint を実行しなければなりません。そして、その出力をレビューで提示します。[1]
- MUST: パッケージはパッケージネーミングガイドラインに従って名前を付けなければなりません。
- MUST: spec ファイルの名前はベースパッケージの
%{name}
と同じでなければなりません。特別な免除がない限り%{name}.spec
のフォーマットになります。[2]
- MUST: パッケージはパッケージングガイドラインに準拠しなければなりません。
- MUST: パッケージは Fedora が承認したライセンスでライセンスガイドラインに準拠しなければなりません。
- MUST: spec ファイルのライセンスフィールドは実際のライセンスと一致しなければなりません。[3]
- MUST: ソースパッケージ(のみ)が独自のライセンスファイルを持っている場合、そのパッケージのライセンスのテキストファイルを
%doc
に追加しなければなりません。[4]
- MUST: spec ファイルはアメリカ英語で書かなければなりません。[5]
- MUST: パッケージの spec ファイルは読み易いものでなければなりません。[6]
- MUST: パッケージのビルドに使用するソースは spec ファイルの URL で提供されているアップストリームのソースと同じでなければなりません。レビューアはこの確認作業に md5sum を使用すべきです。もし、このパッケージで指定したアップストリームの URL が存在しないなら、このパッケージをどう扱うかについてソース URL ガイドラインを参照してください。
- MUST: パッケージは少なくとも1つの主要なアーキテクチャでコンパイルしてビルドに成功しなければなりません。[7]
- MUST: パッケージをあるアーキテクチャでビルドしようとしてコンパイルに成功しないなら、そういったアーキテクチャは spec ファイルで
ExcludeArch
に設定すべきです。ExcludeArch
に設定された各アーキテクチャは bugzilla に登録されなければなりません。登録したバグ ID は対応する ExcludeArch 行の隣にコメントとして記載すべきです。[8]
- MUST: パッケージングガイドラインの例外事項に記載されているパッケージを除いて、ビルドをするための全ての依存関係は
BuildRequires
に定義されなければなりません。例外として記載されているBuildRequires
を定義するかどうかは任意です。良識的に考えてください。
- MUST: spec ファイルはロケールを適切に扱わなければなりません。これは
%find_lang
マクロを使用するこで行われます。%{_datadir}/locale/*
を使用することは厳密に言えば禁止されています。[9]
- MUST: 動的リンカのデフォルトパスに共有ライブラリ(ただのシンボリックリンクではない)を含む全てのバイナリ RPM パッケージ(又はサブパッケージ)は
%post
や%postun
で ldconfig を実行しなければなりません。[10]
- MUST: パッケージはシステムライブラリのコピーを含めてはいけません。[11]
- MUST: パッケージを再配置可能であるように設計するなら、パッケージャはレビュー時にその要件、つまりその特別なパッケージの再配置を正当化する理由をはっきりと説明しなければなりません。この説明を行わずに /usr のパスを使用することは blocker と見なされます。[12]
- MUST: パッケージは作成するディレクトリを全て所有しなければなりません。もしあなたのパッケージが使用するディレクトリを作成しないなら、そのディレクトリを作成するパッケージに依存すべきです。[13]
- MUST: Fedora パッケージは spec ファイルの %files セクションにリストされているファイルを1回以上リストしてはいけません(有名な例外: 特殊な状況でのライセンステキスト)。[14]
- MUST: ファイルのパーミッションは適切にセットされなければなりません。例えば、実行プログラムは実行権限をセットします。全ての
%files
セクションは%defattr(...)
行を含めなればなりません。[15]
- MUST: パッケージは一貫性を持ってマクロを使用しなければなりません。[16]
- MUST: パッケージはコード、又は許容されるコンテンツを含まなければなりません。[17]
- MUST: 大きなドキュメントファイルは -doc サブパッケージに分割されなければなりません(大きいの定義はパッケージャの判断に一任されますが、サイズに対しての制限はありません。大きいはサイズか分量のどちらか一方でも構いません)。[18]
- MUST: あるパッケージが %doc にドキュメントを含んでいるなら、アプリケーションの実行に影響を与えてはいけません。要約すると、ドキュメントが %doc にあるなら、そのプログラムはそこにドキュメントがなかったとしても正常に実行されなければなりません。[18]
- MUST: ヘッダファイルは -devel パッケージに含めなければなりません。[19]
- MUST: 静的ライブラリは -static パッケージに含めなければなりません。[20]
- MUST: あるパッケージがバージョン指定のある共有ライブラリ(例 libfoo.so.1.1)を含むなら、.so(バージョン指定がない)のライブラリファイルを -devel パッケージに含めなければなりません。[19]
- MUST: 大半のケースでは -devel パッケージは
Requires: %{name} = %{version}-%{release}
のようにフルバージョンの依存関係を使用してベースパッケージを要求しなければなりません。[21]
- MUST: パッケージは libtool のアーカイブ .la ファイルを含めてはいけません。.la ファイルはビルド時に spec ファイルで削除されなければなりません。[20]
- MUST: GUI アプリケーションを含むパッケージは %{name}.desktop ファイルを含めなければなりません。そして %{name}.desktop ファイルは %install セクションの desktop-file-install で適切にインストールされなければなりません。あなたの GUI アプリケーションが .desktop ファイルを必要ないと思うなら、その理由をコメントで spec ファイルに記載しなければなりません。[22]
- MUST: パッケージは他のパッケージが既に所有しているファイルを所有してはいけません。基本原則として最初にインストールされるパッケージが、他のパッケージがそのファイルの存在に依存する可能性があるファイルを所有すべきです。例えば、これは
filesystem
又はman
パッケージによって所有されるファイルであっても所有権を共有するようなパッケージは Fedora にはないということです。もし他のパッケージが所有しているファイルを所有するための適切な理由があるなら、パッケージレビューのときに連絡してください。[23]
- MUST: rpm パッケージの全てのファイル名は UTF-8 でエンコードされなければなりません。[24]
- SHOULD: If the source package does not include license text(s) as a separate file from upstream, the packager SHOULD query upstream to include it. [25]
- SHOULD: The description and summary sections in the package spec file should contain translations for supported Non-English languages, if available. [26]
- SHOULD: The reviewer should test that the package builds in mock. [27]
- SHOULD: The package should compile and build into binary rpms on all supported architectures. [28]
- SHOULD: The reviewer should test that the package functions as described. A package should not segfault instead of running, for example.
- SHOULD: If scriptlets are used, those scriptlets must be sane. This is vague, and left up to the reviewers judgement to determine sanity. [29]
- SHOULD: Usually, subpackages other than devel should require the base package using a fully versioned dependency. [21]
- SHOULD: The placement of pkgconfig(.pc) files depends on their usecase, and this is usually for development purposes, so should be placed in a -devel pkg. A reasonable exception is that the main pkg itself is a devel tool not installed in a user runtime, e.g. gcc or gdb. [30]
- SHOULD: If the package has file dependencies outside of /etc, /bin, /sbin, /usr/bin, or /usr/sbin consider requiring the package which provides the file instead of the file itself. [31]
- SHOULD: your package should contain man pages for binaries/scripts. If it doesn't, work with upstream to add them where they make sense.[32]
Fedora パッケージングガイドラインのリファレンス
- ↑ パッケージングガイドライン: rpmlint の使用
- ↑ ネーミングガイドライン: spec ファイルの名前付け
- ↑ ライセンスガイドライン: 無効なライセンス短縮名
- ↑ ライセンスガイドライン: ライセンステキスト
- ↑ パッケージングガイドライン: 要約とパッケージ説明
- ↑ パッケージングガイドライン: spec ファイルの読み易さ
- ↑ Packaging Guidelines: アーキテクチャサポート
- ↑ Packaging Guidelines: アーキテクチャの違いによるビルドの失敗
- ↑ Packaging Guidelines: ロケールファイルを扱う
- ↑ Packaging Guidelines: 共有ライブラリ
- ↑ Packaging Guidelines: システムライブラリの重複
- ↑ Packaging Guidelines: 再配置可能なパッケージ
- ↑ Packaging Guidelines: ファイルとディレクトリの所有者
- ↑ Packaging Guidelines: 重複ファイル
- ↑ Packaging Guidelines: ファイルパーミッション
- ↑ Packaging Guidelines: マクロ
- ↑ Packaging Guidelines: コード Vs. コンテンツ
- ↑ 18.0 18.1 Packaging Guidelines: ドキュメント
- ↑ 19.0 19.1 Packaging Guidelines: Devel パッケージ
- ↑ 20.0 20.1 Packaging Guidelines: 静的ライブラリのパッケージング
- ↑ 21.0 21.1 Packaging Guidelines: ベースパッケージの要求 Cite error: Invalid
<ref>
tag; name "requirebase" defined multiple times with different content - ↑ Packaging Guidelines: デスクトップファイル
- ↑ Packaging Guidelines: ファイルとディレクトリの所有者
- ↑ Packaging Guidelines: ファイル名のエンコーディング
- ↑ Licensing Guidelines: License Text
- ↑ Packaging Guidelines: Summary and description
- ↑ Mock Tricks
- ↑ Packaging Guidelines: Architecture Support
- ↑ Packaging Guidelines: Scriptlets
- ↑ Packaging Guidelines: Pkgconfig Files
- ↑ Packaging Guidelines: File Dependencies
- ↑ Packaging Guidelines: Man Pages