%が頭に付くタグからはじまる,
一連の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とオプションなしで書くと, 以下が順に行われます.hoge-1.1.tar.gzを展開したときに,
- 1.
- 4.1節で指定したディレクトリ
BUILDにcdする.- 2.
- 指定ディレクトリ(
-nで指定できる.デフォルトのディレクト リ名は
${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION},後述) がカレント・ディレクトリ(BUILD)に存在すれば消去する.- 3.
Sourceで指定したtar.gzのソースを展開する.- 4.
- 指定ディレクトリ(2の指定ディレクトリ名と同じ)にcdする.
- 5.
- 以下を実行する.
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/というディレクトリ ができるなら,オプションをつけなくても以上の作業が行われますが,例え ば,hoge/というディレクトリができるなら,このディレクトリの下 にcdできるように,%setup -n hogeまたは,%setup -n ${RPM_PACKAGE_NAME}と指定します.複数のソースがあるときには以下に述べるオプション
-aや-bを使います.例えばSource,Source1,Source2の3つ があるときには,%setup -a 1 -a 2 -n hogeなどとします.(以下のオプションの指定参照.)この
%setupにはさまざまなオプションがありますが,代表的なもの を以下に示します.その他,MaximumRPMを見るといろいろのっています. tar.gzでないソースファイルは,
-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パッケージの展開のとき,展開中の情報を表示しません.-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スクリプトを書くのも一手です.
%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 に詳しい説明があります.