ファイルリスト部 specファイルを書く データ定義部 目次

スクリプト部

データ定義部の次の部分は, 以下のような%が頭に付くタグからはじまる 一連のscriptで構成されます.

重要なのは,各タグから始まる次のタグの前までの部分は, 独立したbashスクリプトとして実行されるということです.

(注:以下で,%setup, %patchはスクリプトのはじまりを表すタグではなく, スクリプト中で記述を簡略するためのマクロです.)

より正確には,各タグが現れた時に#!/bin/sh -eが起動され (RHLでは/bin/sh/bin/bashにsym.linkされてる),各環境変数(RPM_SOURCE_DIRRPM_PACKAGE_NAMEなど)が定義された後,タグの下の記述されているスクリプトが実行されます.

%prep
ソースのmakeやインストール作業前の準備の開始を示すタグです. 以下で説明する%setup,%patchなどのマクロを用いたり, シェルスクリプトを記述して,ソースの展開などを行います. ここで,
    %prep
    rm -rf ${RPM_BUILD_ROOT}
として, ${RPM_BUILD_ROOT} (先のBuildrootで指定したディレクトリ) を掃除することが多いです.ただし,このときには, Buildrootの設定には十分気をつけて下さい(何故かわかりますね?)
%setup
%prepからはじまるスクリプト中で,ソースを展開するためのマクロです. %setupとオプションなしで書くと, 以下が順に行われます.
  1. データ定義部prepare節で指定したディレクトリ BUILDにcdする.
  2. 指定ディレクトリ(-nで指定できる. デフォルトのディレクト リ名は
    ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION},後述) がカレント・ディレクトリ(BUILD)に存在すれば消去する.
  3. Sourceで指定したtar.gzのソースを展開する.
  4. 指定ディレクトリ(の指定ディレクトリ名と同じ)に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.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とする と,Source0Source2で指定したものが展開されます. 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 に詳しい説明があります.
さらに,タグについて知りたい人はMaximumRPMを見ましょう.


ファイルリスト部 specファイルを書く データ定義部 目次