エンタープライズ:特集 | 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行を複数行に改行しながら書くときに使うシェルの機能である。 |
[渡辺裕一,ITmedia]