next up previous contents index
Next: ファイルリスト部 Up: specファイルを書く Previous: データ定義部

  
スクリプト部

データ定義部の次の部分は,以下のような%が頭に付くタグからはじまる, 一連の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.
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.tar.gzを展開したときに, 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にはさまざまなオプションがありますが,代表的なもの を以下に示します.

-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とする と,Source0Source2で指定したものが展開されます. Source2だけを展開したいときには, このオプションを使って,
    %setup -T -a 2
とします.また,
    %setup -T -c hoge
とすると,パッケージの展開は行わず,ディレクトリhogeを作っ て,そこにcdします.
その他,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スクリプトを書くのも一手です.
%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の場合と同様.
これらのタグを使うのは,ちょっと注意が必要です. 詳しくは,9節を参照してください. 以上の4つのタグは,作成したrpmパッケージをinstallやuninstallするときの, 実行されるスクリプトの設定になるので, specファイルからrpmパッケージを 作るときには,実行されることはありません. さらに,タグについて知りたい人はMaximumRPMを見ましょう.


next up previous contents index
Next: ファイルリスト部 Up: specファイルを書く Previous: データ定義部

1999-02-22