%が頭に付くタグからはじまる,
一連の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の2つがあるときには,%setup -T -b 0 -n hoge %setup -D -T -b 1 -n hogeなどとします.(以下のオプションの指定参照.)この
%setupにはさまざまなオプションがありますが,代表的なもの を以下に示します.その他,MaximumRPMを見るといろいろのっています. tar.gzでないソースファイルは,
-n <ディレクトリ名>%setupを実行した後(もしくは前)にcdするディレクトリ名 (name)を指定する. このオプションを省略したときの,デフォルトのディレクトリ名は,${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}.-c指定ディレクトリ(上の-nオプションで指定したディレクトリ) を作成し(create),そこにcdした後にソースの展開をします.-a <#>指定ディレクトリ(上と同じ)にcdした後(after)に,Source0と#番目のソース(Source#)の展開をします. 多くの場合-Tや-Dとともに用います. このオプションは指定ディレクトリの作成はしないので,-cとともに用いることもあります.-b <#>指定ディレクトリ(上と同じ)にcdする前に(before),Source0と#番目に指定されてるソース(Source#) の展開をします.多くの場合-Tや-Dとともに用います. オプションなしの%setupは,%setup -T -b 0と同じ意味になります.(-Tの説明は以下参照)-D先に述べたように,%setupは,まず,指定ディレクトリ(上と同じ)が,ディレクト リBUILDの下にあるかどうかをチェックして, もし存在していた ら,それを削除してから,ソースの展開などの作業を行います. しかし,複数のソースが存在する場合, 2つめのソース (Source1)を展開しようと,%setup -b 1をしたとき,1 つめのソースが展開されているディレクトリが削除されては困ります. この-Dオプションは,このような削除を行わないようにします.-Tソースの展開を行いません. 先に述べたように,オプション指定を-a 2や-b 2とする と,Source0とSource2で指定したものが展開されます.Source2だけを展開したいときには, このオプションを使って,%setup -T -a 2とします.また,%setup -T -c hogeとすると,パッケージの展開は行わず,ディレクトリhogeを作っ て,そこにcdします.-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の場合と同様.