#
2 RPM パッケージを作成する

RPM 形式は、Red Hat, SuSE, Mandrake といった、多くの一般的な Linux ディストリビューションで使われています。普段使っているのがこれらの 環境のいずれか (またはその他の RPM ベースの Linux ディストリビューション) なら、同じディストリビューションを使っている 他のユーザ用に RPM パッケージを作成するのはとるに足らないことでしょう。 一方、モジュール配布物の複雑さや、 Linux ディストリビューション間の 違いにもよりますが、他の RPM ベースのディストリビューションでも動作 するような RPM を作成できるかもしれません。

通常、モジュール配布物の RPM を作成するには、`bdist_rpm` コマンドを使います:

    python setup.py bdist_rpm

あるいは、`bdist` コマンドを --format オプション付きで使います:

    python setup.py bdist --formats=rpm

前者の場合、 RPM 特有のオプションを指定できます; 後者の場合、 一度の実行で複数の形式を指定できます。両方同時にやりたければ、 それぞれの形式について各コマンドごとにオプション付きで `bdist_*` コマンドを並べます:

    python setup.py bdist_rpm --packager="John Doe <jdoe@example.org>" \
                    bdist_wininst --target_version="2.0"

Distutils が setup スクリプトで制御されているのとほとんど同じく、 RPM パッケージの作成は、 .spec で制御されています。 RPM の作成を簡便に解決するため、`bdist_rpm` コマンドでは 通常、 setup スクリプトに与えた情報とコマンドライン、そして Distutils 設定ファイルに基づいて .spec ファイルを作成します。 .spec ファイルの様々なオプションやセクション情報は、 以下のようにして setup スクリプトから取り出されます:

RPM .spec ファイルのオプションまたはセクション | Distutils setup スクリプト内のオプション
--- | ---
Name | name
Summary (preamble 内) | description
Version | version
Vendor | author と author_email, または & maintainer と maintainer_email
Copyright | licence
Url | url
%description (セクション) | long_description

また、.spec ファイル内の多くのオプションは、 setup スクリプト 中に対応するオプションがありません。これらのほとんどは、以下に示す `bdist_rpm` コマンドのオプションで扱えます:

RPM .spec ファイルのオプションまたはセクション | `bdist_rpm` オプション | デフォルト値
--- | --- | ---
Release | release | ``1''
Group | group | ``Development/Libraries''
Vendor | vendor | (上記参照)
Packager | packager | (none)
Provides | provides | (none)
Requires | requires | (none)
Conflicts | conflicts | (none)
Obsoletes | obsoletes | (none)
Distribution | distribution_name | (none)
BuildRequires | build_requires | (none)
Icon | icon | (none)

言うまでもなく、こうしたオプションをコマンドラインで指定するのは 面倒だし、エラーの元になりますから、普通は setup.cfg に 書いておくのがベストです -- 13 節を参照してください。 沢山の Python モジュール配布物を配布したりパッケージ化したりしている のなら、配布物全部に当てはまるオプションを個人用の Distutils 設定 ファイル (~/.pydistutils.cfg) に入れられます。

バイナリ形式の RPM パッケージを作成する際には三つの段階があり、 Distutils はこれら全ての段階を自動的に処理します:

1. RPM パッケージの内容を記述する .spec ファイルを作成します (.spec ファイルは setup スクリプトに似たファイルです; 実際、 setup スクリプトのほとんどの情報が .spec ファイルから 引き揚げられます)
2. ソース RPM を作成します
3. ``バイナリ (binary)'' RPM を生成します (モジュール配布物に Python 拡張モジュールが入っているか否かで、バイナリコードが 含まれることも含まれないこともあります)

通常、RPM は最後の二つのステップをまとめて行います; Distutils を使うと、普通は三つのステップ全てをまとめて行います。

望むなら、これらの三つのステップを分割できます。`bdist_rpm` コマンドに --spec-only を指定すれば、単に .spec を作成して終了します; この場合、.spec ファイルは ``配布物ディレクトリ (distribution directory)''-- 通常は dist/ に作成されますが、 --dist-dir オプションで変更することもできます。(通常、 .spec ファイルは ``ビルドツリー (build tree)''、すなわち `build_rpm` が作成する一時ディレクトリの中から引き揚げられます。)