%が頭に付くタグからはじまる,
一連のscriptで構成されます.
重要なのは,各タグ
から始まる次のタグの前までの部分は,独立したbashスクリプトとして実行され
るということです.
(注:以下で,%setup, %patchはスクリプトのはじまりを
表すタグではなく,スクリプト中で記述を簡略するためのマクロです.)
より正確には,各タグが現れた時に#!/bin/sh -eが起動され
(RHLでは/bin/shは/bin/bashにsym.linkされてる),
各環境変数(RPM_SOURCE_DIRやRPM_PACKAGE_NAMEなど)が定義さ
れた後,タグの下の記述されているスクリプトが実行されます.
%prep
ソースのmakeやインストール作業前の準備の開始を示すタグです. 以下で説明する%setup,%patchなどのマクロを用いたり, シェルスクリプトを記述して,ソースの展開などを行います. ここで,
%prep
rm -rf ${RPM_BUILD_ROOT}
として,${RPM_BUILD_ROOT}(先のBuildrootで指定したディレクトリ) を掃除することが多いです.ただし,このときには,Buildrootの設定には十分気をつけて下さい(何故かわかりますね?)
%setup
%prepからはじまるスクリプト中で,ソースを展開するためのマクロです.%setupとオプションなしで書くと, 以下が順に行われます.
BUILDにcdする.
-nで指定できる.デフォルトのディレクト
リ名は
${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION},後述)
がカレント・ディレクトリ(BUILD)に存在すれば消去する.
Sourceで指定したtar.gzのソースを展開する.
chown -R root .
chgrp -R root .
chmod -R a+rX,g-w,o-w .
(注:一般userがrpmをbuildするときには,chown root,
chgrp rootは実行権限がないので行われない.
一般userでbuildするときには,%filesの
%attrでファイルの属性設定を行う.後述)
hoge-1.1.tar.gzを展開したときに,hoge-1.1/というディレクトリ ができるなら,オプションをつけなくても以上の作業が行われますが,例え ば,hoge/というディレクトリができるなら,このディレクトリの下 にcdできるように,
%setup -n hoge
または,
%setup -n ${RPM_PACKAGE_NAME}
と指定します.
複数のソースがあるときには以下に述べるオプション-aや-bを使います.例えばSource,Source1,Source2の3つ があるときには,
%setup -a 1 -a 2 -n hoge
などとします.(以下のオプションの指定参照.)
この%setupにはさまざまなオプションがありますが,代表的なもの
を以下に示します.
-n <ディレクトリ名>
%setupを実行した後(もしくは前)にcdするディレクトリ名 (name)を指定する. このオプションを省略したときの,デフォルトのディレクトリ名は,${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}.
-c
指定ディレクトリ(上の-nオプションで指定したディレクトリ)
を作成し(create),そこにcdした後にソースの展開をします.
-a <#>
Source0を展開した後, 指定ディレクトリ(上と同じ)にcdした(after),#番目のソース(Source#)の展開をします.%setup -a 2 -a 3と複数-aオプションが指定された時 には,Source0が展開された後,指定ディレクトリに cd し,Source2,Source3を展開します.(Source0の展 開は最初の一階だけです.)
-b <#>
Source0を展開した後, 指定ディレクトリ(上と同じ)にcdする前に(before),#番目に指定されてるソース(Source#) の展開をします.
-D
先に述べたように,%setupは,まず,指定ディレクトリ(上と同じ)が,ディレクト リBUILDの下にあるかどうかをチェックして, もし存在していた ら,それを削除してから,ソースの展開などの作業を行います.%setupを複数回呼びたい場合,2回目に%setupを呼 んだ時に最初の%setupで展開したディレクトリを削除されては 困ります.この-Dオプションは,このような削除を行わないよ うにします.(あまり使いません)
-T
ソースの展開を行いません. 先に述べたように,オプション指定を-a 2や-b 2とする と,Source0とSource2で指定したものが展開されます.Source2だけを展開したいときには, このオプションを使って,
%setup -T -a 2
とします.また,
%setup -T -c hoge
とすると,パッケージの展開は行わず,ディレクトリhogeを作っ
て,そこにcdします.
-q
パッケージの展開のとき,展開中の情報を表示しません.
その他,MaximumRPMを見るといろいろのっています.
tar.gzでないソースファイルは,-Tオプションを利用して,
作業ディレクトリに移動した後,
lha x ${RPM_SOURCE_DIR}/hoge.lzh
とかして展開することもできます.
また,%setupに続いて, bash scriptを書いて,いろいろな作業を行
うことも出来ます.
%patch
%prepからはじまるスクリプト中で,
patchをあてるためのマクロとしてはたらきます.
例のように書くと,
patch -p1 -s < ${RPM_SOURCE_DIR}/<Patchで指定したファイル>
と同じことをするので,%patchを使うかわりに%setupのあ とで上のように書いてもいいです. オプションなしで%patchと書くと,
patch -p0 -s < ${RPM_SOURCE_DIR}/<Patchで指定したファイル>
が起動されます.%patchは%setupからはじまるスクリプトに含まれ る,単なるマクロとしてはたらきます.Sourceと同様に,Patch0,Patch1,...と複数の設定 に対して,
%patch0 -p1
%patch1 -p1
と実行することも出来ます.%patchには-b <name>(バックアップ・ファイルの拡張子指定, デフォルトは.orig)などのオプ ションがあります(略).
%build
ソースをmakeするスクリプトの開始であることを示し,また,%setupで
指定したディレクトリにcdするマクロとしてはたらきます.
以下には,makeを行うときの手順をスクリプトとして書きます.
%install
ファイルをinstallするスクリプトの開始であることを示し,また,%setupで指定したディレクトリにcdするマクロとしてはたらきます. 以下には,installを行うときの手順を示します. ここで,4.2節で述べたように,データ定義部のBuildrootで設定したディレクトリ (${RPM_BUILD_ROOT})の下に全てのファイルがインストールされるよ うに,工夫しましょう. Makefileが短いときには,修正してpatchをつくるかわりに,ここに, cp, installコマンド等を用いたinstallスクリプトを書くのも一手です.
なお、rpm-3.0.5以降では、インストールされたバイナリは rpmパッケージにする段階で自動的にstripされますので、%installでbainaryのstripを行う必要はありません。
%clean
rpmを作ったあとの後始末をこのタグの下に記述します.
スクリプト部にいれれるタグは,ほかにも,いろいろあります.たとえば, 以下のタグはそれぞれインストール時やアンインストール時に起動するシェル スクリプトを記述するためのものです.
%pre
rpmパッケージをinstallするとき,パッケージの展開前に行うことを書く.-pオプションについては%postの場合(以下)参照.
%post
rpmパッケージをinstallするとき,パッケージの展開をした後に行うことを 書く. たとえば,ライブラリをインストールする時には,
%post
/sbin/ldconfig
とすると,ldconfigが実行される.また,代りに
%post -p /sbin/ldconfig
と,-pオプションを用いて書くと,シェルスクリプトを起動するこ
と無く直接コマンドが実行される.またこのコマンドはrpmパッケージのイ
ンストール時に必要なコマンドとして,登録される.
%preun
rpmパッケージをuninstallするとき,展開ファイルの削除前に行うことを 書く.-pオプションについては%postの場合と同様.
%postun
rpmパッケージをuninstallするとき,各ファイルを削除したあとに行うこと を書く.-pオプションについては%postの場合と同様.
以上のタグは,作成したrpmパッケージをinstallやuninstallするときの, 実行されるスクリプトの設定になるので, specファイルからrpmパッケージを 作るときには,実行されることはありません.
さらに, 他のパッケージがインストールされた時に起動するスクリプトも記述で きます.
%triggerin
あるパッケージがインストールされていた、もしくは、された時に起動する スクリプトを書く. たとえば,
%triggerin -- hoge
echo "hoge is installed"
と書いておくと,パッケージhogeをインストールしたときに,上記メッセージ が表示されます. 以下のように, バージョン指定もできます.
%triggerin -- hoge > 3.0
echo "hoge is installed"
同様にして, あるパッケージの削除前に実行される%triggerun, あるパッケージの削除後ろに実行される%triggerpostunがあります. このタグについては,/usr/doc/rpm-3.0.x/trigger に詳しい説明があります.