RPMパッケージの作成 | ||
---|---|---|
<<< Previous | Chapter 5. specファイルを書く | Next >>> |
データ定義部の次の部分は、以下のような%が頭に付くタグからはじまる、 一連のscriptで構成されます。重要なのは、各タグから始まる次のタグの前までの部分は、 独立したbashスクリプトとして実行されるということです。 (注:以下で、%setup, %patchはスクリプトのはじまりを表すタグではなく、 スクリプト中で記述を簡略するためのマクロです。)
より正確には、各タグが現れた時に #!/bin/sh -e が起動され(RHLでは/bin/shは/bin/bashにsym.linkされてる)、 各環境変数(RPM_SOURCE_DIRやRPM_PACKAGE_NAMEなど)が定義された後、 タグの下の記述されているスクリプトが実行されます。
ソースのmakeやインストール作業前の準備の開始を示すタグです。 以下で説明する%setup,%patchなどのマクロを用いたり、 シェルスクリプトを記述して、ソースの展開などを行います。 ここで、
%prep rm -rf ${RPM_BUILD_ROOT} |
%prepからはじまるスクリプト中で、ソースを展開するためのマクロです。 %setupとオプションなしで書くと、以下が順に行われます。
Section 4.1で指定したディレクトリBUILDにcdする。
指定ディレクトリ(-nで指定できる。デフォルトのディレクトリ名は、 ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}、後述) がカレント・ディレクトリ(BUILD)に存在すれば消去する。
Sourceで指定したtar.gzのソースを展開する。
指定ディレクトリ(2の指定ディレクトリ名と同じ)にcdする。
以下を実行する。
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にはさまざまなオプションがありますが、 代表的なものを以下に示します。
%setupを実行した後(もしくは前)にcdするディレクトリ名(name)を指定する。 このオプションを省略したときの、デフォルトのディレクトリ名は、 ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}。
指定ディレクトリ(上の-nオプションで指定したディレクトリ) を作成し(create)、そこにcdした後にソースの展開をします。
Source0を展開した後、 指定ディレクトリ(上と同じ)にcdした(after)、 #番目のソース(Source#)の展開をします。 %setup -a 2 -a 3 と複数-aオプションが指定された時には、 Source0 が展開された後、指定ディレクトリに cd し、 Source2、Source3を展開します。 (Source0の展開は最初の一階だけです。)
Source0を展開した後、 指定ディレクトリ(上と同じ)にcdする前に(before)、 #番目に指定されてるソース(Source#)の展開をします。
先に述べたように、%setupは、まず、指定ディレクトリ(上と同じ)が、 ディレクトリBUILDの下にあるかどうかをチェックして、もし存在していたら、 それを削除してから、ソースの展開などの作業を行います。 %setupを複数回呼びたい場合、 2回目に%setupを呼んだ時に最初の%setupで展開したディレクトリを削除されては困ります。 この-Dオプションは、このような削除を行わないようにします。(あまり使いません)
ソースの展開を行いません。先に述べたように、 オプション指定を -a 2 や -b 2 とすると、 Source0とSource2で指定したものが展開されます。 Source2だけを展開したいときには、このオプションを使って、
%setup -T -a 2 |
%setup -T -c hoge |
パッケージの展開のとき、展開中の情報を表示しません。
その他、MaximumRPMを見るといろいろのっています。 tar.gzでないソースファイルは、-Tオプションを利用して、 作業ディレクトリに移動した後、
lha x ${RPM_SOURCE_DIR}/hoge.lzh |
また、%setupに続いて、bash scriptを書いて、 いろいろな作業を行うことも出来ます。
%prepからはじまるスクリプト中で、patchをあてるためのマクロとしてはたらきます。 例のように書くと、
patch -p1 -s < ${RPM_SOURCE_DIR}/<Patchで指定したファイル> |
patch -p0 -s < ${RPM_SOURCE_DIR}/<Patchで指定したファイル> |
%patch0 -p1 %patch1 -p1 |
ソースをmakeするスクリプトの開始であることを示し、また、 %setupで指定したディレクトリにcdするマクロとしてはたらきます。 以下には、makeを行うときの手順をスクリプトとして書きます。
ファイルをinstallするスクリプトの開始であることを示し、また、 %setupで指定したディレクトリにcdするマクロとしてはたらきます。 以下には、installを行うときの手順を示します。 ここで、Section 4.2で述べたように、 データ定義部のBuildrootで設定したディレクトリ(${RPM_BUILD_ROOT}) の下に全てのファイルがインストールされるように、工夫しましょう。 Makefileが短いときには、修正してpatchをつくるかわりに、ここに、 cp, installコマンド等を用いたinstallスクリプトを書くのも一手です。
なお、rpm-3.0.5以降では、インストールされたバイナリは rpmパッケージにする段階で自動的にstripされますので、 %installでbainaryのstripを行う必要はありません。
rpmを作ったあとの後始末をこのタグの下に記述します。
スクリプト部にいれれるタグは、ほかにも、いろいろあります。たとえば、 以下のタグはそれぞれインストール時やアンインストール時に起動するシェルスクリプトを記述するためのものです。
rpmパッケージをinstallするとき、パッケージの展開前に行うことを書く。 -pオプションについては%postの場合(以下)参照。
rpmパッケージをinstallするとき、パッケージの展開をした後に行うことを書く。 たとえば、ライブラリをインストールする時には、
%post /sbin/ldconfig |
%post -p /sbin/ldconfig |
rpmパッケージをuninstallするとき、展開ファイルの削除前に行うことを書く。 -pオプションについては%postの場合と同様。
rpmパッケージをuninstallするとき、各ファイルを削除したあとに行うことを書く。 -pオプションについては%postの場合と同様。
これらのタグを使うのは、ちょっと注意が必要です。 詳しくは、Chapter 9を参照してください。
以上のタグは、作成したrpmパッケージをinstallやuninstallするときの、 実行されるスクリプトの設定になるので、 specファイルからrpmパッケージを作るときには、実行されることはありません。
さらに、他のパッケージがインストールされた時に起動するスクリプトも記述できます。
あるパッケージがインストールされていた、 もしくは、された時に起動するスクリプトを書く。たとえば、
%triggerin -- hoge echo "hoge is installed" |
%triggerin -- hoge > 3.0 echo "hoge is installed" |
さらに、タグについて知りたい人はMaximumRPMを見ましょう。
<<< Previous | Home | Next >>> |
specファイルを書く | Up | ファイルリスト部 |