Perl モジュールからの RPM 作成方法
Bugzilla 2.16 日本語版 - Fedora Core 1 へのインストール の補遺として、Perl モジュールから RPM パッケージを作成する方法を説明します。
残っている Perl モジュールのリスト
- Template Toolkit
- AppConfig (Template Toolkit が必要としているので、Template Toolkit より前にインストールするほうがいい)
- GD (Template Toolkit が使用するので、Template Toolkit より前にインストールするほうがいい)
- Chart::Base
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 パッケージの違いについて説明します。
- バイナリ RPM パッケージとは実行ファイルが含まれた、システムにインストールできるパッケージです。
- ソース 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 つあります。
- 必要とされるもの全部いれる。
- 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 モジュールのインストールはこれで終わりです。