<!doctype linuxdoc system>

<article>

<title> RPM を使ったパッケージの作成方法 (RPM-BUILD-HOWTO)
<author>古高和禎(ふるたか@原研),<tt/furutaka@Flux.tokai.jaeri.go.jp/ <newline>
        石岡  尚(ishi), <tt/ishioka@PPP01.infoPepper.or.jp/
<date> 第 0.5 版 96/12/02
<!-- 
<date> 第 0.4 版 96/11/23
-->
<abstract>
この文書では、RPM (Redhat Package Manager) を使ったバイナリパッケージ
(*.rpm) 及びソースパッケージ (*.src.rpm) の作成方法を説明します。
なお、説明する RPM の機能は、執筆時の最新版である 2.2.9 のもの
です。
</abstract>

<p>
<bf>注意: この文書はかなり以前に書かれたものなので、
いまどきの Linux 環境にはあてはまらない箇所があります。
(JF Project)</bf>
</p>

<toc>

<sect> 概要
<p>

<sect1> この文書に書かれている事
<p>
	この文書では、Red Hat Software の開発したパッケージマネージメント
	ツール、Redhat Package Manager (RPM) を用いたバイナリ及びソース
	パッケージの作成方法を解説しています。

	この文書では、RPM を用いた、バイナリパッケージのインストール
	及び更新方法、情報の問い合わせ方法や検証方法は解説しておりません。
	これらに関しては、
<url
 url="http://www.redhat.com/support/docs/rpm/RPM-HOWTO/RPM-HOWTO.html"
name="RPM-HOWTO">,
<url
 url="http://www.redhat.com/support/docs/rpm/Tips/RPM-Tips/RPM-Tips.html"
name="RPM-Tips">
	及び rpm(8) の man page (または
	それらの翻訳)を参照して下さい。<newline>
	RPM-HOWTO は、山縣 敦 <tt>&lt;ayamagat@phys.metro-u.ac.jp&gt;</tt>
	さんが日本語に翻訳して下さいました。<newline>
	rpm(8) の man page は、第一筆者が翻訳し、随時 Linux-ML 等に
	流しております。

	なお、この文書では、パッケージマネージャを``RPM'' と
	大文字で表記し、それを用いて作られるバイナリパッケージ
	(<tt>*.rpm</tt>)及びソースパッケージ(<tt>*.src.rpm</tt>)
	と区別しています。


<sect1> 著作権及び配付条件
<p>
	この文書の著作権は古高和禎及び石岡尚にあるものとします。

	また、この文書は、GPL に従って自由に配付・利用できるもの
	とします。

<sect1> フィードバック
<p>
	この文書は、筆者達が <tt>package-ML</tt> における
	RPM を使用したパッケージングの実験を通して得た
	少ない経験及び知識をまとめたものです。

	従って、筆者の誤解による誤った記述や欠落してしまっている情報が
	数多くあるものと思われます。

	誤りや追加すべき情報を発見なさった方は、
	<htmlurl url="mailto:furutaka@Flux.tokai.jaeri.go.jp" name="第一筆者">
	にお知らせ頂ければ、文書の更新時に訂正/追加を行なって参ります。


<sect> RHL 以外のディストリビューションへの RPM のインストール
<p>

	RPM とは、Redhat Package Manager の略で、その名の通り
	<url url="http://www.redhat.com/" name="Red Hat Software (RHS)">
	の Linux ディストリビューション
	Red Hat Linux (RHL)用に開発されたツールで、ソフトウェア
	のインストール、保守、パッケージングを行ないます。
<!-- 
	RPM とは、Redhat Package Manager の略で、その名の通り
	Red Hat Software (RHS) の Linux ディストリビューション
	(RHCL)用に開発されたバイナリパッケージのインストーラ兼
	ソース・バイナリパッケージ作成ツールです。
-->

	しかし、RPM は RHL 以外では使えない訳ではありません。
	むしろ、RHS の面々が様々な文書で言っているように、
	「他のディストリビューションでも容易に使える」のです
	(実際、最近では、とある理由から Debian ディストリビューションで
	 RPM のバイナリパッケージが流通されていた筈です)。
	また、Red Hat 以外のディストリビューションを使用している方も
	RPM を容易に使用できる様に、RPM のバイナリを(RPM を用いずに)
	インストールする方法が(現在のところix86アーキテクチャのみ
	ですが)用意されています。

	この節では RHL 以外の ix86 アーキテクチャ用ディストリビューション
	に RPM をインストールする方法を解説します。
	RHL ディストリビューションを用いている方は、RPM が
	インストールされていますから、この節は飛ばして構いません。
	(もし、使用している RPM が古いもので、この文書で説明している
	 機能が使いたいのに使えない、という場合は、Red Hat 自身による
	 RPM のアップグレード法に従って下さい。)


<sect1> 必要なファイル
<p>
	RPM を使用するためには、
<itemize>
<item> <tt>GNU cpio</tt> (version 2.4.1 以降のもの)
<item> <tt>rpm-2.2.9-1.i386.cpio.gz</tt>
</itemize>
	が必要です。これらのファイルは
<tscreen>
<url url="ftp://ftp.redhat.com/pub/redhat/code/rpm"
     name="Red Hat の本家ミラーサイト">
</tscreen>
	及び、そのミラーサイトの対応するディレクトリ
	(例えば、日本国内なら、
<tscreen>
<url url="ftp://ftp.lab.kdd.co.jp/OS/Linux/packages/redhat/code/rpm"
    name="KDD のミラー">
</tscreen>
	等)にあります。

	お使いのシステムに既に <tt>cpio</tt> がインストール
	されていても、バージョンが古い場合には
	(例えば Slackware 3.0 に含まれている
	``<tt>GNU cpio version 2.3</tt>'')
	RPM が用いる <tt/--quiet/ というオプションが
	備わっていないので RPM 2.2.9 と組み合わせては使用できません。
	この場合は、上記ミラーサイト等から <tt>cpio</tt> も
	<tt>ftp</tt> し、現在インストールされている <tt>cpio</tt> と
	入れ換えておいて下さい。


<sect1> インストール
<p>
	必要なファイルが揃ったら、<tt>root</tt> になって、
	``<tt>/</tt>'' ディレクトリで
<tscreen>
<verb>
gunzip < rpm-2.2.9-1.i386.cpio.gz | cpio -ivumd
</verb>
</tscreen>
	と入力して下さい。

	次に RPM の使用するデータベースファイルの準備をしましょう。

	まず、<tt>root</tt> のまま(<tt>CWD</tt> は何処でも構いません)、
	RPM の使用するデータベースファイルを置くためのディレクトリを
	作成しましょう。
<tscreen>
<verb>
mkdir /var/lib/rpm
</verb>
</tscreen>

	そして、
<tscreen>
<verb>
rpm --initdb
</verb>
</tscreen>
	とすれば、<tt>/var/lib/rpm</tt> にデータベースファイルが作成されます。

	これで RPM のインストールは完了しました。
	RPM を用いて、<tt>.rpm</tt> バイナリパッケージのインストール
	を行なう事が出来る筈です!


<sect> 設定ファイルと作成ツリー
<p>

<sect1> 設定ファイル
<p>
	RPM に対する設定は、
<itemize>
<item><tt>/usr/lib/rpmrc,</tt>
<item><tt>/etc/rpmrc, </tt>
<item><tt>&dollar;HOME/.rpmrc</tt>
</itemize>
	という(設定レベルの異なる)三種類のファイルにより行なわれており、夫々
<descrip>
<tag><tt>/usr/lib/rpmrc</tt></tag>
	RHS の勧める RPM の設定が記述されている
<tag><tt>/etc/rpmrc</tt></tag>
	サイト毎の設定ファイル
<tag><tt>&dollar;HOME/.rpmrc</tt></tag>
	各個人毎に設定を行なうためのファイル
</descrip>
	という役割を担っています。
	この中で、<tt>/usr/lib/rpmrc</tt>は RPM パッケージに含まれて
	いますが、<tt>/etc/rpmrc</tt> 及び <tt>&dollar;HOME/.rpmrc</tt>
	は各自が作成する必要があります。
	(RPM バージョン 2.2.7 以前は <tt>/etc/rpmrc</tt> も配付パッケージに
	含まれて いたのですが、バージョン 2.2.8 以降は望ましい設定値が全て
	 <tt>/usr/lib/rpmrc</tt> に書かれるようになったため、
	 同梱されなくなりました。
<ref id="EtcRpmrc" name="/etc/rpmrc が無い!">
	節を参照して下さい。
	また、バージョン 2.2.8 でのバグについては、
<ref id="TypoIn228" name="RPM をアップグレードした際にエラーが出る">
	節を参照して下さい。)


<sect1> パッケージ作成ツリー
<p>
	RPM は、ディフォルト(即ち、<tt>/usr/lib/rpmrc</tt>の設定)では、
	パッケージ作成ツリーの最上位ディレクトリを
<tscreen>
<verb>
topdir: /usr/src/redhat
</verb>
</tscreen>
	とし、その下にある
<itemize>
<item><tt>BUILD</tt>
<item><tt>RPMS</tt>
<item><tt>RPMS/{i386,axp,sparc}</tt>
<item><tt>SOURCES</tt>
<item><tt>SPECS</tt>
<item><tt>SRPMS</tt>
</itemize>
	というディレクトリを利用します。<newline>
	RPM を用いたパッケージを <tt>root</tt> として作成するためには
	不可欠ですので、対応するディレクトリツリーを作成しておいて
	下さい。

	夫々のディレクトリは
<descrip>
<tag><tt>BUILD</tt></tag>
	ソースを展開し、パッチを当て、<tt>make</tt> を行なう
<tag><tt>RPMS/{i386,axp,sparc}</tt></tag>
	完成したバイナリパッケージ(<tt>*.rpm</tt>)が置かれる<newline>
	(使用しているシステムが ix86 アーキテクチャなら、<tt>RPMS/i386</tt>
	 に置かれます。)
<tag><tt>SOURCES</tt></tag>
	ソースファイル、パッチを置く<newline>
	(``glint'' の使用するアイコン用の gif ファイル等もここに置きます。)
<tag><tt>SPECS</tt></tag>
	パッケージ作成用の仕様書(<tt>spec</tt> ファイル)を置く
<tag><tt>SRPMS</tt></tag>
	完成したソースパッケージ(<tt>*.src.rpm</tt>)が置かれる
</descrip>
	ために用いられます。

	この他にも、<tt>make</tt> して出来たファイルをその下に
	「仮想的にインストール」してバイナリパッケージを作成する
	ためのディレクトリ(``<tt>BuildRoot:</tt>'')も用いられます。
	こちらは、作成する各パッケージ毎に設定できますので、
	<ref id="BuildRoot" name="spec ファイルを書く際">
	に説明します。


<sect1> 個人用作成ツリー
<p>
	以上のディレクトリツリーさえ有れば、<tt>root</tt> として
	パッケージを作成する事が出来ます。

	しかし、<tt>/usr/src</tt> 以下には(恐らく)書き込み権の無い
	一般ユーザ「も」自分のホームディレクトリ以下にパッケージ作成
	用ディレクトリツリーを設定し、RPM を用いてパッケージを作成する
	事が出来ます。

	パッケージ作成用ディレクトリツリーを一般ユーザの
	ホームディレクトリ以下に設定するには、そのユーザの
	<tt>&dollar;HOME/.rpmrc</tt> ファイル中に
<tscreen>
<tt>topdir: /home/hogehoge/&lt;mybuilddir&gt;</tt>
</tscreen>
	と書いておき、<tt>&lt;mybuilddir&gt;</tt>以下に
	<tt>BUILD, RPMS,...</tt> といったサブディレクトリを作成
	しておけば良いのです。
	ここでは、ユーザ <tt>hogehoge</tt> のパッケージ作成用
	ディレクトリを、そのホームディレクトリの下の
	<tt>&lt;mybuilddir&gt;</tt> に設定しています
	(勿論、<tt>&lt;mybuilddir&gt;</tt> はあなたが使用する
	実際の作成用ディレクトリに置き換えて下さい)。

	以後、 <tt>/home/hogehoge/&lt;mybuilddir&gt;</tt> 等を
	<tt>&lt;topdir&gt;</tt> と記述します。



<sect> パッケージ作成の準備 I (パッチ等の作成)
<p>



<sect1>まずは make 出来るように...
<p>
	まずは、オリジナルのソースを展開し、<tt>make</tt> 出来る様に
	しましょう。

	ここでは、ソースファイルが <tt>harehore-1.23.tar.gz</tt>
	というファイルに保存されているとします。

<enum>
<item> 	<tt>&lt;topdir&gt;/SOURCES</tt> に <tt>harehore-1.23.tar.gz</tt>
	を持って来ます。

<item>	<tt>&lt;topdir&gt;/BUILD</tt> で、オリジナルソースを展開します。
	必要な(ソフト自体に対する)パッチも当てましょう。
	<newline>
	(新たにディレクトリを作り、そこにファイルを展開する
	「のでない」アーカイブの場合は、後々のために 
	``<tt>harehore-1.23</tt>'' という
	ディレクトリを作成し、そのディレクトリに移って展開して下さい。)

<item>	ディレクトリ ``<tt>harehore-1.23</tt>'' の名前を
	``<tt>harehore-1.23.orig</tt>'' 等
	に変更します。

<item>	1. の操作を繰り返し、再び ``<tt>harehore-1.23</tt>''
	   中にソースファイルを展開します。

<item>	``<tt>harehore-1.23</tt>'' に移り、うまく<tt>make</tt> 出来る
	ようになるまで変更を加えます。

<item>	<label id="Diff">
	うまく <tt>make</tt> 出来るようになったら、<tt>make clean</tt>
	等の操作によりソース・ディレクトリ内の <tt>*.o</tt> 等を消去した後、
	パッケージ作成の為のパッチを作成し、<tt>&lt;topdir&gt;/SOURCES</tt>
	に置きます。<newline>
	このために、<tt>&lt;topdir&gt;/BUILD</tt> で
<tscreen>
<tt>
diff -uNr harehore-1.23.orig harehore-1.23 
	&gt; ../SOURCES/harehore-1.23.patch
</tt>
</tscreen>
	として下さい。
</enum>


<sect1>「仮想」インストール
<p>
	RPM は、<tt>make</tt> して出来たバイナリその他を一度システム上に
	インストールし、それらを用いてバイナリパッケージを作ります。
	しかし、これでは、システム上に既にインストールされているファイルを
	上書きしてしまう可能性があります。
	これを避ける為に、あるディレクトリを指定し、それをインストールする
	ディレクトリツリーの最上位ディレクトリに見立てて、そのディレクトリ
	以下に「仮想的に」インストールし、バイナリパッケージを作成する
	事ができます。

	最上位ディレクトリの指定は、<tt>Imakefile</tt> 等を用いている
	プログラムの場合は変数 <tt>DESTDIR</tt> で、また <tt>GNU</tt>
	のソフトの場合は <tt>Makefile</tt> の中の <tt>PREFIX</tt>
	(<tt>prefix</tt>) 等で指定する事が出来ます。

	しかし、その様な機構が用意されていない場合は、インストールする
	ディレクトリツリーの最上位ディレクトリを指定できるように、
	<tt>Makefile</tt> 等を改造しておきましょう。
	
	例えば、以下の様な仮想的な <tt>Makefile</tt> の一部
<tscreen>
<verb>
----------
BINDIR=/usr/local/bin
LIBDIR=/usr/local/lib/harehore
 .......
install :
	install -s harehore ${BINDIR}
 .......
----------
</verb>
</tscreen>
	に対しては、
<tscreen>
<verb>
----------
installprefix=$(ROOT)
BINDIR=$(installprefix)/usr/local/bin
LIBDIR=$(installprefix)/usr/local/lib/harehore
 .......
install :
	install -s harehore ${BINDIR}
 .......
----------
</verb>
</tscreen>
	という様に変更を行なって下さい。

	この <tt>Makefile</tt> に施した変更も、<tt>patch</tt>にして
	<tt>&lt;topdir&gt;/SOURCES</tt> に置いておきましょう。
	(これらの変更を施してから前節の最後で述べた
	<ref id="Diff" name="diff">
	 の操作を行なって <tt>patch</tt> を作るのでも構いません。)


<sect> パッケージ作成の準備 II (spec ファイルの記述法)
<p>
	次はいよいよ、<tt>.rpm</tt> 及び <tt>.src.rpm</tt> を作成する為の
	「仕様書」である <tt>spec</tt> ファイルを作成します。


<sect1>spec ファイルの例
<p>
	ただズラズラと <tt>spec</tt> ファイル中に記述すべき項目の説明を羅列
	しても分かりにくいだけですので、例をあげて説明しましょう。

	ここでは、著者の一人が作成した <tt>plain2-2.54</tt> 用の
	<tt>spec</tt> ファイル、``<tt>plain2-2.54-3.spec</tt>''
	を例に取って説明します。

	注：通常、<tt>.rpm</tt> 等のファイル名は、<newline>
&lt;パッケージ名&gt;-&lt;バージョン番号&gt;-&lt;リリース番号&gt;.&lt;アーキテクチャ&gt;.rpm<newline>
	とします。例えば、<tt>i386</tt> 向けに作成した
	<tt>plain2</tt> のバージョン <tt>2.54</tt>
	の <tt>3</tt> 番目の rpm リリースに対しては、
<tscreen>
<verb>
plain2-2.54-3.i386.rpm
</verb>
</tscreen>
	  となるようにします。


	以下に上記の<tt>spec</tt>ファイルを示します。
	右端の数字は解説用のインデックスで、実際の<tt>spec</tt>ファイル
	には書かれていません。
<tscreen>
<verb>
---------- plain2-2.54-3.spec ----------
Summary: Plain2 plain text -> LaTeX/troff converter		 1.
Name: plain2							 2.
Version: 2.54							 3.
Release: 3							 4.
Group: Applications/Publishing/TeX				 5.
Source: Flux.tokai.jaeri.go.jp:/plain2-2.54.tar.gz		 6.
Copyright: 							 7.
Packager: Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>	 8.
URL: http://Flux.tokai.jaeri.go.jp				 9.
BuildRoot: /home/furutaka/work/rpm/plain2			10.
Patch: Flux.tokai.jaeri.go.jp:/plain2-2.54.patch		11.

%package docs							12.
Summary: Documents package of plain2				13.
Group: Applications/Publishing/TeX				14.

%description							15.
Plain2 plain text -> LaTeX/troff converter (desc.)		16.

%description docs						17.
This package contains lots of documentation and Makefile	18.
for plain2 plain text -> LaTeX/troff converter.

%prep								19.
%setup								20.
%patch -p1							21.
#%patch -p1							22.

rm -rf   $RPM_BUILD_ROOT					--
mkdir -p $RPM_BUILD_ROOT/usr/local/bin				23.
mkdir -p $RPM_BUILD_ROOT/usr/local/lib/plain2			--

%build								--
cd src								24.
make								--

%install							--
cd src								25.
make installprefix="$RPM_BUILD_ROOT" install			--

%clean								--
rm -rf $RPM_BUILD_ROOT						26.
								--

%post								--
chown -R root.root /usr/local/lib/plain2			27.
chown    root.root /usr/local/bin/plain2
chown -R root.root /usr/doc/plain2-2.54-2			--

%files								--
%dir /usr/local/lib/plain2					↑
/usr/local/bin/plain2
/usr/local/lib/plain2/OHP.p2
/usr/local/lib/plain2/OHP_t.p2					28.
/usr/local/lib/plain2/header.p2
/usr/local/lib/plain2/header_t.p2
/usr/local/lib/plain2/jbook.p2					↓
/usr/local/lib/plain2/supsnum.p2				--

%files docs							29.
%doc doc/*
---------- end of plain2-2.54-2.spec ----------
</verb>
</tscreen>

	では、各エントリーについて、順番に説明して行きます。

	1.--18. はヘッダで、RPM を用いてパッケージの問い合わせ等に対する
	返答や、ソースアーカイブなどの名前を記述しておくのに用いられます。
<enum>
<item>	このパッケージ(<tt>spec</tt> ファイル)の簡単な説明です。

<item>	パッケージの名前です。

<item>	パッケージが元にしているソースファイルのバージョン番号です。
	<newline>
	(ただし、バージョン番号の中にはハイフン ``<tt>-</tt>''
	を用いる事は出来ません。
	しようがないので、代わりにアンダースコア ``<tt>_</tt>''
	を使って下さい。)

<item>	この (<tt>.rpm</tt> 及び <tt>.src.rpm</tt>)パッケージの
	     リリース番号です。<newline>
	     (ソースのバージョンとは関係ありません。)

<item>	Red Hat LiNUX でのパッケージの分類です。<newline>
	(日本語環境用配付パッケージ集を作成する時は、
	独自の分類を考えた方が良いでしょう。RHL では、
	<tt>Extensions/Japanese</tt> という階層が有ります。
	(しかし、そこには <tt>kterm</tt>しか有りませんが<tt/(^^;;/)

<item>	本来は、オリジナルのソースファイルの一次配布 <tt>ftp</tt>
	サイトを記述します。<newline>
	しかし、このように記述し、かつ、
	自分の <tt>topdir:</tt> の下の <tt>SOURCES</tt> 
	ディレクトリにソースファイルが置いてあれば問題無い様です。)

<item>	著作権を記述しておきます。

<item>	ここには「RPM パッケージの維持」を行なっている人の名前と
	電子メールアドレスを書いておきます。<newline>
	(ただし、これを書いておいても <tt>rpm -qi</tt>しただけでは
	情報が表示されません。)

<item>	ここには、パッケージ中のソフトウェアについての情報又は文書
	への <tt>URL</tt> を書いておきます。<newline>
	将来的に RPM がこのタグを使う可能性もあるそうです。<newline>
	(このタグも、8. と同様<tt> rpm -qi</tt> では情報が表示
	されません。)

<item>	<label id="BuildRoot">
	バイナリ・パッケージを作成する為に「仮想的に」インストール
	を行なう際の、最上位ディレクトリを指定します。

<item>	パッチの置き場所を記述します。<newline>
	(``<tt>Source:</tt>''(ソースの置き場所)と同様に、
	この様な書式で指定し、かつ <tt>&lt;topdir&gt;/SOURCES</tt>
	にパッチファイルが置かれていれば、問題無く動作するようです。)

	12.--14. は、ソースに含まれるファイルの一部を別のパッケージとする
	場合のエントリです。(すべてのファイルを単一パッケージとする
	場合は必要ありません。)<newline>
	この様にした場合は、(この例の場合) 文書ファイルを含まない
	<tt>plain2-2.54-2.i386.rpm</tt> の他に
	<tt>plain2-docs-2.54-2.i386.rpm</tt>
	という文書ファイルのみを含んだパッケージが作成されます。

<item>	<tt>docs</tt> という別パッケージを作成する事を宣言します。
<item>	別パッケージの内容の簡単な説明を記述します。
<item>	別パッケージに対する分類を記述します。(この例では同じ分類)

<item>	メインのパッケージ(この例では
	<tt>plain2-2.54-2.i386.rpm</tt>)の説明文のタグです。

<item>	メインのパッケージの機能等を(アルファベット 50 字程度で)
	記述します。

<item>	サブパッケージ(この例では
	<tt>plain2-docs-2.54-2.i386.rpm</tt>)の説明文のタグです。

<item>	サブパッケージの機能などを記述します。

<item>	ソースを <tt>BUILD</tt> ディレクトリに展開し、パッチを当てる、
	等の作業内容を記述しておくためのタグです。

<item>	実際にソースを展開し、パッチを当てる為の「マクロ」です。
	動作内容は、オプション無しでは「ソースを展開し、出来た
	ディレクトリに <tt>cd</tt> する」ことです。

	オプションには
	<tt> -n &lt;name&gt;, -c, -b &num;, -a &num;, -T, -D</tt>
	等があり、夫々、
<descrip>
<tag><tt>-n &lt;name&gt;</tt></tag>
	ソースを展開した後に <tt>cd</tt> するディレクトリ名を
	<tt>&lt;name&gt;</tt> とします。
	ディフォルトでは <tt>&dollar;NAME-&dollar;VERSION</tt> です。
	他には、
	例えば <tt>&dollar;NAME, &dollar;{NAME}&dollar;{VERSION}</tt> 等と
	する事も出来ます。<newline>
	(RPM-HOWTO にはこう書いてありますが <tt>&dollar;NAME</tt> は
	<tt>&dollar;RPM_PACKAGE_NAME</tt> と書かないとダメな様です。)

<tag><tt>-c</tt></tag>
	ソースファイルを展開する「前に」、指定したディレクトリを作成し、
	そこに<tt>cd</tt> します。
	上の <tt>-n &lt;name&gt;</tt> オプションと組み合わせて
<tscreen>
&percnt;setup -n &lt;name&gt; -c
</tscreen>
	とする事により、<tt>&lt;name&gt;</tt> というディレクトリを作成し、
	そこに <tt>cd</tt> する様にします。

<tag><tt>-b &num;</tt></tag>
	展開先ディレクトリに<tt/cd/する「前に」
	<tt>&num;</tt> 番目のソース(<tt>Source&num;:</tt>)を展開します。

<tag><tt>-a &num;</tt></tag>
	展開先ディレクトリに <tt>cd</tt> した「後で」 
	<tt>&num;</tt> 番目のソース(<tt>Source&num;:</tt>) を展開します。

<tag><tt>-T</tt></tag>
	ディフォルトでは、<tt>&percnt;setup</tt>が現れる「毎に」
	``<tt>Source:</tt>''に示されたソースが展開されてしまいます。
	そこで、複数のファイルが有る時は、二番目以降の<tt>&percnt;setup</tt>
	ではこのオプションを指定して、再び``<tt>Source:</tt>''が
	展開されない様にします。
	これに先だつ<tt>&percnt;setup</tt>で<tt>-b 0</tt> 又は <tt>-a 0</tt>
	と指定して、メインのソース「のみ」を展開しておかなくてはなりません。

<tag><tt>-D</tt></tag>
	ディフォルトでは、<tt>&percnt;setup</tt>「毎に」<tt>BUILD</tt>
	ディレクトリに展開したものを消去してしまいます。
	そこで、このオプションを指定して、二番目以降のソースを展開する
	際に(既に<tt>BUILD</tt> に作成されている)ソースディレクトリを消去
	しない様にします。
</descrip>
	という機能を持っています。
	以上のオプション使用法の具体例を
	<ref id="SetupExample"
	name="&percnt;setup マクロのオプションの使用例">
	節にて解説していますので、そちらを参照して下さい。


<item>	パッチを当てるための「マクロ」です。
	いくつかのオプションを取る事が出来ます。
<descrip>
<tag><tt>&num;</tt></tag>
	ヘッダ中に <tt>Patch&num;:</tt> で示されている <tt>&num;</tt> 番目の
	パッチを当てます。

<tag><tt>-p &num;</tt></tag>
	<tt>patch(1)</tt> コマンドに渡すべき、飛び越し可能
	ディレクトリの階層数を <tt>&num;</tt> で指定します。

<tag><tt>-P</tt></tag>
	ディフォルトの動作
	(<tt>Patch</tt> もしくは <tt>Patch0</tt>を当てる)
	を抑止し、メインのソースがエラー無く展開できた事(返り値 0)を
	確かめます。<newline>
	<tt>%patch &num;  -P</tt> とする代わりに<tt> %patch&num;</tt>
	と指定する事も出来ます。
</descrip>

	この他にも、文書に記述されてはいないが使う事の出来る
	機能/オプションが幾つかあるようです。
	<ref id="HiddenPatchFunc"
	name="Undocumented(?) &percnt;patch functions">節
	を参照して下さい。

<item>	コメントです。
	コメントアウトするには行の最初の文字を '<tt>&num;</tt>'
	にします。

<item>	「仮想的にインストールする」ディレクトリを消去し、
	新たに作り直しておきます。
	ここで、<tt>RPM_BUILD_ROOT</tt> は、ヘッダ中で
	``<tt>BuildRoot:</tt>'' により
	指定したディレクトリに展開されます。

	このように、<tt>&percnt;prep</tt> や
	<tt>&percnt;build</tt>といった
	各タグの中では <tt>shell</tt> コマンドを書いておいて
	実行させる事が出来ます。

<item>	<tt>&percnt;build</tt> は実際の <tt>make</tt> を行なう
	過程を示すタグです。

<item>	<tt>&percnt;install</tt> は、インストール過程で行なう
	作業を記述するタグです。
	即ち、「<tt>BuildRoot:</tt> で指定されたディレクトリ
	以下に仮想的にインストール」を行なっています。


<item>	パッケージ作成終了後に行なう動作を記述するタグです。
	無くても構いません。
	ここでは、仮想インストールディレクトリの消去を行なっています。

<item>	バイナリ・パッケージのインストール終了後に設定スクリプト等を
	走らせる過程のためのタグです。<newline>
	(ここでは、一般ユーザがパッケージを作成しているために、ファイル
	の所有者が作成者になってしまっているので、所有者を
	<tt>root</tt> に変更しています。)

<item>	<tt>&percnt;files</tt> は、このパッケージが所有するファイルを
	リストしておくためのタグです。
	あるファイルがどのパッケージの所有物であるか問い
	合わせる際や、パッケージを削除する際などに用いられます。

	この際、各ファイルに
		<tt>&percnt;dir, &percnt;doc &percnt;config</tt> 
	等の印をつけておく事も出来ます。
<descrip>
<tag><tt>&percnt;dir</tt></tag>
	これを付けられたディレクトリ「のみ」がこのパッケージ所有の
	ものであることを示します。
	これを付けずにディレクトリを指定すると、そのディレクトリ
	「中のすべてのファイル」がそのパッケージに属すると見做され、
	インストールされます。

<tag><tt>&percnt;doc</tt></tag>
	文書ファイルである事を示します。
	ディフォルトでは
	<tt>/usr/doc/&dollar;NAME-&dollar;VERSION-&dollar;RELEASE</tt>
	にインストールされます。

<tag><tt>&percnt;config</tt></tag>
	設定ファイルである事を示します。
	アップグレード時には、古いリリースパッケージ中でこの印を付けられた
	ファイルに変更が加えられていない場合はそのまま消去し、変更
	されていた場合はファイル名に .rpmsave を付けて保存します。
</descrip>

<item>	サブパッケージ(この場合は <tt>docs</tt>) の所有するファイル
	を示すための、別の <tt>&percnt;files</tt> タグです。
	サブパッケージを作らない場合は
	<tt>&percnt;doc doc/*</tt> の行を 27. に含めておけば良いだけです。

</enum>
	どうですか？分かりましたか？


<sect1> 例に登場していないタグ
<p>
	上で用いられている以外にも、以下のようなタグがあります。
<descrip>
<tag><tt>&percnt;pre</tt></tag>
	インストール前に行なう動作を記述するタグ
<tag><tt>&percnt;preun</tt></tag>
	アンインストール前に行なう動作を記述するタグ
<tag><tt>&percnt;postun</tt></tag>
	アンインストール後に行なう動作を記述するタグ
</descrip>
	例えば、<tt>&percnt;post</tt> には、
	「一般ユーザとして作成したためファイルの所有者がそのユーザに
	なってしまっている」ので <tt>chown</tt> したい場合や、
	<tt>chmod</tt> したい場合などに用いる事が出来ます。


<sect1> &percnt;setup マクロのオプションの使用例
<label id="SetupExample">
<p>

<sect2>	ソースのディレクトリ名を指定する
	(&percnt;setup -n &lt;name&gt;)
<p>
	<tt>&percnt;setup</tt> セクションの
	<tt>-n</tt> オプションを使うと、ソースを展開した
	後で <tt>cd</tt> し、また <tt>&percnt;build</tt>
	で作業をするディレクトリの名前を指定することができます。 

	<tt>kon</tt> のソース(<tt>kon-0.99.4g.tar.gz</tt>) 
	を例に取りましょう。このソースファイルを展開すると、
<tscreen>
<verb>
drwx--x--x manabe/dsl        0 Apr 17 16:06 1996 kon/
drwx--x--x manabe/dsl        0 Apr 17 00:53 1996 kon/font/
-rw------- manabe/dsl     4552 May  8 12:39 1994 kon/font/minix.c
-rw------- manabe/dsl      491 Apr  6 12:57 1996 kon/font/Makefile
(以下略)
</verb>
</tscreen>
	と、<tt>kon</tt> というディレクトリの下にソースファイルが
	展開されます。

	一方、RPM は
	<tt>&dollar;{RPM_PACKAGE_NAME}-&dollar;{RPM_PACKAGE_VERSION}</tt>
	というディレクトリ以下にソースが展開されているものとして、
	<tt>&percnt;setup</tt> マクロを実行した後はそのディレクトリに
	<tt>cd</tt> しようとします。

	この場合は、単に <tt>&percnt;setup</tt> とやるのではなく、
	<tt>&percnt;setup -n kon</tt>
	と指定すれば、上記ソースを展開した後 <tt>kon</tt> という
	ディレクトリに <tt>cd</tt> します。
	また、<tt>&percnt;build</tt>の際もこのディレクトリで作業を
	します。
	特に、この場合は <tt>&dollar;RPM_PACKAGE_NAME = kon</tt> 
	ですので、
<tscreen>
<verb>
%setup -n $RPM_PACKAGE_NAME
</verb>
</tscreen>
	とする事も出来ます。

	因みに、RPM の中で定義されていて、<tt>spec</tt> ファイルの中で
	使う事が出来る変数としては以下の様なものがあるようです。
	(中身は筆者の一人の環境での例です。)
<tscreen>
<verb>
RPM_ARCH=i386
RPM_BUILD_DIR=/home/ishioka/local/work/package/redhat/BUILD
RPM_BUILD_ROOT=/home/ishioka/local/work/package/rpm-tmp
RPM_DOC_DIR=/usr/doc
RPM_OPT_FLAGS=-O2 -m486 -fno-strength-reduce
RPM_OS=Linux
RPM_PACKAGE_NAME=kon
RPM_PACKAGE_RELEASE=0
RPM_PACKAGE_VERSION=0.99.4g
RPM_ROOT_DIR=/home/ishioka/local/work/package/rpm-tmp
RPM_SOURCE_DIR=/home/ishioka/local/work/package/redhat/SOURCES
</verb>
</tscreen>


<sect2>	ディレクトリを作成してからソースを展開する
	(&percnt;setup -c)
<p>

	<tt>&percnt;setup -c</tt> を使うと、まずソースを
	展開するディレクトリを作成し、そこに <tt>cd</tt> したあとで
	ソースを展開してくれます。 例えば、<tt>xc32.tar.gz</tt> の場合、
	ソースを展開すると次のようにカレントディレクトリにファイルを作る
	ので...
<tscreen>
<verb>
tar tzvf ../SOURCES/xc32.tar.gz
-rw-rw-r-- 0/1            3343 Jun 14 07:53 1991 .autocis
-rw-rw-r-- 0/1            1152 Jun  6 10:56 1991 .uni
-rw-rw-r-- 0/1             824 Jun  6 10:56 1991 .callhq
-rw-rw-rw- 0/1            4127 Aug 25 10:17 1991 Makefile
</verb>
</tscreen>

	この様な場合は、
<tscreen>
<verb>
%setup -c -n xc-3.2
</verb>
</tscreen>
	と指定して、まず <tt>xc-3.2</tt> というディレクトリを作って
	<tt>cd</tt>させ、そこに展開させます。
	あとは普通の場合とおなじです。


<sect2>	複数ソース、パッチを当てる
<p>
	以下のように複数のソースを順に展開することができます.

<tscreen>
<verb>
Source:  xc32.tar.gz .......... メインのソース
Source1: xc32pat.tar.gz ....... サブソース1
Source2: xc32news.tar.gz ...... サブソース2

%prep
%setup -c ..................... (1)
%setup -D -a 1 -T ............. (2)
%setup -D -a 2 -T ............. (3)
</verb>
</tscreen>

	(1) では メインのソース(<tt>Source:</tt> で指定したもの) を
	展開しています。
	<tt>xc</tt> の場合、カレントディレクトリにファイルを作るので、
	<tt>-c</tt> オプションで先にディレクトリを作成し、
	<tt>cd</tt> した後で展開させています。

	(2), (3)ではサブソースを展開していますが、これも(1) と同様の
	理由から <tt>-c</tt> を付加しています。
	また, それぞれ <tt>Source[12]:</tt> を指定
	するために <tt>-a &num;</tt> オプションも使っています。
	ここでは、<tt>-D</tt> オプションを使って、
	(1)で展開したディレクトリを消去してしまわない様にしています。
	こうしておかないと、せっかく展開したメインのソースが消されて
	しまうのです！
	また、単に <tt>-a 2</tt> とだけ指定すると、
	<tt>Source2</tt> 「と <tt>Source</tt>」 が展開
	されてしまうので、<tt>-T</tt> オプションも指定しています。

<sect1> Undocumented (?) &percnt;patch functions
<label id="HiddenPatchFunc">
<p>

	<tt>&percnt;path</tt> マクロは、パッチファイルが圧縮されていても
	動作するようです。<newline>
	(自動的に ``<tt>gzip -dc &lt;PatchFile&gt; | patch ...</tt>''
	 を行なってくれる。)

	また、<tt>&percnt;patch</tt>マクロのオプションとしては、
	undocumented ではありますが、下記の様な <tt>patch(1)</tt>
	オプションも指定する事が出来るようです。
<descrip>
<tag><tt>-b xxx</tt></tag>
	バックアップとして保存するファイルの拡張子を <tt>.orig</tt>
	から <tt>.xxx</tt> に変更する。
<tag><tt>-R</tt></tag>
	リバースパッチを施す。
<tag><tt>-E</tt></tag>
	パッチを当てた結果空になったファイルを削除する。
</descrip>



<sect> パッケージ作成
<p>
	<tt>spec</tt>ファイルを書いてしまえば、
	あとは <tt>&lt;topdir&gt;/SPECS</tt>
	に移って RPM を使ってパッケージを作成するだけです。

	RPM 構築コマンドの一般的な形は
<tscreen>
&amp; rpm -bO &lsqb;作成オプション&rsqb; &lt;specファイル名&gt;+
</tscreen>
	です。

	&lsqb;作成オプション&rsqb;は man page の翻訳等を
	参照して頂くことにして、ここでは <tt>-bO</tt> の部分だけを
	説明します。

	<tt>-bO</tt> は <tt>spec</tt> ファイル中で記述したどの過程
	(タグ)まで作業を行なうかを指定するものです。
<descrip>
<tag><tt>-bp</tt></tag>
	<tt>&percnt;prep</tt> 過程まで、即ち、ソースを展開してパッチを
	当てるところまで作業を行ないます。

<tag><tt>-bl</tt></tag>
	<tt>&percnt;files</tt> で記述されたファイルのリストの検査を
	行ないます。

<tag><tt>-bc</tt></tag>
	<tt>&percnt;build</tt> 過程(通常は実行ファイルを <tt>make</tt>
	するところ)まで行ないます。

<tag><tt>-bi</tt></tag>
	<tt>&percnt;install</tt> 過程(通常 <tt>make install</tt> を行なう)
	までを行ないます。

<tag><tt>-bb</tt></tag>
	(<tt>&percnt;prep, &percnt;build, &percnt;install</tt> を行なって
	から)バイナリパッケージを作成します。

<tag><tt>-ba</tt></tag>
	(<tt>&percnt;prep, &percnt;build, &percnt;install</tt> を行なって
	から)バイナリ及びソースパッケージを作成します。
</descrip>
	
	一つだけ &lsqb;作成オプション&rsqb; について説明しておきます。
	<tt>--short-circuit</tt> をつけると、(<tt>-bc</tt> 又は
	<tt>-bi</tt> とともに用いた場合は)
	その前の過程をやらずにいきなり目的とする過程を実行します。


	さて、<tt>-bb</tt> または <tt>-ba</tt> を指定してパッケージを
	作成してみましたか？
	うまく行けば、
<itemize>
<item><tt>&lt;topdir&gt;/RPMS/&lt;arch&gt;</tt>
	にバイナリパッケージ(<tt>xxx.&lt;arch&gt;.rpm</tt>)が、
<item><tt>&lt;topdir&gt;/SRPMS</tt>
	にソースパッケージ(<tt>xxx.src.rpm</tt>)が 

</itemize>
	出来ている筈です。
	


<sect> 作成したパッケージのテスト
<p>
	<bf>「でも、お前の作ったのなんて、大丈夫なの?...」</bf>

	テストに関しては、RPM-HOWTO と重複が多くなるので、改めて
	多くを述べる事は致しませんが...

	究極のテストは、やはり全く異なるマシンにインストールして
	使用してみる事です。

	いくら(パッケージを作成した)自分のマシンにインストールして
	テストしても、(例え<tt>rpm -e</tt>したとしても、何度も
	何度も <tt>make install</tt>したマシンでは、設定ファイル
	等が残っていたりして)完全にはテストすることが出来ません。

	そ・こ・で...

	親しい Linuxer に「こんなのを作ってみたんだけど、使ってみない?」
	と(甘い言葉を囁いて)テストしてもらうのが良いのではないでしょうか?
	(当然の事ながら、複数の Linux box をお持ちの方は、
	自分の別のマシンにインストールしてみれば良い訳ですが。)

	しかし、まず友達に渡す前に、最低限
<tscreen>
<tt>rpm -qp --scripts &lt;PackageName&gt;</tt>
</tscreen>
	とやって、<tt>&percnt;pre及び&percnt;post</tt>インストールスクリプト
	でとてつもなく変な/愚かな事をやっていないか?位は確認しておかないと、
	友達をなくしますよ!!!


<sect> 依存性(dependencies)について
<p>

<sect1>依存性(dependencies)
<p>
	これは非常にばかげた例ですが、先程例に上げた 
	<tt>plain2-2.54-3.spec</tt>
	で作られるサブパッケージ
	<tt>plain2-docs-2.54-3.i386.rpm</tt> に含まれる
	ファイルは <tt>plain2</tt> で加工してはじめて
	TeX のファイルとなるため、
	<tt>plain2-2.54-3.i386.rpm</tt> (<tt>plain2</tt> 本体)が
	インストールされていなければなりません。
	このような場合には、<tt>spec</tt> ファイル中に
<tscreen>
<verb>
Requires:  plain2
</verb>
</tscreen>
	と記しておけば、「<tt>plain2-docs-2.54-3.i386.rpm</tt> を
	インストールするためには <tt>plain2</tt> というパッケージが
	インストールされていなくてはいけない」という依存性関係を明示
	しておく事が出来ます。
	もし <tt>plain2</tt> がインストールされていないのに
	<tt>plain2-docs</tt> をインストールしようとすると、
<tscreen>
<verb>
[root@Flux i386]# rpm -ivh plain2-docs-2.54-3.i386.rpm
failed dependencies:
        plain2 is needed by plain2-docs-2.54-3
</verb>
</tscreen>
	と表示され、インストールは行なわれません。(依存性関係を無視して
	無理矢理インストールしてしまう事も出来る事は出来ます。)
	(注 : この様に、サブパッケージで <tt>Requires:</tt> にメイン
	パッケージを指定する事も出来ます。)

	<tt>Requires:</tt> の指定にはバージョン番号を含める事も出来ます。
	例えば:
<tscreen>
<verb>
Requires: perl >= 5.003
</verb>
</tscreen>

	同時に複数のパッケージを <tt>Requires:</tt> に指定する事も出来ます:
<tscreen>
<verb>
Requires: perl >= 5.003, python
</verb>
</tscreen>
	(注 : 複数パッケージの区切りは `,' でも ` ' (空白)でも良いそうです。)

	ところで、RPM 中のバージョン番号の新旧判断アルゴリズムは大抵の
	場合うまく働きますが、β版である事を示すために <tt>b</tt> 
	が付けられている場合もあり、この時は例えば <tt>5.003b</tt> は
	<tt>5.003</tt> よりも新しいと判断されてしまいます。
	このような事態を回避するために、パッケージにシリアル番号を
	付けておく事が出来ます。
<tscreen>
<verb>
Serial: 19
</verb>
</tscreen>
	このシリアル番号を持つパッケージを <tt>Requires:</tt> で指定
	するには
<tscreen>
<verb>
Requires: perl =S 19
</verb>
</tscreen>
	とします。


<sect1> 仮想パッケージ
<p>
	ここで、あるパッケージを使用するにはなんらかの
	<tt>fortran</tt> コンパイラが必要であるが、コンパイラ自体は
	<tt>fort77</tt>(をコンパイラと呼ぶなら) でも <tt>g77</tt>
	でも良いという場合を想像してみましょう。
	こういう場合には、個々のパッケージ (<tt>fort77</tt> 又は
	<tt>g77</tt>) を指定する代わりに
	「なんらかの <tt>fortran</tt> コンパイラ」として仮想的な
	パッケージを <tt>Requires:</tt> に指定する事も出来ます:
<tscreen>
<verb>
Requires:  fortran
</verb>
</tscreen>
	この時は、<tt>fort77</tt> 又は <tt>g77</tt> パッケージに
<tscreen>
<verb>
Provides:  fortran
</verb>
</tscreen>
	という指定がなされていて、且つそれらのいずれがインストール
	されていれば、依存性が満たされ、これに依存するパッケージを
	正常にインストール(して使用)する事が出来ます。


<sect1> 依存性関係の自動的な追加
<p>
	しかし、便利な依存性関係も、いちいち全て <tt>Requires:</tt>
	で指定しなくてはならないとしたら、たまったもんではありません。
	また、そのパッケージが依存するパッケージをいちいち手で調べて追加
	していくのも容易ではありません。

	そこで、RPM は、パッケージのファイルリスト中に共有ライブラリ
	を必要とするものがあった場合は、(その <tt>so</tt> 名が)
	<tt>Requires:</tt> に指定されているものと見做してそのパッケージ
	の依存性リストに自動的に追加して行きます。
	また、逆にそのパッケージが供給する共有ライブラリの
	 <tt>so</tt> 名も自動的に追加されます。



<sect> アドバンスト・コース
<p>


<sect1> パッケージへの電子的署名
<p>

	RPM で作成したパッケージが本当に <tt>query</tt> により表示
	される人が作ったものかどうか、またパッケージが <tt>ftp</tt>
	等の際に損傷していないかを調べられるように、
	各パッケージには電子署名を付けておく事が出来ます。

	現在は (version 2.2.9) <tt>MD5, SIZE, PGP</tt> の署名を
	サポートしています。

	<tt>MD5, SIZE</tt> の署名は常に行なわれます。

	<tt>PGP</tt> 署名をする場合はオプション引数にて指定します。
	(<tt>PGP</tt> の鍵束はディフォルトでは <tt>&dollar;HOME/.pgp</tt> に
	置かれていると想定していますが、環境変数<tt>PGPPATH</tt> で、
	もしくは <tt>&dollar;HOME/.rpmrc</tt> ファイル中に <tt>pgp_path:</tt>
	という行を書いておく事によって変更する事が出来ます。)

	パッケージの作成と同時に <tt>PGP</tt> 署名をするには、オプション
	引数に <tt>--sign</tt> を付け足すだけです。

	既存のパッケージに <tt>PGP</tt> 署名をし直す場合は、
<tscreen>
<tt>rpm --resign &lt;package&gt;</tt>
</tscreen>
	とします。

	しかし、この場合は以前付けられていた署名は消去されてしまい
	ます。<newline>
	新たに <tt>PGP</tt> 署名を追加したい場合は、
<tscreen>
<tt>rpm --addsign &lt;package&gt;</tt>
</tscreen>
	とします。

	(でも、あなたの公開鍵を公開しておかないと、
	 他の人は確かめようがありませんよ!!!)


<sect>よくあるトラブル
<p>

<sect1>日本語環境で用いた場合に Seg.Fault する事への対策
<p>

<descrip>
<tag/Q :/
	JE 環境で <tt>rpm --help</tt> 等とすると
	<tt>Segmentation Fault</tt> を起こして、RPM が死んでしまう
	のですけれど...<newline>
	<tt>rpm -ivh &lt;package&gt;</tt> 等は正常に働きます。

<tag/A :/
	RPM は、多国語対応化するために
	<tt>GNU gettext utility</tt> を使って
	います。そして、環境変数 <tt>LANGUAGE, LC_CTYPE, LC_ALL, LANG</tt>
	を順番に調べて行き、いずれかが設定されていた場合は、
	対応する gettext の <tt>RPM.mo</tt> ファイルを
	<tt>/usr/lib/locale/&lt;lang&gt;/LC_MESSAGES/</tt> に読みに
	行きます。

	ところが、通常の日本語環境(JE)では、<tt>LANG=ja_JP.ujis</tt> に設定して
	いるので、<tt>/usr/lib/locale/ja_JP.ujis/LC_MESSAGES/RPM.mo</tt>
	を読みに行くと、そこに <tt>RPM.mo</tt> が無いために
	<tt>Segmentation Fault</tt>してしまう、という事になっているようです。

	従って、``<tt>export LANG=</tt>''とやって、<tt>LANG</tt> を
	空にしてみて <tt>RPM --help</tt> が正常に動作すれば、こういう
	問題ですので、
<tscreen>
<verb>
export LANGUAGE=C
</verb>
</tscreen>
	とやっておけば良い筈です。
	もしくは、日本語化した <tt>RPM.mo</tt>(筆者の一人が作成しました)
	を
<tscreen>
<verb>
/usr/lib/locale/ja/LC_MESSAGES/
</verb>
</tscreen>
	に置き、
<tscreen>
<verb>
export LANGUAGE=ja
</verb>
</tscreen>
	などとやっても解決できる筈です。
</descrip>

<sect1> /etc/rpmrc が無い!
<label id="EtcRpmrc">
<p>

<descrip>
<tag/Q :/
	RPM をアップグレードしたら <tt>/etc/rpmrc</tt> が入ってないのですが。

<tag/A :/
	恐らくバージョン 2.2.8 以降をお使いなのでしょう。
	バージョン 2.2.8 以降は、望ましいディフォルト設定値が
	<tt>/usr/lib/rpmrc</tt> 中に全て記述されているため、
	<tt>/etc/rpmrc</tt> は配付されなくなりました。
	勿論、自分で <tt>/etc/rpmrc</tt> を作成して設定を書いておく事は
	有効です。
</descrip>


<sect1> RPM をアップグレードした際にエラーが出る
<label id="TypoIn228">
<p>

<descrip>
<tag/Q :/
	RPM をアップグレードする際にエラーが表示されるのですが。

<tag/A :/
	バージョン 2.2.8 では、<tt>/usr/lib/rpmrc</tt> ファイル中に
	typo があり、
<tscreen>
<verb>
bad option 'arch_cnaon' at /usr/lib/rpmrc:50
</verb>
</tscreen>
	と怒られてしまいます。

	<tt>/usr/lib/rpmrc</tt> の上記 ``<tt>arch_cnaon</tt>'' となって
	いる箇所を ``<tt>arch_canon</tt>'' に訂正して下さい。
</descrip>

<sect>謝辞
<p>
	この文書を書く上で、多くの方の方からの協力を頂きました。
	ここに感謝の意を表したいと思います。

<descrip>

<tag><htmlurl url="mailto:ayamagat@phys.metro-u.ac.jp"
        name="山縣 敦 氏(山縣＠都立大さん)"></tag>

	本文書に記述した大部分の事柄の情報源となっている
	RPM-HOWTO の翻訳の労を取られるとともに、
	原稿を通してお読み下さった上で非常に有益な示唆・指摘を
	頂きました。

<tag><htmlurl url="mailto:densuke@tora.n.is.sci.toho-u.ac.jp"
        name="佐藤 大輔 氏(佐藤＠東邦大さん)"></tag>

	原稿をお読み頂き、非常に有益な示唆・指摘を頂きました。

<tag><htmlurl url="mailto:shin@ryukyu.ad.jp"
        name="瑞慶覧 辰 氏(``ず'' さん)"></tag>

	<tt>&percnt;patch</tt> マクロの隠れた機能に関する情報を
	お寄せ頂きました。

<tag>package-ML の皆さん</tag>

	本文書の元となる多くの貴重な情報及び経験をお寄せ下さいました。

<tag><htmlurl url="mailto:nisi@milford.tokai.jaeri.go.jp"
        name="西森 信行 氏"></tag>

	たまたま第一筆者の近くで Slackware を使っていたが為に、
	第一筆者の実験台とされ、
	文句も言わずに(筆者が耳を貸さなかっただけ？)
	数多くのテストを行なって下さいました。

</descrip>

</article>
