%
が頭に付くタグからはじまる
一連のscriptで構成されます. %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を行うときの手順を示します. ここで, 節で述べたように, データ定義部の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 に詳しい説明があります.