Bugzilla アイコン Bugzilla 日本語版

Perl モジュールからの RPM 作成方法

Bugzilla 2.16 日本語版 - Fedora Core 1 へのインストール の補遺として、Perl モジュールから RPM パッケージを作成する方法を説明します。

残っている Perl モジュールのリスト

RPM パッケージを作成するのは perl モジュールに関しては難しくありません。 cpanflute というコマンドで perl モジュールアーカイブから直接 RPM を作成できます。 cpanflute は調べると perl-RPM-Specfile パッケージに入っています。

# apt-cache search cpanflute
perl-RPM-Specfile - Perl extension for creating RPM spec files
# apt-get install perl-RPM-specfile
The following extra packages will be installed:
  patch perl-Archive-Tar perl-Compress-Zlib perl-URI rpm-build

インストールされたファイルを調べると

# rpm -ql perl-RPM-Specfile
/usr/bin/cpanflute2
..

cpanflute2 というのが CPAN にある tar.gz アーカイブから RPM ファイルを作るためのコマンドです。

RPM tips

ひとことに RPM といっても いろいろあります。

  • /usr/bin/rpm にある rpm コマンド
  • バイナリ RPM パッケージ
  • ソース RPM パッケージ (略称 SRPM)

バイナリ RPM パッケージとソース RPM パッケージの違いについて説明します。

  1. バイナリ RPM パッケージとは実行ファイルが含まれた、システムにインストールできるパッケージです。
  2. ソース RPM パッケージはバイナリ RPM パッケージを作るための材料をまとめたものです。いったんバイナリ RPM を作らないとシステムにインストールできません (ソース RPM の「インストール」というのは単に中身を /usr/src/redhat 以下などに展開してバイナリ RPM を作る準備をする、ということに過ぎません)。 ソース RPM から バイナリ RPM を作成することをリビルドと呼んでいます。

たとえば RedHat のアップデートページには SRPMS と i386 がありますが、SRPMS というのがソース RPM パッケージ、 i386 というのがバイナリ RPM パッケージです。

AppConfig

残っているモジュールのうち、Template-Toolkit は AppConfig より先にインストールしておく必要があるので 先に AppConfig を作ります。

アーカイブファイルはPerl モジュールのリストのリンクをたどったところから取得します。

$ wget http://search.cpan.org/CPAN/authors/id/A/AB/ABW/AppConfig-1.56.tar.gz
    アーカイブファイルを取得します。

$ cpanflute2 AppConfig-1.56.tar.gz
    アーカイブファイルから ソースRPM を作ります。

# rpmbuild --rebuild perl-AppConfig-1.56-8.src.rpm
    ソース RPM を rebuild して バイナリRPM を作ります。

# rpm -ivh /usr/src/redhat/RPMS/noarch/perl-AppConfig-1.56-8.noarch.rpm
    バイナリ RPM をインストールします。
GD

次ですが、TemplateToolkit は下位ライブラリとして GD も利用できるので、GD モジュールも入れておきましょう。

GD を入れるためには perl モジュール以外のものが いろいろ必要になります。(Fedora を最小インストールしていない場合は、ここで示すものは最初から入っていることも多いでしょう)

# apt-get install gd gd-devel gcc libpng-devel libjpeg-devel freetype-devel XFree86-devel

こう入力すると全部入ります。それでは RPM を作成しましょう。

# wget http://search.cpan.org/CPAN/authors/id/L/LD/LDS/GD-2.11.tar.gz
# cpanflute2 GD-2.11.tar.gz
# rpmbuild --rebuild perl-GD-2.11-8.src.rpm

Where is libgd installed? [/usr/lib]
Please choose the features that match how libgd was built:
Build JPEG support? [y] 
Build FreeType support? [y]
Build XPM support? [y]

バイナリ RPM にリビルドするとき、いろいろ質問されます。Bugzilla では PNG 画像しか扱わないのですが、全部デフォルトのまま (Enter キーを押すだけ) でよいです。それではインストール。

# rpm -ivh /usr/src/redhat/RPMS/i386/perl-GD-2.11-8.i386.rpm
Template Toolkit

Template Toolkit ですが、こちらで試したところ、単に これの RPM を作るだけでは「他の Perl モジュールが必要です」というエラーでインストールできません。

rpmbuild コマンドで RPM パッケージを作ると、自動で依存関係を調べて使わない Perl モジュールにまで依存してしまうのが問題です。解決方法としては 2 つあります。

  1. 必要とされるもの全部いれる。
  2. Template Toolkit のソースRPM に含まれる spec ファイルを書き換えて「AutoReqProv: no」を追加して、自動で依存関係設定しないようにする

ここでは 1. の方針を説明します。一気にファイルをダウンロードして RPM パッケージを作成します。

$ mkdir tt2
$ cd tt2
$ wget \
http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/XML-XPath-1.13.tar.gz \
http://search.cpan.org/CPAN/authors/id/G/GR/GRANTM/XML-Simple-2.09.tar.gz \
http://search.cpan.org/CPAN/authors/id/T/TJ/TJMATHER/XML-DOM-1.43.tar.gz \
http://search.cpan.org/CPAN/authors/id/K/KE/KELLAN/XML-RSS-1.02.tar.gz \
http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/Text-Autoformat-1.12.tar.gz \
http://search.cpan.org/CPAN/authors/id/A/AB/ABW/Pod-POM-0.17.tar.gz \
http://search.cpan.org/CPAN/authors/id/M/MV/MVERB/GDTextUtil-0.86.tar.gz \
http://search.cpan.org/CPAN/authors/id/M/MV/MVERB/GDGraph-1.43.tar.gz \
http://search.cpan.org/CPAN/authors/id/W/WA/WADG/GDGraph3d-0.56.tar.gz \
http://search.cpan.org/CPAN/authors/id/T/TJ/TJMATHER/XML-RegExp-0.03.tar.gz \
http://search.cpan.org/CPAN/authors/id/D/DC/DCONWAY/Text-Reform-1.11.tar.gz

# for F in *gz; do cpanflute2 $F; rpmbuild --rebuild perl-`basename $F .tar.gz`-8.src.rpm; done

これで RPM パッケージは作成できましたが、実は Text-Reform だけ作り直しが必要です。このパッケージは perl 実行ファイルの場所に /usr/local/bin/perl を指定しているせいでそのままインストールできません。直してくれるよう報告はしましたが、すぐには直りそうにないです。 そこで応急措置として、パッチを当てて RPM を作りなおします。

# cpanflute2 --patch=textreform.diff Text-Reform-1.11.tar.gz
# rpmbuild --rebuild perl-Text-Reform-1.11-8.src.rpm

それでは RPM パッケージをまとめてインストールしましょう。

# rpm -ivh /usr/src/redhat/RPMS/noarch/perl-*rpm

やっと Template Toolkit を作る準備が整いました。さあ作ります。コンパイル中に質問されますが、全部デフォルトのまま (Enter キー押すだけ) で問題ありません。私が試した範囲では DBI 以外は n と答えても問題ないようです。

$ wget http://search.cpan.org/CPAN/authors/id/A/AB/ABW/Template-Toolkit-2.13.tar.gz
$ cpanflute2 Template-Toolkit-2.13.tar.gz
# rpmbuild --rebuild perl-Template-Toolkit-2.13-8.src.rpm

  External Modules
  ----------------
  Text::Autoformat [X] version 1.12 installed
  GD               [X] version 2.11 installed
  GD::Text         [X] version 0.86 installed
  GD::Graph        [X] version 1.43 installed
  GD::Graph3d      [X] version 0.56 installed
  Image::Info      [ ] module not installed
  Image::Size      [ ] module not installed
  Date::Calc       [ ] module not installed
  Pod::POM         [X] version 0.17 installed
  Tie::DBI         [ ] module not installed
  XML::DOM         [X] version 1.43 installed
  XML::RSS         [X] version 1.02 installed
  XML::XPath       [X] version 1.13 installed
  DBI              [X] version 1.37 installed, configuring tests
  ...

  DBI Test Configuration
  ----------------------
  Do you want to run the DBI tests?
  It requires access to an existing test database. [y]
  Enter driver name:  [mysql]
  Database name:  [test]
  Enter user name :  []
  Enter password  :  []
  ...

  XS Stash: TT2 now twice as fast!
  --------------------------------
  Do you want to build the XS Stash module? [y]
  Do you want to use the XS Stash for all Templates? [y]
  ...

  LaTeX Support
  -------------
  Do you want to enable the latex filter? [n]
  ..

  Optional Extras
  ---------------
  Do you want to install these components? [y]
  Installation directory [/usr/local/tt2]
  ...

  
  Splash!
  -------
  URL base for TT2 images? [/tt2/images]
  ..

  HTML Documentation
  ------------------
  Do you want to build the HTML documentation? [y]
  Do you want to use the Splash! library? [y]
  Enter name of colour scheme:  [default]
  ..

  HTML Examples
  -------------
  Do you want to build the HTML example pages? [y]
  ..

# rpm -ivh /usr/src/redhat/RPMS/i386/perl-Template-Toolkit-2.13-8.i386.rpm
Chart

Chart::Base が含まれている Chart モジュールは、AppConfig と同じ手順でインストールします。

perl モジュールのインストールはこれで終わりです。