エンタープライズ:特集 2003/09/26 18:00:00 更新


特集:第2回 RPM活用のステップアップ−SRPMリビルドとコンパイルマスター (4/6)

%prep部で下準備をしている

 次に、-bpオプションを付加して実行すると、パッケージ作成部から以下の作業が行われる。

%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
autoconf
cd libmutt
autoconf

 「%prep」以下「%patch4」まではその下準備だ。「-bp」オプションでパッチ当てまでを行ってみよう。これらのマクロは以下のような作業を実行する。

  • %prep:src.rpmに含まれるソースコードを解凍、BUILD作業ディレクトリへコピーしてリビルドの準備をする。
  • %setup:コンパイル作業ディレクトリへ移動する。
  • %patch0〜4:src.rpmにパッチファイルが含まれていれば展開したソースコードにパッチをあてる(パッチ指定はないこともある)。

 autoconf以下の3行はそのままコマンドを実行する。

# rpmbuild -bp balsa.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.93640 ← %prepでの作業開始
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ cd /usr/src/redhat/BUILD
+ rm -rf balsa-2.0.6
+ /usr/bin/bzip2 -dc /usr/src/redhat/SOURCES/balsa-2.0.6.tar.bz2 ← ソースの解凍
+ tar -xf - ← tarアーカイブの展開
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd balsa-2.0.6 ← %setupで作業ディレクトリに移動
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,g-w,o-w .
+ echo 'Patch #0 (rpm-po.patch):'
Patch #0 (rpm-po.patch):  ← %patch0からソースコードへパッチ当て
+ patch -p1 -s
+ echo 'Patch #1 (balsa-broken-flock.patch):'
Patch #1 (balsa-broken-flock.patch):
+ patch -p1 -s
+ echo 'Patch #2 (balsa-2.0.5-soundlist.patch):'
Patch #2 (balsa-2.0.5-soundlist.patch):
+ patch -p1 -s
+ echo 'Patch #3 (balsa-2.0.3-spoolbox.patch):'
Patch #3 (balsa-2.0.3-spoolbox.patch):
+ patch -p1 -s
+ echo 'Patch #4 (balsa-2.0.5-desktop.patch):'
Patch #4 (balsa-2.0.5-desktop.patch): ← %patch4までのパッチあて
+ patch -p1 -s
+ autoconf
+ cd libmutt
+ autoconf configure.in:23: warning: AC_CANONICAL_HOST invoked multiple times
+ exit 0

 実行したところ、最後に「warning」が表示されている。上記の例では「libmuttディレクトリでautoconfを実行したところ、configure.inの23行目に警告がある」という意味だ。

 リビルドやコンパイル作業を行っていくと、このような警告メッセージは数多く目にすることになる。無視できるものもあれば、それが原因でコンパイルがストップしてしまうこともある。作業がストップせずに最後まで通るならば、その「警告」はさほど神経質にならなくともよいだろう。逆に、何度もコンパイルに失敗する場合には、こうした作業をひとつずつチェックしてソースファイルの問題点をチェックする必要性がある。

コンパイル作業

 「-bc」オプションで実行すると、実際のmake作業に入る。SPECファイルでは以下の部分までが実行される。

%build
CPPFLAGS="-I/usr/kerberos/include" ; export CPPFLAGS
LDFLAGS="-L/usr/kerberos/%{_lib}" ; export LDFLAGS
if pkgconfig openssl ; then
LDFLAGS="$LDFLAGS `pkg-config --libs openssl`"
fi
%configure --disable-system-install --disable-more-warnings \
--with-gss=/usr/kerberos --with-ssl --enable-gtkhtml --enable-ldap \
--disable-flock --enable-fcntl --enable-deprecated-pspell

make %{?_smp_mflags}

 実際のコンパイル作業を行う部分なので、利用可能なマクロタグにはさまざまなものがある。必要に応じて使い分けられるが、代表的なものは以下の2つだ。

  • %build:はmakeのオプション
  • %configure:コンパイル時のオプション

 この2つは似ているが、多少意味が異なる。「%build」はmakeの実行タグであり、「%configure」は「%build」タグに包含される。「%configure」は「sh ./configure」を実行する際に付加するオプションフラグになる。「make %configure」として実行されると考えればよい。

 この例で、前者は使用するコンパイラへの指示で、この例ではkerberos関係のライブラリをインクルードするように指定し、環境変数「CPPFLAGS」と「LDFLAGS」に設定している。そして、もしpkgconfigに「openssl」があれば、opensslのライブラリ類も含める記述もある。ここは通常のシェルスクリプトと同様に記述していく。

 一方、後者は作成しようとするプログラムが固有に持つもので「--with-ssl」はSSL機能を有効にし、「--enable-ldap」でLDAP機能を有効にする。いずれもコンパイルしようとしているbalsa(メールクライアント)に固有の機能だ。プログラムが本来持っている機能の有効/無効の切り替えは、ここで指定されているわけだ。ここで「無効」としてコンパイルされたバイナリプログラムは、以後その機能は持てなくなる。作成するパッケージをカスタマイズしたいなら、この内容を修正することになる。

 プログラムがどのようなコンフィグオプションを持ち、どのような書式になるかはさまざまである。これはソースツリー中のドキュメントを参照すればよい。%prepと、%setupが実行された段階で、

/usr/src/redhat/BUILD/パッケージ名

 というディレクトリ以下にソースツリーができている。


# cd /usr/src/redhat/BUILD/balsa-2.0.6/
# ls
AUTHORS      TODO            config.guess       depcomp           ltmain.sh
COPYING      acinclude.m4    config.h           doc               missing
ChangeLog    aclocal.m4      config.h.in        docs              mkinstalldirs
HACKING      autom4te.cache  config.log         gnome-balsa2.png  po
INSTALL      balsa.1         config.status      images            sounds
Makefile     balsa.1.in      config.sub         install-sh        src
Makefile.am  balsa.desktop   configure          libbalsa          stamp-h1
Makefile.in  balsa.lang      configure.in       libinit_balsa
NEWS         balsa.spec      debugfiles.list    libmutt
README       balsa.spec.in   debugsources.list  libtool

 この中から、INSTALL、またはREADME、docディレクトリなどを見ると、コンフィグオプションについての説明がある。balsaの場合はREADME中に以下のような記述がある。

Configuration:
Balsa has a lot of options to its configure script; you
should run './configure --help' to get an idea of them. More
complete descriptions are here.

--enable-all
Will turn on some features that are less than stable,
or unfinsished, such as filtering and spell-checking. This is really use-at-your-own-risk.

--disable-more-warnings
Balsa by default is very sensitive to compilation warnings
which often mean simply programming or configuration errors. If you
are sure this is not the case, or you cannot change your system setup
use this option to compile the code and hope for the best.
(some Solaris setups require this).

--enable-threads
Compile Balsa with threading for more responsiveness.
This works very well and should be enabled if possible.

〜以下略〜

 これらを参照し、必要なオプションを既に記載されている内容に従って追加、あるいは変更していけばよいのだ。

One Point:
行末にある「\」(またはバックスラッシュ)は、1行を複数行に改行しながら書くときに使うシェルの機能である。

前のページ | 1 2 3 4 5 6 | 次のページ

[渡辺裕一,ITmedia]