Tips記事
» 2002年02月20日 00時00分 UPDATE

RPMの作り方〜第1回:src.rpmを理解しよう〜

[木田佳克,ITmedia]

 ソースファイルを手に入れて,一からRPMを作っていくのはかなり大変な作業だ。そこでまずは,.src.rpmで配布されているパッケージを利用してRPMの構造を知ることから始めよう。ここでは,Red Hat Linux 7.2を前提としてApache 1.3.22を使用した例を解説をしていく。

# wget ftp://updates.redhat.com/7.2/en/os/SRPMS/apache-1.3.22-2.src.rpm

#rpm -i apache-1.3.22-2.src.rpm

 上記のようにファイルをゲットしてrpmで指定(-i)をすると,「/usr/src/redhat/」ディレクトリ下に該当ファイルがインストールされる。このディレクトリ下には次のようなサブディレクトリがあり,それぞれの目的別に分類されるのだ。

# cd /usr/src/redhat
# ls
BUILD RPMS SOURCES SPECS SRPMS

 lsで表示されたディレクトリそれぞれの目的の詳細は次の通りである。

ディレクトリ
内          容
BUILD 最終的にRPMパッケージを作成する際に使用される。例えば,パッケージ作成(ビルド)途中にエラーが生じた場合には,このBUILD/下にあるファイルで状況判断ができる
RPMS BUILD/下で生成されるファイルにエラーが無かった場合,このディレクトリ下にあるi386/,i686/,noarch/に最終的なパッケージが作成される。この際,下に挙げるspecファイルに従った条件になる
SOURCES RPMパッケージを生成するためのソースファイルを置いておく。上記のようにrpm -i apache-1.3.22-2.src.rpmでインストールをすると,specファイル以外はここに含まれる
SPECS RPMパッケージをどのようなディレクトリ先,アンインストールを行う際の振る舞いなど,すべての動きを記述するファイルspecが置かれる
SRPMS RPMSディレクトリ下に正常にパッケージが生成されると,このディレクトリ下にはsrc.rpmパッケージが作成される

 次に挙げるのは,SOURCES/とSPECS/下それぞれの内容である。上記表のように,この2つのディレクトリ下に主要ファイルが含まれている。

# ls SOURCES/
SSL-Certificate-Creation
apache_1.3.20-apachectl-init.patch
httpd.init
apache-1.3.11-apxs.patch
apache_1.3.20-db.patch
poweredby.png
apache-index.html
apache_1.3.22-config.patch
spacer48.png
apache.logrotate
apache_1.3.22-eapi-2.8.5.patch
sslcfg.patch
apache_1.3.14-mkstemp.patch
apache_1.3.22-phhttpd-eapi.patch
apache_1.3.14-redhat.patch
apache_1.3.22.tar.gz

※ここでは見やすいように便宜上1ファイルごとに改行をした

# ls SPECS/
apache.spec

 apache.specは,前述のようにインストール先や条件を設定する重要なファイルになるが,RPMパッケージを一から作成するためにはこのspecファイルを作らなければならない。ここでは,apache.specの中身の概要を載せてみた。

# cat SPECS/apache.spec
%define contentdir /var/www
%define mod_ssl_ver 2.8.5
%define piranha62 0
%define suexec_caller apache

Summary: The most widely used Web server on the Internet.
Name: apache
Version: 1.3.22
Release: 2
Group: System Environment/Daemons
Source: ftp://ftp.apache.org/apache/dist/apache_%{version}.tar.gz


........中略........


%build
CFLAGS="$RPM_OPT_FLAGS -fPIC -DEAPI_MM_CORE_PATH='\"%{_localstatedir}/run/httpd.mm\"'" ; export CFLAGS
LIBS="-lpthread" ; export LIBS
EAPI_MM=SYSTEM; export EAPI_MM

./configure \
--prefix=%{_sysconfdir}/httpd \
--exec-prefix=%{_prefix} \
--bindir=%{_bindir} \
--sbindir=%{_sbindir} \
--mandir=%{_mandir} \
--sysconfdir=%{_sysconfdir}/httpd/conf \
--includedir=%{_includedir}/apache \
--libexecdir=%{_libdir}/apache \
--datadir=%{contentdir} \
--iconsdir=%{contentdir}/icons \
--htdocsdir=%{contentdir}/html \
--manualdir=%{contentdir}/html/manual \
--cgidir=%{contentdir}/cgi-bin \
--localstatedir=%{_localstatedir} \
--runtimedir=%{_localstatedir}/run \
--logfiledir=%{_localstatedir}/log/httpd \
--proxycachedir=%{_localstatedir}/cache/httpd \
--enable-module=all \
--enable-shared=max \
--enable-rule=EAPI \
--disable-rule=WANTHSREGEX \
--enable-module=auth_dbm \
--with-perl=%{__perl} \
--enable-suexec \
--suexec-docroot=%{contentdir} \

......以下略.......

 ここで注目してほしいのは,「%build」以下で定義されているオプションだ。ソースのMakefile作成の際にお馴染みな,./configureの文字列も見られる。

 例えば,ここに記述されているconfigureのオプションを編集後にRPMパッケージを生成(ビルド)すれば,レッドハットから配布されているRPMとは少し異なったオリジナルなパッケージを作成することが可能だ。

 次回はspecファイルの読み方を解説していこう。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ