エンタープライズ:特集 2003/10/17 11:50:00 更新


特集:第3回 tarボールからRPMパッケージを作るコツ (2/3)

既存の雛形から作るSPECファイルの実際

 それではSPECファイルが含まれないtarボールからRPMパッケージを作るにはどうすればよいのだろうか? もし、そのtarボールが現在よりも新しいバージョンであって、いち早くシステムに取り入れたいという場合には、すでにインストール済みバージョンのSRPMを探し、その中のSPECファイルを雛形として利用すればよい。

 実際の操作を例えて挙げよう。gtk系のライブラリとしてよく用いられるものに「pango」と呼ばれるものがある。原稿執筆時点でRed Hat Linux 9にインストールされる最新バージョンは「1.2.1-3」だ。しかしgtkの開発元(http://www.gtk.org/)を見れば、1.2.3が最新となっている。このようなごくわずかなマイナーバージョンアップであれば、実使用上はほとんど違いがないだろう。しかし、他のパッケージの依存関係から、どうしても最新バージョンでなければならないという場合もあり得る。

 まず最初に、1.2.1-3のsrc.rpmファイルを探し出しインストールしよう。SPECファイルの内容は次の通りだ。

%define glib2_base_version 2.0.6
%define glib2_version %{glib2_base_version}-3
%define pkgconfig_version 0.12
%define freetype_version 2.1.3-3
%define fontconfig_version 2.0
%define xft_version 1.9.1.020626.1517-1

Summary: System for layout and rendering of internationalized text.
Name: pango
Version: 1.2.1
Release: 3
License: LGPL
Group: System Environment/Libraries
Source: ftp://ftp.gtk.org/pub/gtk/v2.1/pango-%{version}.tar.bz2
URL: http://www.pango.org
BuildRoot: %{_tmppath}/pango-%{PACKAGE_VERSION}-root

# We need to prereq this so we can run pango-querymodules
Prereq: glib2 >= %{glib2_version}
Requires: freetype >= %{freetype_version}
BuildRequires: libtool >= 1.4.2-10
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: pkgconfig >= %{pkgconfig_version}
BuildRequires: freetype-devel >= %{freetype_version}
BuildRequires: fontconfig-devel >= %{fontconfig_version}
BuildRequires: XFree86-devel >= 4.2.99
Obsoletes: pango-gtkbeta, fribidi-gtkbeta

Patch1: pango-slighthint.patch
Patch3: pango-1.0.99.020606-xfonts.patch
# Fix problem where language tag wasn't causing relookup of font (#84034)
Patch4: pango-1.2.1-langtag.patch

%description
Pango is a system for layout and rendering of internationalized text.

〜以下略〜

 後半は割愛したが、pangoはライブラリ系パッケージのためかなり複雑なものとなっている。そして結論からいえば、バージョン指定の個所だけを書き直せば、最新の1.2.3用のSPECとして利用することが可能だ。具体的な編集個所は以下の通りである。

Summary: System for layout and rendering of internationalized text.
Name: pango
Version: 1.2.3  ←※1
Release: 0  ←※2
License: LGPL
Group: System Environment/Libraries
Source: ftp://ftp.gtk.org/pub/gtk/v2.2/pango-%{version}.tar.bz2  ←※3

 「Version」行を「1.2.3」に書き換え、「Release」行を「0」とする。ソースファイル自体はftpで直接ダウンロードするのでftpディレクトリの「v2.1」を「v2.2」に変更すればよい。これだけの作業だ。複雑なプレアフター系スクリプト、ファイル配置のマクロにはいっさい触れていない。SPECファイルに変数がひんぱんに用いられていると難しく見えるが、実はマクロ変数で記述しておけば、部分変更のみで流用ができるのだ。

 またこのオリジナルとしたバージョンでは、別にパッチを当てる指定も含まれていた。今回の例では、書き換える対象が最新バージョンであることから該当パッチが必要ない。該当する個所には、行頭に「#」を付けてコメントアウトすればよいだろう。

#Patch1: pango-slighthint.patch  ←※
#Patch3: pango-1.0.99.020606-xfonts.patch  ←※
# Fix problem where language tag wasn't causing relookup of font (#84034)
#Patch4: pango-1.2.1-langtag.patch  ←※
-------------
%prep
%setup -q -n pango-%{version}

#%patch1 -p1 -b .slighthint  ←※
#%patch3 -p1 -b .xfonts  ←※
#%patch4 -p1 -b .langtag  ←※

 ここまでの編集が済めば、RPMパッケージを生成する指定「rpmbuild -ba pango.spec」を実行してみよう。何ごともなくスムーズに最新版のRPMパッケージができあがるはずだ。

 この方法は、他ディストリビューション用のsrc.rpmを利用する際にも応用が利く。マイナーバージョンの違いであればほぼ問題はなく、自ディストリビューションのSPECファイルを該当バージョンに合わせる方向で調整した方が手っ取り早いのだ。

 ただし、Mandrakeのディストリビューションのような独自変数、独自マクロを多用したSPECファイルの調整は、慣れないと難しいだろう。しかし、こうした単純だが内容をよく読む経験を積むことで、何がどのような働きをしているのかを、より深く知ることもできるようになるはずだ。

前のページ | 1 2 3 | 次のページ

[渡辺裕一,ITmedia]