次のページ 前のページ 目次へ

6. RPM パッケージの作成

RPM パッケージの作成は全く簡単です、特に作成しようとしている ソフトウェアを手に入れられるならなおさらです。

RPM を作成する基本的な課程は以下の通りです。

一般的な操作の下で、RPM はバイナリとソースパッケージを作成します。

6.1 rpmrc ファイル

現在、RPM の設定は /etc/rpmrc ファイルのみが有効です。例えば以下のよ うになります。 [訳注、デフォルトとして、/usr/lib/rpmrc というものがあり、 個人の設定ファイルとして個人のホームディレクトリに .rpmrc を置くこともできます。]

require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager:  Mickeysoft Packaging Account <packages@mickiesoft.com>

optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: alpha -O2
optflags: sparc -O2

signature: pgp
pgp_name: Mickeysoft Packaging Account
pgp_path: /home/packages/.pgp

tmppath: /usr/tmp

require_vendor の行は /etc/rpmrc もしくは spec ファイルのヘッダから vendor の行を探そうとします。これを無効にするには、ナンバーを 0 に変 えて下さい。require_distribution と require_group の行も同様です。

次の行は distribution 行です。ここか spec ファイルのヘッダ中に定義で きます。vender 行も同様ですが、何でもよいです。(例、Joe's Software and Rock Music Emporium)

RPM はまた現在複数のアーキテクチャ上でパッケージを作成する事をサポー トしています。rpmrc ファイルは作成時にアーキテクチャ固有のフラグが求 められるようなパッケージを作成するのに必要な"optflag" 変数を持つ事が できます。

上記のマクロに付け加えて、さらにいくつかあります。

rpm --showrc

とすれば、どのようなタグが設定され、有効な全てのフラグは何かわかりま す。

6.2 spec ファイル

sepc ファイルについて述べて行きます。spec ファイルはパッケージを作成 するために必要です。spec ファイルは作成の仕方の指示を含むソフトウェ アの説明とインストールされる全てのバイナリファイルのリストです。

標準的な規則に従って spec ファイルの名前を付けたほうがよいでしょう。 それは、パッケージ名-ダッシュ-バージョン番号-ダッシュ-リリース番号- ドット-spec とすべきです。

ここに簡単な spec ファイルがあります。(vim-3.0-1.spec) [訳注、vim-3.0-1.spec とありますが、これはeject-1.4-3.spec でしょう。]

Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

%prep
%setup
%patch -p1
%patch1 -p1

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

%files
%doc README COPYING ChangeLog

/usr/bin/eject
/usr/man/man1/eject.1

6.3 ヘッダ

ヘッダは書き込む必要のあるいくつかの標準的なフィールドがあります。またいくつ か注意があります。フィールドは以下のように書き込まなければなりません。

6.4 Prep

これは、spec ファイル中の2番目のセクションです。作成用に準備するソースを得る ために使われます。ここで、パッチの当てられたソースを得るために必要な 事をし make するために必要な準備をします。

注意:各セクションはシェルスクリプトを実際に実行するための場所です。簡単に sh スクリプトを作成し、ソースを解凍しパッチを当てるために %prep タグ の後にそれを置く事ができます。しかしながら、 この中には上記の事を支援するためのマクロがあります。

それらの最初マクロのは、%setup マクロです。そのもっとも簡単な形は(コ マンドラインのオプションなし)、単にソースを解凍し できたソースディレ クトリの中に cd するだけです。以下のオプションがあります。

次に有益なマクロは %patch マクロです。このマクロはソースにパッチを当 てる課程の自動化を助けます。いくつかのオプションがありそれは以下の通 りです。 以上で必要なマクロは全部です。これらを正しく記述した後に、sh スクリ プトを用いて他のあらゆる必要なセットアップをする事もできます。%build マクロ(これは次節で説明します。)が sh を経由して実行されるまで何でも 含められます。ここで行いたい事の形は上記の例を見て下さい。

6.5 Build

このセクションにはマクロはありません。ソースを解凍(untar)し、パッチを当て、 ディレクトリに cd したならここでは単にソフトウェアを作成するために必 要なコマンドを記述して下さい。これは単に sh に渡す他のコマンドの集ま りなので、どんな合法的な sh のコマンド(コメントを含む)でもここで実行 できます。[訳注:これはシェルの組み込みコマンドの事だけをいっている のではありません。]これらのセクションの各々で作業ディレクトリはソー スディレクトリの一番上にリセットされますのでそれを覚えておいて下さい。 もし必要ならばサブディレクトリに cd して下さい。

6.6 Install

ここにもマクロはありません。基本的にここにインストールに必要なコマン ドなら何でも置けます。作成したパッケージ中で make install が有効なら、 ここに置きます。そうでないのなら、make install の為の makefile への パッチを当て、make install をするか、sh コマンドによって手動でインス トールする事もできます。現在の作業ディレクトリがソースディレクト リのトップレベルである事を考慮して下さい。

6.7 pre ,post インストール / アンインストール スクリプト (任意)

バイナリパッケージのインストール / アンインストール を行う前と後に実 行するスクリプトをここに置く事ができます。シェアードライブラリを含む パッケージを インストールもしくはアンインストールした後に ldconfig を実行するような事をするためにこのタグがあります。以下に各々のスクリ プトのためのマクロがあります。

6.8 Files

このセクションはバイナリパッケージのためのファイルの一覧を表示しなければなり ません。RPM は make install の結果どのバイナリがインストールされたの か知る方法がないためです。これをする方法はありません! パッケージのイ ンストール前と後に find を実行すればよいのではないかと疑問に思う人も いるかもしれません。マルチユーザーシステムにおいて、パッケージと関係 のないファイルがパッケージを作成している課程の間に作られているかもし れないのでこれは受け入れられません。

同様に特別な事をするために有効なマクロがいくつかあります。以下に説明 します。

ファイル一覧中の最大の注意点はディレクトリの一覧です。もし間違って /usr/bin を一覧に記してしまったら、バイナリパッケージはあなたのシス テムの /usr/bin 中の全てのファイルを含んでしまいます。

6.9 作成

ソースディレクトリ ツリー

まず最初に必要な事は、きちんと設定された作成ディレクトリツリーです。 これは /etc/rpmrc ファイルを用いて設定可能です。多くの人々は /usr/src を使うでしょう。

作成ソースディレクトリツリーを作るために以下のディレクトリを作る必要 があるかもしれません。

作成テスト

おそらく最初にしたいことは、RPM を用いずに作成するためのソースツリー を得ることでしょう。これをするために、ソースを解凍し、ディレクトリ名 を $NAME.orig に変更して下さい。そしてもう一度ソースを解凍して下さい。 そしてこのソースを作成に使用して下さい。ソースディレクトリに入り作成 するための指示にしたがって下さい。もし何か編集をしなければならないな ら、パッチが必要となります。一度それを作るためにソースディレクトリを きれいにします。./configure スクリプトにより生成されたファイルを確認 し削除します。[訳注:要するに、いわゆる make 一発状態にすれば良いと いう事です。] そして、ソースディレクトリの親ディレクトリに cd します。 以下のようにします。

diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch

これは、spec ファイルで使用可能なパッチを作成します。上記の"linux"は 単に識別子であることに注意して下さい。なぜパッチを作成しなければなら ないかを説明するために "config" や "bugs" の様なより説明的なものを使っ てもよいでしょう。間違ってバイナリを含めないように確認するために作成 したパッチを使用する前に調べるのはよい考えです。

ファイルリストの生成

作成するためのソースを手にいれ、それをどうやって作成するかわかったな らば、作成しインストールします。インストールの結果の出力から spec ファ イルで用いるためのファイルリストを作成します。私たちは、たいてい全て のステップで並行して spec ファイルを作成しています。最初のファイルリ ストを作成して簡単な部分を書き込み、そして順を追って埋めていきます。

RPM を用いたパッケージの作成

spec ファイルを書き終えたなら、パッケージを作成する準備ができました。 もっとも有効な方法は、以下のようなコマンドを使うことです。

rpm -ba foobar-1.0.spec
-b スイッチには以下のような有用なオプションがあります。

-b スィッチには以下のようないくつかの変更子があります。

6.10 テスト

いったん、ソース及びバイナリの rpm パッケージを作成したら、それをテ ストする必要があります。最も簡単で良い方法は、パッケージを作成したマ シンと全く異なったマシン上でテストする事です。なぜなら、あなたのマシ ン上で何度も make install をしているので、きちんとインストールされる はずだからです。

テストのために rpm -u パッケージ名 とすることもできます、[訳注: おそらくこれは typo で rpm -e でしょう。rpm -u は現在では動作しません。 ]しかしパッケージ作成の時に make install を実行しているので間違う 事もあります。 もしファイルリストに洩れがあると、アンインストールされません。その時 にはバイナリパッケージを再インストールしてシステムを再び完全なものに します、しかし rpm パッケージはまだ完全ではありません。あなたは、 rpm -ba specファイル名 をしただけだという事をしっかり心に止めておい てください。多くの人々は パッケージをインストールするのに rpm -i パッケージ名 を行うだけです。バイナリがインストールされる時に 必要な事を build セクションや install セクションで何もしていないこと を確認してください。

6.11 新しく作成した RPM パッケージをどうすれば良いか。

いったん、あなたが RPM パッケージを作成したなら(すでに何か RPM 化し たと仮定します)、あなたの作成したパッケージで他の人に貢献する事がで きます(作成した RPM パッケージが自由に配布可能なものとします)。そう するために、ftp.redhat.com にアップロードしてください。 ftp://ftp.redhat.com

6.12 What Now?

新しい RPM パッケージですることとテストに関しては上記のセクションを 見てください。私達は 取得可能な 全ての RPM パッケージを募集していま す。そして、それらが素晴らしい RPM パッケージであることを望んでいま す。作成したパッケージをよく時間をかけてテストしてください。そして、 万人の利益のためにそれをアップロードするために時間をかけてください。 同様に、自由に配布できるソフトウェアのみをアップロードするようにして ください。商用ソフトウェア及びシェアウェアはそれらの著作権がはっきり と自由に配布する事が許される事を言及してない限りアップロードすべきで はありません。これには、Netscape ソフトウェア、ssh、pgp 等が含まれま す。


次のページ 前のページ 目次へ