source: projects/Vine-manual/trunk/making-rpm.xml @ 114

Revision 114, 123.5 KB checked in by yasumichi, 15 years ago (diff)

Easy to understand the flow

Line 
1<?xml version="1.0"?>
2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
4<book id="making-rpm" lang="ja">
5
6<bookinfo>
7  <title>RPMパッケージの作成方法</title>
8  <authorgroup>
9    <author>
10      <firstname>Jun</firstname>
11      <surname>Nishii</surname>
12    </author>
13    <editor>
14      <surname>Akahoshi</surname>
15      <firstname>Yasumichi</firstname>
16    </editor>
17    <editor>
18      <firstname>Kazutaka</firstname>
19      <surname>HARADA</surname>
20    </editor>
21    <editor>
22      <firstname>Takuya</firstname>
23      <surname>Kobayashi</surname>
24    </editor>
25  </authorgroup>
26  <abstract>
27          <para>この文書は、Vine Linux 上で動くアプリケーションをRPMパッケージ化する方法を解説しています。</para>
28          <para>初めてRPMパッケージを作成する方を主な対象としておりますが、他のドキュメントでは分かりにくいあるいは触れられていない点に注意して説明していますので経験者にも参考になる点があります。</para>
29        <para>なお、RPMパッケージのインストール方法やシェルスクリプト、基本的なコマンドの使い方は省略しております。</para>
30        <!--para>間違いの指摘・コメント・要望等は、ML(メーリングリスト)や BTS(バグトラッキングシステム)で知らせていただければ、できるだけ反映していくつもりですので、ご協力をお願いします。また、specファイルを書く時にこういうことがわからなかったという意見や情報も募集中です。</para-->
31  </abstract>
32  <!--pubdate>2007/10/3</pubdate-->
33</bookinfo>
34
35<glossary id="mr-glossary">
36        <title>用語の解説</title>
37        <glossentry>
38                <glossterm>RPM Package Manager</glossterm>
39                <acronym>RPM</acronym>
40                <glossdef>
41                        <para>アプリケーションの安全なインストール、更新、削除などを目的とした強力なパッケージ管理システムです。</para>
42                </glossdef>
43        </glossentry>
44        <glossentry>
45                <glossterm>バイナリパッケージ</glossterm>
46                <glossdef>
47                        <para>展開すれば、そのまま実行可能な状態でアプリケーションに必要な全てのファイルがアーカイブされています。</para>
48                        <para>バイナリパッケージのファイル名は、<filename>name-version-release.arch.rpm</filename>という形式です。</para>
49                </glossdef>
50        </glossentry>
51        <glossentry>
52                <glossterm>ソースパッケージ</glossterm>
53                <acronym>SRPM</acronym>
54                <glossdef>
55                        <para>バイナリパッケージの作成に必要なソースやパッチ、specファイルがアーカイブされています。</para>
56                        <para>ソースパッケージのファイル名は、<filename>name-version-release.src.rpm</filename>という形式です。</para>
57                        <para><command>rpm <option>-ivh</option> <filename>hoge.src.rpm</filename></command> で<xref linkend="mr-directories"/>で解説するディレクトリに展開されます。</para>
58                </glossdef>
59        </glossentry>
60        <glossentry>
61                <glossterm>SPECファイル</glossterm>
62                <acronym>SPEC</acronym>
63                <glossdef>
64                        <para>ソースからパッケージを作成するための手順やパッケージの情報を記述するファイル。</para>
65                        <para>SPECファイルのファイル名は、<filename>name.spec</filename>という形式です。</para>
66                        <para>この文書では主にSPECファイルの書き方を説明します。</para>
67                </glossdef>
68        </glossentry>
69        <glossentry>
70                <glossterm>パッチファイル</glossterm>
71                <acronym>パッチ</acronym>
72                <glossdef>
73                        <para>オリジナルのソースに修正を加えるため、差分情報を記述したファイル。</para>
74                        <para>ファイル名は、<filename>name.patch</filename>という形式です。</para>
75                </glossdef>
76        </glossentry>
77</glossary>
78
79<chapter id="mr-setup">
80        <title>環境設定</title>
81        <sect1 id="rpmmacros">
82                <title>設定ファイル</title>
83                <para>RPMパッケージ(以下、パッケージ)作成環境の設定ファイルは、ユーザのホームディレクトリ(以下、<filename class="directory">~/</filename>)にある<filename>.rpmmacros</filename>です。</para>
84                <para>Vine Linuxをインストールしたままの状態であれば、下記の様になっています。</para>
85
86<screen>
87%_topdir ${HOME}/rpm
88
89# gpg signing
90# %_signature gpg
91# %_gpg_name Your Name &lt;your mail address&gt;
92</screen>
93
94                <para>既に削除してしまった場合は、<filename>/etc/skel/.rpmmacros</filename>から<filename class="directory">~/</filename>にコピーします。</para>
95                <para>また、内容を変更している場合は、次節以降を参考に必要な設定が漏れていないか確認してください。</para>
96                <important>
97                        <title>パッケージ作成は一般ユーザで行いましょう</title>
98                        <para>パッケージ作成をroot権限で行うとシステムを破壊する場合があります。</para>
99                        <para>そのため設定ファイルは、あなたが通常使用している一般ユーザのホームディレクトリに用意してください。</para>
100                </important>
101        </sect1>
102
103        <sect1 id="mr-directories">
104                <title>パッケージ作成に必要なディレクトリの準備</title>
105                <para>パッケージ作成に必要なディレクトリは、<filename class="directory">~/.rpmmacros</filename><varname>%_topdir</varname>で設定されたディレクトリに以下の名前で配置します。</para>
106                <table>
107                        <title>ディレクトリ名と使用目的</title>
108                        <tgroup cols="2">
109                                <thead>
110                                        <row>
111                                                <entry>ディレクトリ名</entry>
112                                                <entry>使用目的</entry>
113                                        </row>
114                                </thead>
115                                <tbody>
116                                        <row>
117                                                <entry>BUILD</entry>
118                                                <entry>パッケージ作成時にソースの展開や make を実行するための作業用ディレクトリです。</entry>
119                                        </row>
120                                        <row>
121                                                <entry>RPMS/arch</entry>
122                                                <entry>作成されたバイナリパッケージ(<filename>*.rpm</filename>)が格納されます。対象となる architecture によって arch の部分が、i386・ppc などになります。なお、architecture に依存しないパッケージは、RPMS/noarch に格納されます。</entry>
123                                        </row>
124                                        <row>
125                                                <entry>SRPMS</entry>
126                                                <entry>作成されたソースパッケージ(<filename>*.srpm</filename>)が格納されます。</entry>
127                                        </row>
128                                        <row>
129                                                <entry>SPECS</entry>
130                                                <entry>パッケージ作成の指示書であるspecファイル(<filename>*.spec</filename>)を格納します。</entry>
131                                        </row>
132                                        <row>
133                                                <entry>SOURCES</entry>
134                                                <entry>パッケージ化するアプリケーションのソースやパッチを格納します。</entry>
135                                        </row>
136                                </tbody>
137                        </tgroup>
138                </table>
139
140                <para>Vine Linuxをインストールしたままの状態であれば、<varname>%_topdir</varname><literal>${HOME}/rpm</literal>に設定されており、上記のディレクトリも<filename class="directory">~/rpm</filename>の中に用意されています。</para>
141                <para>以下、上で説明したディレクトリを単にBUILDとか、SOURCESと呼びます。</para>
142
143                <important>
144                        <title>必要なディレクトリが存在しない場合</title>
145                        <para>もし必要なディレクトリが無い、または削除してしまった場合は、端末上で <command>mkrpmdir</command> コマンドを実行してください。</para>
146                        <screen>$ <command>mkrpmdir ~</command></screen>
147                        <para>このコマンドにより<filename class="directory">~/rpm</filename>配下に必要なディレクトリを作成できます。</para>
148                        <para>なお、<command>mkrpmdir</command> コマンドが見つからない場合は、vutilsパッケージをインストールしてください。</para>
149                </important>
150        </sect1>
151
152        <sect1 id="mr-gpgsign">
153                <title>パッケージ署名の設定</title>
154                <para>VineSeed および VinePlus では、原則として GnuPG による署名を行っていただきます。(GnuPG 鍵の作成方法は web などを参照してください。 )</para>
155                <para><filename>~/.rpmmacros</filename>に以下の記述があるか確認して下さい。</para>
156
157<screen>
158# gpg signing
159# %_signature gpg
160# %_gpg_name Your Name &lt;your mail address&gt;
161</screen>
162
163                <para>使用する GnuPG 鍵に合わせて、Your Nameはあなたの名前(ローマ字表記)、your mail addressはあなたのメールアドレスに変更して下さい。</para>
164                <para>なお、パッケージ作成時には署名のためのオプションを与える必要がありますが、ファイル <filename>~/.popt</filename> に以下の記述を追加しておくとオプションを省略可能になります。</para>
165
166<screen>
167rpm     exec --ba       rpmb -ba --sign
168rpm     exec --bb       rpmb -bb --sign
169rpm     exec --bs       rpmb -bs --sign
170rpm     exec --ta       rpmb -ta --sign
171rpm     exec --rebuild  rpmb --rebuild --sign
172rpmbuild alias --rebuild        --rebuild --sign
173</screen>
174
175        </sect1>
176</chapter>
177
178<chapter id="mr-preparation">
179        <title>パッケージ作成毎の準備</title>
180        <para>この章から、実際にパッケージ作成の手順を説明していきます。</para>
181        <sect1 id="mr-correct-info">
182                <title>パッケージ化対象アプリケーションの情報収集</title>
183                <para>次節以降の準備のためにパッケージ化しようとしているアプリケーションの情報を確認します。</para>
184                <para>最初にパッケージ化するアプリケーションが、既にVinePlus(VineSeed)向けに用意されていないか確認します。</para>
185
186                <example>
187                        <title>パッケージの存在を確認する</title>
188
189<screen>
190# apt-get update
191$ apt-cache search name
192</screen>
193
194                </example>
195
196                <note>
197                        <title>パッケージが存在した場合</title>
198                        <para>パッケージが存在していても不具合がある場合やバージョンアップする場合には、パッケージを修正する必要があります。</para>
199                        <para>この様な場合には、<command>apt-get source name</command>などとして既存のSPECファイルを取得し、修正するようにしてください。</para>
200                </note>
201
202                <para>パッケージが存在しないかバージョンアップする場合は、ダウンロードしたソースを<filename class="directory">SOURCES</filename>に保存してください。</para>
203
204                <para>また、以下の情報についても配布元のサイトやソースに含まれる <filename>README</filename> などのファイルを見て確認してください。</para>
205                <itemizedlist>
206                        <listitem><para>ビルド・インストールの方法</para></listitem>
207                        <listitem><para>ビルド・実行に必要なライブラリやアプリケーションとそのバージョン</para></listitem>
208                        <listitem><para>実行時に参照される設定ファイル</para></listitem>
209                </itemizedlist>
210        </sect1>
211        <sect1 id="install-library">
212                <title>アプリケーションのビルド・実行に必要なパッケージのインストール</title>
213                <para>アプリケーションのビルド・実行に必要なライブラリやアプリケーションがあれば、それらのパッケージがインストールされているか確認してください。</para>
214                <para>特にライブラリでは、ビルドにのみ必要なファイルがサブパッケージ(通常はname-devel)として用意されている場合があり、注意が必要です。</para>
215                <para>また、複数のメジャーバージョンを共存させるためにパッケージ名にメジャーバージョンが追加されている場合があります。</para>
216                <para>パッケージによっては、名前の一部が省略されている場合もあります。</para>
217                <example>
218                        <title>gtk+-2.xを必要とする場合</title>
219                        <para>
220                                パッケージのビルドには、gtk2-develパッケージがインストールされている必要があります。
221                                (この例では、gtk+ の + が省略されている上、gtk+-1.xと共存するためにパッケージ名にメジャーバージョンである 2 が追加されています。)
222                        </para>
223                </example>
224                <para>なお、必要なライブラリ等のパッケージが用意されていない場合は、先にパッケージ化してください。</para>
225        </sect1>
226        <sect1 id="prepare-patch">
227                <title>パッチの用意</title>
228                <para>以下の様な場合には、パッチを用意します。</para>
229                <itemizedlist>
230                        <listitem><para>必要なライブラリが全てインストールされているにも関わらずビルドに失敗する</para></listitem>
231                        <listitem><para>実行時の不具合がある</para></listitem>
232                        <listitem><para>アプリケーションのインストール先を変更できる仕組みになっていない</para></listitem>
233                        <listitem><para>設定ファイルをVine Linux向けにカスタマイズしたい</para></listitem>
234                </itemizedlist>
235                <para>ビルドや実行に関する不具合は、既に配布元でも承知して公式のパッチが用意されている場合もあります。</para>
236                <para>その場合は、公式のパッチをダウンロードして<filename class="directory">SOURCES</filename>に保存します。</para>
237                <note>
238                        <title>自分でパッチを作成する場合の手順</title>
239                        <orderedlist>
240                                <listitem><para>アプリケーションのソースを展開</para></listitem>
241                                <listitem>
242                                        <para>展開されたディレクトリをコピー</para>
243                                        <screen>$ cp -R srcdir srcdir.org</screen>
244                                </listitem>
245                                <listitem><para>コピー元のディレクトリ(srcdir)以下のファイルに必要な修正を加える</para></listitem>
246                                <listitem>
247                                        <para>パッチを作成する</para>
248                                        <screen>$ diff -uNr srcdir.org/ srcdir/ &gt; <replaceable>patchname</replaceable>.patch</screen>
249                                </listitem>
250                                <listitem><para>patchname.patchを<filename class="directory">SOURCES</filename>に保存</para></listitem>
251                        </orderedlist>
252                </note>
253        </sect1>
254</chapter>
255
256<chapter id="make-spec">
257        <title>SPECファイルの記述</title>
258        <para>いよいよ、パッケージ作成の肝となるSPECファイルの記述について説明します。</para>
259        <para>SPECファイルの内容は、以下の主要部分に分類できます。</para>
260        <itemizedlist>
261                <listitem><para>パッケージ情報</para></listitem>
262                <listitem><para>パッケージの作成やインストール等の手順(スクリプト部)</para></listitem>
263                <listitem><para>インストールされるファイルの一覧</para></listitem>
264                <listitem><para>パッケージの変更履歴</para></listitem>
265        </itemizedlist>
266        <important>
267                <title>SPECファイルの文字コード</title>
268                <para>SPECファイルの文字コードは<emphasis>UTF-8</emphasis>にしてください。</para>
269        </important>
270        <note>
271                <title>マクロの定義</title>
272                <para>SPECファイルの冒頭にパッケージのバージョンなど頻繁に使用されるものをマクロとして定義しておくと後々の修正が楽になります。</para>
273                <para><screen>%define   macro   literal</screen>ようにするとパッケージ作成時に<varname>%{macro}</varname>と書かれた部分を<literal>literal</literal>に置換して処理します。</para>
274                <para><xref linkend="common-macro" />も参照して下さい。</para>
275        </note>
276        <sect1 id="package-info">
277                <title>パッケージ情報の記述</title>
278                <para><command>rpm</command>コマンドでパッケージに関する問い合わせを実行した場合に表示される情報やパッケージの依存情報などを記述します。</para>
279                <example id="ex-pkginfo">
280                        <title>パッケージ情報の記述例</title>
281                        <para>以下にパッケージ情報の記述例を示します。(#を記述すると#から行末までがコメントとして扱われます。)</para>
282
283                        <screen>
284# 基本情報
285Summary: hoge is a harehare horehore
286Summary(ja): hoge は harehare な horehore です。
287Name: hoge
288Version: 1.1
289Release: 1%{?_dist_release}
290License: distributable
291Group: Applications/Internet
292Vendor: Project Vine
293Distribution: Vine Linux
294Packager: yourid,otherid
295
296# パッケージの作成時に必要となる情報
297Source: %{name}-%{version}.tar.gz
298Patch: hoge.patch
299BuildRoot: %{_tmppath}/%{name}-%{version}-root
300
301# 依存情報
302Requires:       piyo
303BuildRequires:  piyo-devel
304
305# 詳しい説明
306%description
307Hoge is a harehare horehore and convenient for fugafuga.
308Enjoy!
309
310%description -l ja
311hoge は harehare な horehore で、fugafuga するときなどとても便利なツー
312ルです。みんなでなかよく使いましょう。
313                        </screen>
314                       
315                </example>
316
317                <para>基本情報から依存情報の部分は、1行につき1つの情報を記述する構成となっています。</para>
318                <para>各行は「Summary:」のようにタグとそれに続くコロンで始まり、さらにタグに対応する情報が続く形式になっています。</para>
319                <para><xref linkend="spec-basic-info" />の情報は、<command>rpm -qi</command>などでパッケージに関して問い合わせを行った場合に表示されます。</para>
320
321                <table id="spec-basic-info">
322                        <title>基本情報で使用されるタグ</title>
323                        <tgroup cols="2">
324                                <thead><row><entry>タグ</entry><entry>内容</entry></row></thead>
325                                <tbody>
326                                        <row>
327                                                <entry>Summary</entry>
328                                                <entry>パッケージの簡単な説明を英語で記述します。</entry>
329                                        </row>
330                                        <row>
331                                                <entry>Summary(ja)</entry>
332                                                <entry>Summaryを日本語で翻訳します。</entry>
333                                        </row>
334                                        <row>
335                                                <entry>Name</entry>
336                                                <entry>パッケージの名前です。定義以降、%{name}というマクロで参照できます。</entry>
337                                        </row>
338                                        <row>
339                                                <entry>Version</entry>
340                                                <entry>パッケージのバージョンです。定義以降、%{version}というマクロで参照できます。</entry>
341                                        </row>
342                                        <row>
343                                                <entry>Release</entry>
344                                                <entry>冒頭の数字は同じバージョンで何回目のリリースになるかを意味します。%{?_dist_release}は、vl5の様に対象となるVine Linuxのバージョンに置き換えられます。定義以降、%{release}というマクロで参照できます。</entry>
345                                        </row>
346                                        <row>
347                                                <entry>License</entry>
348                                                <entry>アプリケーションのライセンス</entry>
349                                        </row>
350                                        <row>
351                                                <entry>Group</entry>
352                                                <entry>アプリケーションの種類。<xref linkend="group-list" />を参照して下さい。</entry>
353                                        </row>
354                                        <row>
355                                                <entry>Packager</entry>
356                                                <entry>パッケージメンテナ。BTS.VineLinux.Orgへのログインユーザ名を使用してください。複数のメンテナがいる場合、カンマで区切ります。</entry>
357                                        </row>
358                                        <row>
359                                                <entry>Distribution</entry>
360                                                <entry>VinePlusやVineSeedのパッケージは、Vine Linuxを指定します。</entry>
361                                        </row>
362                                        <row>
363                                                <entry>Vendor</entry>
364                                                <entry>作成したrpmパッケージに関する責任を負うVendor名です。VinePlusやVineSeedのパッケージは、Project Vineを指定します。</entry>
365                                        </row>
366                                        <row>
367                                                <entry>Url</entry>
368                                                <entry>アプリケーションの情報を提供しているURL</entry>
369                                        </row>
370                                </tbody>
371                        </tgroup>
372                </table>
373
374                <table>
375                        <title>パッケージ作成時に必要となるタグ</title>
376                        <tgroup cols="2">
377                                <thead><row><entry>タグ</entry><entry>内容</entry></row></thead>
378                                <tbody>
379                                        <row>
380                                                <entry>Source</entry>
381                                                <entry>
382                                                        <para>パッケージ化するアプリケーションのソースファイル名。</para>
383                                                        <para>ソースの入手先を明示するために、URL形式で記述することも可能。</para>
384                                                        <para>複数のソースファイルがあるときはSource0、Source1というふうに番号をふって列挙します。(Source0 と Source は同じ意味です)</para>
385                                                        <para>Souce数字 で指定したファイルは %{SOURCE数字} というマクロとして <xref linkend="making-rpm-5-2" />の %prep や %install などの部分で利用できます。</para>
386                                                </entry>
387                                        </row>
388                                        <row>
389                                                <entry>Patch</entry>
390                                                <entry>
391                                                        <xref linkend="prepare-patch" />で用意したパッチファイルを指定します。
392                                                        書式はSourceと同じです。複数あるときにも、Sourceと同様に番号をふって列挙できます。
393                                                </entry>
394                                        </row>
395                                        <row>
396                                                <entry>BuildRoot</entry>
397                                                <entry>仮想インストールのためのディレクトリ名を書きます。直接ディレクトリ名を書くのではなく、例のようにマクロを利用してください。</entry>
398                                        </row>
399                                </tbody>
400                        </tgroup>
401                </table>
402
403                <para>パッケージの依存情報など他のパッケージとの関係を示すには、<xref linkend="dependency-tag" />のようなタグを使用します。</para>
404                <table id="dependency-tag">
405                        <title>パッケージの依存関係を扱うタグ</title>
406                        <tgroup cols="2">
407                                <thead><row><entry>タグ</entry><entry>内容</entry></row></thead>
408                                <tbody>
409                                        <row>
410                                                <entry>Requires</entry>
411                                                <entry>作成しているrpmパッケージが動作するのに必要なパッケージ名</entry>
412                                        </row>
413                                        <row>
414                                                <entry>BuildRequires</entry>
415                                                <entry>パッケージの作成時に必要となるパッケージ名</entry>
416                                        </row>
417                                        <row>
418                                                <entry>Conflicts</entry>
419                                                <entry>共存できないパッケージ名</entry>
420                                        </row>
421                                        <row>
422                                                <entry>Provides</entry>
423                                                <entry>作成するパッケージが他のパッケージの代替となる場合、そのパッケージ名を記述</entry>
424                                        </row>
425                                        <row>
426                                                <entry>Obsoletes</entry>
427                                                <entry>パッケージをインストールする際にアンインストールしたいパッケージ名</entry>
428                                        </row>
429                                        <row>
430                                                <entry>BuildConflicts</entry>
431                                                <entry>パッケージ作成時にはインストールしておけないパッケージ名</entry>
432                                        </row>
433                                </tbody>
434                        </tgroup>
435                </table>
436                <para>&lt;, &gt;, =, &gt;=, &lt;=といった演算子を使うとパッケージのバージョン、リリース番号を限定することもできます。</para>
437                <example>
438                        <title>ghostscriptのバージョン5.10がパッケージの動作に必要な場合</title>
439                        <screen>Requires: ghostscript = 5.10</screen>
440                </example>
441                <example>
442                        <title>gtk2-develのバージョン2.16.0以上がパッケージの作成に必要な場合</title>
443                        <screen>BuildRequires: gtk2-devel &gt;= 2.16.0</screen>
444                </example>
445                <important>
446                        <title>演算子の両側には必ずスペースやタブを入れてください。</title>
447                        <para>演算子の両側にスペースやタブを入れない場合、パッケージ名からバージョンまでが一つのパッケージ名として認識されてしまいます</para>
448                        <para>例えば、<screen>BuildRequires: gtk2-devel&gt;=2.16.0</screen>とすると「gtk2-devel&gt;=2.16.0」というパッケージ名だと認識してしまいます。</para>
449                </important>
450                <para>複数のパッケージが関係する場合は、カンマ(,)やスペースで区切って列挙するか、複数行に分けて記述できます。複数行に分ける場合は、各行にタグが必要です。</para>
451                <para>パッケージがいくつかのグループに分類できる場合には、複数行に書いた方がわかりやすくなります。</para>
452                <example>
453                        <title>一行で記述する例</title>
454                        <screen>Requires: ghostscript &gt;= 5.10, ghostscript-fonts, VFlib = 2.24</screen>
455                </example>
456                <example>
457                        <title>一行で記述する例</title>
458
459<screen>
460Requires: ghostscript &gt;= 5.10, ghostscript-fonts, VFlib = 2.24
461Requires: tetex, tetex-extra
462</screen>
463
464                </example>
465
466
467                                        <!--row>
468                                                <entry>%description</entry>
469                                                <entry>このタグの下に、rpmパッケージの解説を英語で書きます。必須です。</entry>
470                                        </row>
471                                        <row>
472                                                <entry>%description -l ja</entry>
473                                                <entry>このタグの下に、rpmパッケージの解説を日本語で書きます。できる限り、記述してください。</entry>
474                                        </row-->
475        </sect1>
476
477        <sect1 id="making-rpm-5-2">
478                <title>スクリプト部</title>
479                <para>
480                        データ定義部の次の部分は、以下のような%が頭に付くタグからはじまる、
481                        一連のscriptで構成されます。重要なのは、各タグから始まる次のタグの前までの部分は、
482                        独立したbashスクリプトとして実行されるということです。
483                        (注:以下で、%setup, %patchはスクリプトのはじまりを表すタグではなく、
484                        スクリプト中で記述を簡略するためのマクロです。)</para>
485
486                <para>より正確には、各タグが現れた時に #!/bin/sh -e
487                        が起動され(Vine Linuxでは/bin/shは/bin/bashにsym.linkされてる)、
488                        各環境変数(RPM_SOURCE_DIRやRPM_PACKAGE_NAMEなど)が定義された後、
489                        次のタグが出てくるまで、記述されているスクリプトが実行されます。</para>
490
491                <variablelist>
492                        <varlistentry>
493                                <term>%prep</term>
494                                <listitem><para>
495                                                ソースのmakeやインストール作業前の準備の開始を示すタグです。
496                                                以下で説明する%setup,%patchなどのマクロを用いたり、
497                                                シェルスクリプトを記述して、ソースの展開などを行います。
498                                                ここで、
499<screen>
500%prep
501rm -rf ${RPM_BUILD_ROOT}
502</screen>
503                                                として、${RPM_BUILD_ROOT}(先のBuildRootで指定したディレクトリ)
504                                                を掃除することが多いです。ただし、このときには、
505                                                BuildRootの設定には十分気をつけて下さい(何故かわかりますね?)
506                                </para></listitem>
507                        </varlistentry>
508                        <varlistentry>
509                                <term>%setup</term>
510                                <listitem><para>
511                                                %prepからはじまるスクリプト中で、ソースを展開するためのマクロです。
512                                                %setupとオプションなしで書くと、以下が順に行われます。</para>
513                                        <orderedlist>
514                                                <listitem><para>
515                                                                <xref linkend="mr-directories" />で指定したディレクトリBUILDにcdする。
516                                                </para></listitem>
517                                                <listitem><para>
518                                                                指定ディレクトリ(-nで指定できる。デフォルトのディレクトリ名は、
519                                                                ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}、後述)
520                                                                がカレント・ディレクトリ(BUILD)に存在すれば消去する。
521                                                </para></listitem>
522                                                <listitem><para>
523                                                                Sourceで指定したtar.gzのソースを展開する。
524                                                </para></listitem>
525                                                <listitem><para>指定ディレクトリ(2の指定ディレクトリ名と同じ)にcdする。
526                                                </para></listitem>
527                                                <listitem><para>
528                                                                以下を実行する。</para>
529<screen>
530chown -R root .
531chgrp -R root .
532chmod -R a+rX,g-w,o-w .
533</screen>
534                                                        <para>(注:一般userがrpmをbuildするときには、chown root,
535                                                                chgrp rootは実行権限がないので行われない。
536                                                                一般userでbuildするときには、
537                                                                %filesの%attrでファイルの属性設定を行う。後述)
538                                                </para></listitem>
539                                        </orderedlist>
540                                        <para>
541                                                hoge-1.1.tar.gzを展開したときに、hoge-1.1/というディレクトリができるなら、
542                                                オプションをつけなくても以上の作業が行われますが、例えば、
543                                                hoge/というディレクトリができるなら、このディレクトリの下にcdできるように、
544                                                <screen>%setup -n hoge</screen>
545                                                または、
546                                                <screen>%setup -n ${RPM_PACKAGE_NAME}</screen>
547                                                と指定します。
548                                        </para>
549                                        <para>
550                                                複数のソースがあるときには以下に述べるオプション-aや-bを使います。
551                                                例えばSource、Source1、Source2の3つがあるときには、
552                                                <screen>%setup -a 1 -a 2 -n hoge</screen>
553                                                などとします。(以下のオプションの指定参照。)
554                                        </para>
555                                        <para>
556                                                この%setupにはさまざまなオプションがありますが、
557                                                代表的なものを以下に示します。
558                                        </para>
559                                        <variablelist>
560                                                <varlistentry>
561                                                        <term>-n &lt;ディレクトリ名&gt;</term>
562                                                        <listitem><para>
563                                                                        %setupを実行した後(もしくは前)にcdするディレクトリ名(name)を指定する。
564                                                                        このオプションを省略したときの、デフォルトのディレクトリ名は、
565                                                                        ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}。
566                                                        </para></listitem>
567                                                </varlistentry>
568                                                <varlistentry>
569                                                        <term>-c</term>
570                                                        <listitem><para>
571                                                                        指定ディレクトリ(上の-nオプションで指定したディレクトリ)
572                                                                        を作成し(create)、そこにcdした後にソースの展開をします。
573                                                        </para></listitem>
574                                                </varlistentry>
575                                                <varlistentry>
576                                                        <term>-a &lt;#&gt;</term>
577                                                        <listitem><para>
578                                                                        Source0を展開した後、
579                                                                        指定ディレクトリ(上と同じ)にcdした(after)、
580                                                                        #番目のソース(Source#)の展開をします。
581                                                                        %setup -a 2 -a 3 と複数-aオプションが指定された時には、
582                                                                        Source0 が展開された後、指定ディレクトリに cd し、
583                                                                        Source2、Source3を展開します。
584                                                                        (Source0の展開は最初の一回だけです。)
585                                                        </para></listitem>
586                                                </varlistentry>
587                                                <varlistentry>
588                                                        <term>-b &lt;#&gt;</term>
589                                                        <listitem><para>
590                                                                        Source0を展開した後、
591                                                                        指定ディレクトリ(上と同じ)にcdする前に(before)、
592                                                                        #番目に指定されてるソース(Source#)の展開をします。
593                                                        </para></listitem>
594                                                </varlistentry>
595                                                <varlistentry>
596                                                        <term>-D</term>
597                                                        <listitem><para>
598                                                                        先に述べたように、%setupは、まず、指定ディレクトリ(上と同じ)が、
599                                                                        ディレクトリBUILDの下にあるかどうかをチェックして、もし存在していたら、
600                                                                        それを削除してから、ソースの展開などの作業を行います。
601                                                                        %setupを複数回呼びたい場合、
602                                                                        2回目に%setupを呼んだ時に最初の%setupで展開したディレクトリを削除されては困ります。
603                                                                        この-Dオプションは、このような削除を行わないようにします。(あまり使いません)
604                                                        </para></listitem>
605                                                </varlistentry>
606                                                <varlistentry>
607                                                        <term>-T</term>
608                                                        <listitem><para>
609                                                                        ソースの展開を行いません。先に述べたように、
610                                                                        オプション指定を -a 2 や -b 2 とすると、
611                                                                        Source0とSource2で指定したものが展開されます。
612                                                                        Source2だけを展開したいときには、このオプションを使って、
613                                                                        <screen>%setup -T -a 2</screen>
614                                                                        とします。また、
615                                                                        <screen>%setup -T -c hoge</screen>
616                                                                        とすると、パッケージの展開は行わず、ディレクトリhogeを作って、
617                                                                        そこにcdします。
618                                                        </para></listitem>
619                                                </varlistentry>
620                                                <varlistentry>
621                                                        <term>-q</term>
622                                                        <listitem><para>
623                                                                        ソースの展開のとき、展開中の情報を表示しません。
624                                                                        たとえば tar での展開の時に、-q 無しだと tar xvvf、-q 有りだと tar xf のように変わります。
625                                                        </para></listitem>
626                                                </varlistentry>
627                                        </variablelist>
628
629                                        <variablelist>
630                                                <varlistentry>
631                                                  <listitem><para>
632                                                      次のように tar.gz ではないファイルが Source0 となる場合があります。
633                                                      <screen>Source0: hoge-%{version}.lzh</screen>
634                                                      tar.gz ではないので、%setup では展開できません。
635                                                </para>
636                                                <para>
637                                                        このような場合には、まず %setup の -Tオプション を利用して作業ディレクトリに移動します。
638                                                        %setup のあとには、bash script を書いて作業を行うことができるので、
639                                                        通常のコマンドで Source0 のファイルを展開します。
640                                                        <screen>%setup -T hoge-%{version}
641lha x %{SOURCE0}</screen>
642                                                </para>
643                                                <para>
644                                                        %{SOURCE0} のかわりに ${RPM_SOURCE_DIR}とファイル名を用いて
645                                                        <screen>%setup -T hoge-%{version}
646lha x ${RPM_SOURCE_DIR}/hoge.lzh</screen>
647                                                        とすることもできます。
648                                                </para></listitem>
649                                                </varlistentry>
650                                                <varlistentry>
651                                                        <listitem><para>
652                                                                次のように tar.gz などでは無いファイルが Source2 としてあるということがあります。
653                                                                <screen>Source0: hoge-%{version}.tar.gz
654Source1: hoge-additional-%{version}.tar.gz
655Source2: how-to-use-hoge.txt</screen>
656                                                        </para>
657                                                        <para>
658                                                                こういった場合には、Source0 と Source1 を %setup で展開したあとで、<command>installコマンド</command>などで、Source2 に対応するマクロ %{SOURCE2} を処理します。
659                                                        </para>
660                                                        <para>%setup で展開するのと同じ処理をしたければ、
661                                                                <screen>%setup -q -a 1
662%{__install} -m 644 %{SOURCE2} .</screen>
663                                                                のようにします。
664                                                        </para>
665                                                        <para>
666                                                                %setup で Source0 を展開してできたディレクトリ BUILD/hoge-%version/  に移動しているので、<command>installコマンド</command> で . (カレントディレクトリ<footnote><para>current directory, 現在のディレクトリ</para></footnote>) を指定すると . は BUILD/hoge-%version/ となっているので、BUILD/hoge-%version/に Source2 が install されます。
667                                                        </para>
668                                                        <para>
669                                                                他のファイルと同じように BUILD/hoge-%version/ にあるので %doc として指定するのもそのままできます。
670                                                                <screen>%files
671%doc how-to-use-hoge.txt</screen>
672                                                        </para>
673                                                        <para>
674                                                                %{SOURCE2} といったマクロは %doc のところでは使えないので、%doc %{SOURCE2} とすることはできません。
675                                                        </para></listitem>
676                                                </varlistentry>
677
678                                                <varlistentry>
679                                                        <listitem><para>
680                                                                lha や unzip など、特別なコマンドが必要になる場合は、
681                                                                BuildRequires(prep): で指定します。
682                                                        </para></listitem>
683                                                </varlistentry>
684                                        </variablelist>
685                                </listitem>
686                        </varlistentry>
687
688                        <varlistentry>
689                                <term>%patch</term>
690                                <listitem><para>
691                                                %prepからはじまるスクリプト中で、patchをあてるためのマクロとしてはたらきます。
692                                                例のように書くと、
693                                                <screen>patch -p1 -s &lt; ${RPM_SOURCE_DIR}/&lt;Patchで指定したファイル&gt;</screen>
694                                                と同じことをするので、%patchを使うかわりに%setupのあとで上のように書いてもいいです。
695                                                オプションなしで%patchと書くと、
696                                                <screen>patch -p0 -s &lt; ${RPM_SOURCE_DIR}/&lt;Patchで指定したファイル&gt;</screen>
697                                                が起動されます。%patchは%setupからはじまるスクリプトに含まれる、
698                                                単なるマクロとしてはたらきます。
699                                                Sourceと同様に、Patch0, Patch1,...と複数の設定に対して、
700<screen>
701%patch0 -p1
702%patch1 -p1
703</screen>
704                                                と実行することも出来ます。%patchには-b &lt;name&gt;
705                                                (バックアップ・ファイルの拡張子指定、デフォルトは.orig)などのオプ
706                                                ションがあります。
707                                </para></listitem>
708                        </varlistentry>
709
710                        <varlistentry>
711                                <term>%build</term>
712                                <listitem><para>
713                                                ソースをmakeするスクリプトの開始であることを示し、また、
714                                                %setupで指定したディレクトリにcdするマクロとしてはたらきます。
715                                                以下には、makeを行うときの手順をスクリプトとして書きます。
716                                </para></listitem>
717                                <listitem><para>
718                                                ここでの処理で必要となるパッケージ等は、
719                                                BuildRequires(build): で指定します。
720                                </para></listitem>
721                        </varlistentry>
722
723                        <varlistentry>
724                                <term>%install</term>
725                                <listitem><para>
726                                                ファイルをinstallするスクリプトの開始であることを示し、また、
727                                                %setupで指定したディレクトリにcdするマクロとしてはたらきます。
728                                                以下には、installを行うときの手順を示します。
729                                                データ定義部のBuildRootで設定したディレクトリ(${RPM_BUILD_ROOT})
730                                                の下に全てのファイルがインストールされるように、工夫しましょう。
731                                                Makefileが短いときには、修正してpatchをつくるかわりに、ここに、
732                                                cp, installコマンド等を用いたinstallスクリプトを書くのも一手です。
733                                        </para>
734                                        <para>
735                                                %setup のところと同じように、マクロ %{SOURCE数字} を使って Source: で指定したファイルを直接インストールすることもできます。
736                                                <screen>%{__install} -m 644 %{SOURCE2} %{buildroot}/where/there/</screen>
737                                        </para>
738                                        <para>
739                                                なお、rpm-3.0.5以降では、インストールされたバイナリは
740                                                rpmパッケージにする段階で自動的にstripされますので、
741                                                %installでbinaryのstripを行う必要はありません。
742                                </para></listitem>
743                                <listitem><para>
744                                                ここでの処理で必要となるパッケージ等は、
745                                                BuildRequires(install): で指定します。
746                                </para></listitem>
747                        </varlistentry>
748
749                        <varlistentry>
750                                <term>%check</term>
751                                <listitem><para>
752                                                install が正しく実行されたかをcheckするスクリプトの開始であることを示します。
753                                                %setupで指定したディレクトリにcdするマクロとしてはたらきます。
754                                                以下には、make test や make check などを実行するときの手順を示します。
755                                        </para>
756                                        <para>
757                                                GNOME などが利用する desktopファイルの書式チェックなどを行うこともできます。
758                                                <xref linkend="add_to_gnome_menu" />を参照してください。
759                                        </para>
760                                        <para>
761                                                rpm-4.2以降で実装された機能です。
762                                </para></listitem>
763                                <listitem><para>
764                                                ここでの処理で必要となるパッケージ等は、
765                                                BuildRequires(install): で指定します。
766                                </para></listitem>
767                        </varlistentry>
768
769                        <varlistentry>
770                                <term>%clean</term>
771                                <listitem><para>
772                                                rpmを作ったあとの後始末をこのタグの下に記述します。
773                                </para></listitem>
774                                <listitem><para>
775                                                ここでの処理で必要となるパッケージ等は、
776                                                BuildRequires(clean): で指定します。
777                                </para></listitem>
778
779                        </varlistentry>
780                </variablelist>
781                <para>
782                        スクリプト部に入れることができるタグは、ほかにも、いろいろあります。たとえば、
783                        以下のタグはそれぞれインストール時やアンインストール時に起動するシェルスクリプトを記述するためのものです。
784                </para>
785                <variablelist>
786                        <varlistentry>
787                                <term>%pre</term>
788                                <listitem><para>
789                                                rpmパッケージをinstallするとき、パッケージの展開前に行うことを書く。
790                                                -pオプションについては%postの場合(以下)参照。
791                                </para></listitem>
792                                <listitem><para>
793                                                ここでの処理で必要となるパッケージ等は、
794                                                Requires(pre): で指定します。
795                                </para></listitem>
796                        </varlistentry>
797
798                        <varlistentry>
799                                <term>%post</term>
800                                <listitem><para>
801                                                rpmパッケージをinstallするとき、パッケージの展開後に行うことを書く。
802                                        </para>
803                                </listitem>
804                                <listitem><para>
805                                    ここでの処理で必要となるパッケージ等は、
806                                    Requires(post): で指定します。
807                                </para></listitem>
808
809                                <listitem>
810                                        <para>
811                                                たとえば、infoファイルをインストールする時には、
812<screen>%post
813if [ "$1" = 0 ] ; then
814        %{_syssbindir}/install-info %{_infodir}/hoge.info.gz %{_infodir}/dir
815fi</screen>
816                                                として、info のメニューエントリに infoファイルを追加します。
817                                                if [ $1 = 0 ]; then と fi の行は、
818                                                アップグレード時には実行せず、インストール時だけに実行させるための記述です。
819                                                <xref linkend="making-rpm-9" />を参照してください。
820                                        </para>
821                                        <para>
822                                                %{_syssbindir}/install-info というコマンドが必要になるので、
823                                                Requires(post): %{_syssbindir}/install-info とします。
824                                        </para>
825                                        <para>
826                                                info ファイルは、アンインストール時にも処理が必要になります。
827                                                %preun も参照してください。
828                                        </para>
829                                       
830
831                                        <para>
832                                                たとえば、ライブラリをインストールする時には、
833<screen>
834%post
835%{_syssbindir}/ldconfig
836</screen>
837                                                とすると、ldconfigが実行される。また、代わりに
838                                                <screen>%post -p %{_syssbindir}/ldconfig</screen>
839                                                と、-pオプションを用いて書くと、
840                                                シェルを起動すること無く直接コマンドが実行される。
841                                                またこのコマンドはrpmパッケージのインストール時に必要なコマンドとして、
842                                                Requires(interp): %{_syssbindir}/install-info として登録される。
843                                        </para>
844
845                                        <para>
846                                                正確にいうと、タグに <option>-p</option>オプションをつけた場合は、
847                                                /bin/sh ではなく別のプログラムでスクリプト部分を解釈(interpret)させるということになります。
848                                                この場合には Requires(interp) として登録されます。(%postなので Requires(post) としても登録されます。)
849                                        </para>
850                                        <para>
851                                                以下は問題が起こる例です。
852<screen>
853%post -p %{_syssbindir}/ldconfig
854# update ld.so.cache
855
856%files</screen>
857                                                この場合は %post と %files の間の2行が、スクリプト部分になります。
858                                                一行目に
859                                                <screen># update ld.so.cache</screen>
860                                                と書いてあります。
861                                                bash であれば、# で始まる行は コメントと解釈され無視されますが、
862                                                このスクリプト部分を読み、実行するのは /bin/sh ではなく %{_syssbindir}/ldconfig です。
863                                                ldconfig には # 以降をコメントとして無視するというルールは無いので、
864                                                そのまま実行しようとしてエラーになります。
865                                        </para>
866                                        <para>
867                                                エラーを起こさないようにするには
868<screen>
869%post -p %{_syssbindir}/ldconfig
870
871
872%files</screen>
873                                                とするか、
874<screen>
875%post
876%{_syssbindir}/ldconfig
877# update ld.so.cache
878
879%files</screen>
880                                                とします。
881                                        </para>
882
883                                        <para>
884                                                一つ目の例では、%{_syssbindir}/ldconfig がスクリプト部分を実行するために起動し(、起動した時点で ld.so.cache が更新されますが)、スクリプト部分については何も書かれていないので何もせずに終了します。
885                                        </para>
886                                        <para>
887                                                二つ目の例では、/bin/sh が起動し、スクリプト部分を解釈し %{_syssbindir}/ldconfig を実行、# 以下はコメントなので無視します。
888                                </para></listitem>
889                        </varlistentry>
890
891                        <varlistentry>
892                                <term>%preun</term>
893                                <listitem><para>
894                                    rpmパッケージをuninstallするとき、展開ファイルの削除前に行うことを書く。
895                                </para></listitem>
896                                <listitem><para>
897                                    ここでの処理で必要となるパッケージ等は、
898                                    Requires(preun): で指定します。
899                                </para></listitem>
900                                <listitem><para>
901                                                -pオプションについては%postの場合と同様です。Requires(interp): と Requires(preun): に登録されます。
902                                        </para>
903                                        <para>
904                                                たとえば info ファイルをアンインストールする時には、
905<screen>
906%preun
907if [ $1 = 0 ]; then
908        %{_syssbindir}/install-info --delete %{_infodir}/hoge.info.gz %{_infodir}/dir
909fi
910</screen>
911                                                として、info のメニューエントリから削除します。
912                                                if [ $1 = 0 ]; then と fi の行は、
913                                                アップグレード時には実行せず、アンインストール時だけに実行させるための記述です。
914                                                <xref linkend="making-rpm-9" />を参照してください。
915                                </para></listitem>
916                        </varlistentry>
917                        <varlistentry>
918                                <term>%postun</term>
919                                <listitem><para>
920                                                rpmパッケージをuninstallするとき、各ファイルを削除した後に行うことを書く。
921                                </para></listitem>
922                                <listitem><para>
923                                    ここでの処理で必要となるパッケージ等は、
924                                    Requires(postun): で指定します。
925                                </para></listitem>
926                                <listitem><para>
927                                                -pオプションについては%postの場合と同様です。Requires(interp): と Requires(postun): に登録されます。
928                                </para></listitem>
929                        </varlistentry>
930
931                </variablelist>
932                <para>
933                        以上のタグは、作成したrpmパッケージをinstallやuninstallするときの、
934                        実行されるスクリプトの設定になるので、
935                        specファイルからrpmパッケージを作るときには、実行されることはありません。
936                </para>
937                <para>
938                        さらに、他のパッケージがインストールされた時に起動するスクリプトも記述できます。
939                </para>
940                <variablelist>
941                        <varlistentry>
942                                <term>%triggerin</term>
943                                <listitem><para>
944                                                あるパッケージがインストールされていた、
945                                                もしくは、された時に起動するスクリプトを書く。たとえば、
946<screen>
947%triggerin -- hoge
948echo "hoge is installed"
949</screen>
950                                                と書いておくと、パッケージhogeをインストールしたときに、
951                                                上記メッセージが表示されます。以下のように、バージョン指定もできます。
952<screen>
953%triggerin -- hoge &gt; 3.0
954echo "hoge is installed"
955</screen>
956                                                同様にして、あるパッケージの削除前に実行される%triggerun、
957                                                あるパッケージの削除後に実行される%triggerpostunがあります。このタグについては、
958                                                <filename>/usr/share/doc/rpm-&lt;version&gt;/triggers</filename> に詳しい説明があります。
959                                </para></listitem>
960                        </varlistentry>
961                        <para>
962                          <emphasis>%pre %post %preun %postun %triggerin %triggerun %triggerpostun といったタグを使うのは、ちょっと注意が必要です。</emphasis>
963                          詳しくは、<xref linkend="making-rpm-9" />を参照してください。
964                        </para>
965
966                        <para>パッケージが正しくインストールされているかを検証するには、rpm コマンドで -V オプションを用いますが、-V オプションでできることを増やすためのタグもあります。</para>
967
968                        <varlistentry>
969                                <term>%verifyscript</term>
970                                <listitem><para>
971                                                rpmパッケージを検証するとき(rpm -Vを実行した時)に、追加して実行することを書く。
972                                </para></listitem>
973                                <listitem><para>
974                                        ここでの処理で必要となるパッケージ等は、
975                                        Requires(verify): で指定します。
976                                </para></listitem>
977                                <listitem><para>
978                                                -pオプションについては%postの場合と同様です。Requires(interp): と Requires(verify): に登録されます。
979                                  </para>
980                                  <para>
981                                                このスクリプトの実行結果は、成功した場合には何も表示されず、エラーが発生したときにエラーメッセージのみが標準出力に出力されます。rpm -Vvv などのようにした場合には、標準出力への出力も確認できます。
982                                  </para></listitem>
983
984                                <listitem><para>
985                                                たとえば、%pre で %{_sbindir}/useradd hoge などとしてユーザーを登録した場合には、
986                                                <screen>%verifyscript
987%{_bindir}/id hoge</screen>
988                                                としておくと、hoge というユーザーが存在しているかどうかを確認することができます。
989                                  </para>
990                                  <para>
991                                                この場合、/usr/bin/id というコマンドは coreutils というパッケージに含まれているので、
992                                                Requires(verify): %{_bindir}/id あるいは、Requires(verify): coreutils とします。
993                                </para></listitem>
994
995                        </varlistentry>
996                </variablelist>
997        </sect1>
998
999        <sect1 id="making-rpm-5-3">
1000                <title>ファイルリスト部</title>
1001                <para>
1002                        %filesはじまる部分で、rpmパッケージにつめこむファイル名を列挙します。
1003                        このとき以下に注意してください。
1004                </para>
1005                <itemizedlist>
1006                        <listitem><para>
1007                                        ここに書くファイル名は重複したらいけません。
1008                        </para></listitem>
1009                        <listitem><para>
1010                                        列挙されたファイルは、%docで指定するものを除いて、
1011                                        %installまでのスクリプトの実行によって、
1012                                        記述した通りの場所(${RPM_BUILD_ROOT}を''/''とみなす)
1013                                        にinstallされるものでないといけません。
1014                        </para></listitem>
1015                        <listitem><para>
1016                                        列挙されたファイルがおかしな userID/groupID を持っていると、
1017                                        rpmパッケージが正常にbuildできないことがあります。
1018                        </para></listitem>
1019                        <listitem><para>
1020                                        ファイルを含まないバーチャルパッケージ<footnote><para>Requires で他のパッケージをまとめてインストールしたり、%post, %preun, %postun などで何らかのコマンド処理を行うようなパッケージ。task-gnome や task-tetex などのように task- という名前が使われます。</para></footnote>を作る場合でも、%files という行だけは必要になります。%files という行を省略してしまうと、rpmbuild コマンドで処理しても src.rpm しか作れません。
1021                        </para></listitem>
1022                </itemizedlist>
1023                <para>
1024                        rpmコマンドは、specファイルに基づいてrpmパッケージを作るときに、
1025                        <xref linkend="making-rpm-5-2" />で設定した一連のスクリプトを実行した後、
1026                        ${RPM_BUILD_ROOT}をとみなして%files以下で指定されたファイルを回収し、
1027                        それを指定位置にinstallするようなrpmパッケージをつくります。
1028                </para>
1029                <itemizedlist>
1030                        <listitem>
1031                                <para>
1032                                        ドキュメント・ファイルの指定
1033                                </para>
1034                                <para>
1035                                        %docというマクロを用います。specファイルの例のように、%doc READMEとすると、
1036                                        %setupで指定したホームディレクトリ下のREADMEが、
1037                                        ${RPM_BUILD_ROOT}/usr/doc/hoge-1.1-2/にcpされたのち、
1038                                        rpmパッケージに回収されます。つまり%docは、
1039                                        ドキュメントファイルのインストールとパッケージングのためのファイル指定を同時に行うマクロとしてはたらきます。
1040                                        以下のように、ディレクトリごと指定もできます。
1041                                </para>
1042                                <screen>%doc doc/</screen>
1043                        </listitem>
1044                        <listitem>
1045                                <para>
1046                                        rpmに含めるファイルの指定
1047                                </para>
1048                                <para>
1049                                        その絶対パスで指定します。
1050                                        <itemizedlist>
1051                                                <listitem><para>
1052                                                                個別ファイルはそのまま指定。(/usr/bin/hoge.bin など)
1053                                                </para></listitem>
1054                                                <listitem><para>
1055                                                                あるディレクトリ以下の全てのファイルをrpmパッケージにいれたいときには、
1056                                                                そのディレクトリ名を書きます。(タグなし、/usr/hoge/ など)。
1057                                                                アンインストール時には、そのディレクトリごとなくなります。
1058                                                </para></listitem>
1059                                                <listitem><para>
1060                                                                ワイルドカードも使えます。(/usr/hoge/* など)
1061                                                </para></listitem>
1062                                        </itemizedlist>
1063                                        <warning>
1064                                                <para>
1065                                                        rpm-3.0.5以降では、man ファイルや info ファイルは自動的にgzipで圧縮されます。
1066                                                        %filesにmanやinfoのファイル名を書くときには拡張子.gzをつけるのを忘れないようにしましょう。
1067                                                </para>
1068                                        </warning>
1069                                </para>
1070                        </listitem>
1071                        <listitem>
1072                                <para>
1073                                        タグを用いたファイル指定
1074                                </para>
1075                                <variablelist>
1076                                        <varlistentry>
1077                                                <term>%dir &lt;dir name&gt;</term>
1078                                                <listitem><para>
1079                                                                指定したディレクトリだけをパッケージに含める。
1080                                                                <screen>``/usr/hoge/'' = ``%dir /usr/hoge/'' + ``/usr/hoge/*''</screen>
1081                                                                ってかんじです。
1082                                                </para></listitem>
1083                                        </varlistentry>
1084                                        <varlistentry>
1085                                                <term>%config &lt;file name&gt;</term>
1086                                                <listitem><para>
1087                                                                configファイルであることを示す。
1088                                                                ファイルが書き換えられていた場合、
1089                                                                アンインストール時には .rpmsaveをつけた名前で保存されます。
1090                                                                アップグレード時には新しいファイルと置き換えられ、
1091                                                                元のファイルは .rpmsaveをつけた名前で保存されます。
1092                                                          </para>
1093                                                          <para>
1094                                                                ファイルが変更されていた場合、
1095                                                                アップグレード時に新しいファイルに置き換えずにもとのファイルをそのまま使う場合には、
1096                                                                %config(noreplace) を指定します。
1097                                                                <screen>%config(noreplace) &lt;file name&gt;</screen>
1098                                                                この場合新しいパッケージに入っている設定ファイルは、
1099                                                                .rpmnew をつけた名前で保存されます。
1100                                                                また、アップグレードではなく、同じバージョンをインストールし直した時には、
1101                                                                .rpmorig をつけた名前で保存されます。
1102                                                          </para>
1103                                                          <para>
1104                                                                存在しなくても問題ないファイルの場合は、
1105                                                                %config(missingok) を指定します。
1106                                                                <screen>%config(missingok) &lt;file name&gt;</screen>
1107                                                                これは、rpmコマンドの -V オプションでチェックした時に、
1108                                                                ファイルが無くてもエラーにならないようにするためのものです。
1109                                                </para></listitem>
1110                                        </varlistentry>
1111                                        <varlistentry>
1112                                                <term>%attr(&lt;mode&gt;,&lt;owner&gt;,&lt;group&gt;[, dirmode]) &lt;file name&gt;</term>
1113                                                <listitem><para>
1114                                                                %filesに列挙するファイルのパーミッションやuser ID、group IDを設定する。
1115                                                                例えば、
1116                                                                <screen>%attr(755,root,root) /usr/lib/hoge</screen>
1117                                                                とする。一部の属性を省略(書き換えない)したいときには - を使って、
1118                                                                <screen>%attr(755,-,root) /usr/lib/hoge</screen>
1119                                                                とする。このタグを用いることによって、
1120                                                                root権限を持ってない人もrpmのパッケージ化を行える。
1121                                                          </para>
1122                                                          <para>
1123                                                                <screen>%attr(755,root,root)</screen>
1124                                                                のように( )の中には 3つしか書かないことが多いですが、
1125                                                                <screen>%attr(755,root,root,755)</screen>
1126                                                                のように 4つ書くこともできます。
1127                                                                4つ目の数字(dirmode)は、
1128                                                                <emphasis>ディレクトリとサブディレクトリのパーミッション</emphasis>になります。
1129                                                </para></listitem>
1130                                        </varlistentry>
1131                                        <varlistentry>
1132                                                <term>%defattr(&lt;mode&gt;,&lt;owner&gt;,&lt;group&gt;[, dirmode])</term>
1133                                                <listitem><para>
1134                                                                それ以降の行に書かれた属性のデフォルト値を設定する。
1135                                                                %attr が出てきた行を除いて、それ以降に書かれたものに共通になります。
1136                                                          </para>
1137                                                          <para>
1138                                                                %defattr も %attr も何度でも使えます。
1139                                                                次の例だと、/usr/bin/hoge と /usr/lib/hoge は一つ目の %defattr の 755 になり、
1140                                                                /usr/share/locale/ja 以降は二つ目の %defattr の 644 になります。
1141                                                                <screen>
1142%defattr(755,-,-)
1143/usr/bin/hoge
1144/usr/lib/hoge
1145%defattr(644,-,-)
1146/usr/share/locale/ja
1147/usr/share/locale/lv</screen>                                           
1148                                                          </para>
1149                                                          <para>
1150                                                                %attrと同様、4つ目の数字は、
1151                                                                ディレクトリとサブディレクトリのパーミッションになります。
1152                                                </para></listitem>
1153                                        </varlistentry>
1154
1155                                        <varlistentry>
1156                                                <term>%verify( ) &lt;file name&gt;</term>
1157                                                <listitem><para>
1158                                                    %filesに列挙するファイルについて、rpm -V でパッケージを検証する時に、検証する項目を指定する。</para>
1159                                                  <para>
1160                                                    ( ) の中には<xref linkend="verify-options" />にあるものが入ります。
1161                                                    複数指定する場合には、, もしくは スペース で区切ります。</para>
1162                                                 
1163
1164                                                  <table id="verify-options">
1165                                                    <title>%verify の ( ) の中で指定できるもの</title>
1166                                                    <tgroup cols="2">
1167                                                      <thead>
1168                                                        <row><entry>項目</entry><entry>内容</entry></row>
1169                                                      </thead>
1170                                                      <tbody>
1171                                                        <row><entry>size</entry><entry>サイズ</entry></row>
1172                                                        <row><entry>mode</entry><entry>パーミッションとファイルの種類</entry></row>
1173                                                        <row><entry>md5</entry><entry>md5 値</entry></row>
1174                                                        <row><entry>rdev</entry><entry>デバイスファイルのモードビットなど</entry></row>
1175                                                        <row><entry>link</entry><entry>リンク先</entry></row>
1176                                                        <row><entry>user</entry><entry>ファイルの所有者 user</entry></row>
1177                                                        <row><entry>group</entry><entry>ファイルのグループ group</entry></row>
1178                                                        <row><entry>mtime</entry><entry>ファイルの更新時刻 mtime(modification time)</entry></row>
1179                                                      </tbody>
1180                                                    </tgroup>
1181                                                  </table>
1182
1183                                                  <para><emphasis>not</emphasis> とすると<emphasis>検証しない項目</emphasis>だけを指定できます。</para>
1184                                                  <para>書き換えることが前提となる設定ファイルなので、ファイルサイズ と md5値 と 更新時刻 は検証する必要がないといった場合には、
1185                                                    <screen>%verify(not size,md5,mtime) /etc/hoge.conf</screen>
1186                                                  のように指定します。
1187                                                </para></listitem>
1188                                        </varlistentry>
1189
1190                                        <varlistentry>
1191                                                  <term>%defverify( )</term>
1192                                                <listitem><para>
1193                                                    それ以降の行に書かれたファイルについて検証する項目を設定します。
1194                                                </para></listitem>
1195                                                <listitem><para>
1196                                                    %verify と %defverify は、%attr と %defattr と同じような関係です。
1197                                                </para></listitem>
1198                                        </varlistentry>
1199
1200                                </variablelist>
1201                        </listitem>
1202                </itemizedlist>
1203
1204                <para>
1205                  %config %attr %verify などは、次のようにスペースを入れることで一つのファイルに複数指定できます。
1206                  <screen>%config %verify(not size,md5,mtime) /etc/hoge.conf</screen>
1207                </para>
1208
1209                <para>
1210                        この%filesの指定は少々面倒なとこかもしれません。
1211                        新しくパッケージをつくる場合などは、%install までのスクリプト部を書いたところで、%files以下は何も書かないまま、一度、そのspecファイルから rpm をbuildしてみるとよいかもしれません。(rpm -bi hoge.spec これについては次節)。
1212               
1213                        そのあとで、${RPM_BUILD_ROOT}以下にinstallされてるファイルを、find コマンドで見てみて%filesの指定をします。
1214                </para>
1215                <para>
1216                        %filesで書かれていないファイルがある場合には、build 時に
1217                        <screen>パッケージに未収録のファイルを検査中: /usr/lib/rpm/check-files /var/tmp/hoge-1.1-root
1218警告: パッケージに未収録のインストール済みファイルが見つかりました:</screen>
1219                        と未収録のファイルの名前などが表示されます。
1220                        この部分を利用して %files の部分を作成するのもよいでしょう。
1221                </para>
1222
1223                <para>
1224                        ソースのバージョンアップなどで、作成されるファイルが増減したり、ディレクトリが変わったりする場合があります。未収録のファイルがあっても、build が途中で終了せず、パッケージを作成できてしまう場合があるので、build 時のメッセージは必ず確認してください。
1225                </para>
1226        </sect1>
1227        <sect1 id="package-changelog">
1228                <title>パッケージの更新履歴</title>
1229                <para>%changelog以下にパッケージの更新履歴を英語で記述します。最新の更新情報が上にくるように書きます。</para>
1230                <para>
1231                        一行目の最初に * を書き、日付と変更を加えた人の名前を書きます。
1232                        二行目以降に - を書き、更新内容を書きます。
1233                        今日の日付は <command>date コマンド</command> で
1234                        <command>LANG=C date +'%a %b %d %Y'</command> とすると確認できます。
1235                        12月1日のように日の部分が一桁の場合は 0 をつけ 01 のようにします。
1236                </para>
1237                <para>
1238                        Vine Linux でのパッケージングルールでは
1239                        一行目に日付、パッケージャーの名前、メールアドレス、パッケージのバージョン,、リリース番号を書くことになっています。
1240                </para>
1241                <screen>
1242                        * 曜日 月 日 西暦年 パッケージャーの名前 &lt;メールアドレス&gt; バージョン-リリース番号
1243                        - 更新内容
1244                </screen>
1245                <para>
1246                        更新内容の部分でもマクロは展開され %{name} は hoge になります。
1247                        マクロを展開せずにそのまま %{name} と書きたい場合は
1248                        %%{name} のように % を二つ続けて書いて下さい。
1249                </para>
1250                <para>
1251                        日本語を使うことも可能になっていますが、Summary や description
1252                        のように環境変数に応じて日本語や英語のどちらかを表示するという仕組みは無いので、
1253                        英語だけで書くほうがよいでしょう。
1254                </para>
1255        </sect1>
1256</chapter>
1257
1258<chapter id="rpmbuild">
1259        <title>SPECファイルをもとにRPMパッケージをつくる</title>
1260        <para>Vine Linux 3.0以降で採用されているrpm-4.xではパッケージのビルドは<command>rpmbuild</command>コマンドを利用するようになりました。過去との互換性のためVine Linuxでは、<command>rpm</command>コマンドも利用できるようになっていますが、将来的に廃止の予定であるため今後は<command>rpmbuild</command>コマンドをお使いください。</para>
1261        <para>
1262                SPECファイルを書いた後は、以下のようにして、RPMパッケージをつくります。
1263        </para>
1264        <itemizedlist>
1265                <listitem>
1266                        <para>
1267                                バイナリパッケージとソースパッケージをつくりたいときには、(build all)
1268                        </para>
1269                        <screen>$ <command>rpmbuild -ba hoge.spec</command></screen>
1270                </listitem>
1271                <listitem>
1272                        <para>
1273                                とりあえず、バイナリパッケージだけつくりたいときは(build binary)
1274                        </para>
1275                        <screen>$ <command>rpmbuild -bb hoge.spec</command></screen>
1276                </listitem>
1277                <listitem>
1278                        <para>
1279                                ソースパッケージだけつくりたいときは(build srpm)
1280                        </para>
1281                        <screen>$ <command>rpmbuild -bs hoge.spec</command></screen>
1282                </listitem>
1283                <listitem>
1284                        <para>
1285                                パッケージを作成せずにパッケージの展開だけしてみる
1286                                (%buildの前までを実行)(build prep、%prepが実行される。)
1287                        </para>
1288                        <screen>$ <command>rpmbuild -bp hoge.spec</command></screen>
1289                        <para>
1290                                これは、パッチをつくるときに便利です。
1291                        </para>
1292                </listitem>
1293                <listitem>
1294                        <para>
1295                                パッケージを作成せずにちょっとmakeがうまくいくかテスト
1296                                (build compile、%prep,%buildが実行される。)
1297                        </para>
1298                        <screen>$ <command>rpmbuild -bc hoge.spec</command></screen>
1299                        <para>
1300                                <option>--short-circuit</option>オプションをつけると
1301                                %build 以前の部分(%prep) を省略して %buildが実行されます。
1302                        </para>
1303                        <screen>$ <command>rpmbuild --short-circuit -bc hoge.spec</command></screen>
1304                </listitem>
1305                <listitem>
1306                        <para>
1307                                パッケージを作成せずにちょっとinstallまでうまくいくかテスト
1308                                (build install、%prep,%build,%install,%checkが実行される。)
1309                        </para>
1310                        <screen>$ <command>rpmbuild -bi hoge.spec</command></screen>
1311                        <para>
1312                                <option>--short-circuit</option>オプションをつけると
1313                                %install 以前の部分(%prep,%build) を省略して %install,%checkが実行されます。
1314                        </para>
1315                        <screen>$ <command>rpmbuild --short-circuit -bi hoge.spec</command></screen>
1316                        <para>
1317                                %files が正しく書かれているか確認できます。
1318                        </para>
1319                </listitem>
1320                <listitem>
1321                        <para>
1322                                次のように | (パイプ) と tee コマンドを利用して、ビルド中のメッセージをファイルに残しておくと、エラーの確認や、%files の確認、Requires の確認といった作業がやりやすくなります。
1323                        </para> 
1324                        <screen>$ <command>rpmbuild -ba hoge.spec 2&gt;&amp;1<footnote><para>2&gt;&amp;1 はエラーメッセージ(2:標準エラー出力の内容)を (tee コマンドに渡すために) 標準出力(1) にリダイレクトする(2に流れるメッセージを 1と合流させる)というものです。これで、tee で指定したファイル hoge-build.log に、標準出力のメッセージと一緒にエラーメッセージも書き込まれるようになります。</para></footnote> |tee hoge-build.log</command></screen>
1325                </listitem>
1326        </itemizedlist>
1327        <para>
1328                以上のコマンドを実行すると、segmentation faultを起こす時には、
1329                <xref linkend="mr-directories" />で述べたLANGの指定を再確認してください。
1330                うまくいけば、ディレクトリRPMS/i386にrpmパッケージが、
1331                ディレクトリSRPMSにsrpmパッケージができるはずです。
1332        </para>
1333        <para>
1334                他に、 tar.gz 形式のソースの中に含まれている spec ファイルを用いて build するときには、
1335                -b のかわりに -t を用いて、
1336                <screen>$ <command>rpmbuild -ta hoge.tar.gz</command></screen>
1337                などとします。
1338        </para>
1339                <!--para>サンプルのSPECファイルのような指定で、rpmパッケージをつくると、hoge-1.1-2vl5.i386.rpm という名前のrpmができます(architectureがi386の場合)。</para-->
1340</chapter>
1341
1342<chapter id="making-rpm-7">
1343        <title>変数とマクロを利用する</title>
1344        <sect1 id="making-rpm-7-1">
1345                <title>環境変数</title>
1346                <para>
1347                        スクリプト部の各タグからはじまる部分は、先にも述べた通り独立したbash scriptとして働くので、
1348                        その範囲内で、
1349                        <screen>TEXMF="/usr/share/texmf"</screen>
1350                        と変数を定義して用いることができます。
1351                </para>
1352                <para>
1353                        定義した変数は ${ } で囲んで
1354                        <screen>${TEXMF}</screen>
1355                        のようにすると利用できます。
1356                        $TEXMF のように { } を省略することもできます。
1357                </para>
1358                <para>
1359                        /usr/share というディレクトリは標準で %{_datadir} というマクロが定義されているので
1360                        <screen>TEXMF="%{_datadir}/texmf"</screen>
1361                        とすることができます。
1362                        マクロについては、次節以降で説明します。
1363                </para>
1364                <para>
1365                        また、以下の変数は各タグ毎に環境変数として定義されます。
1366                </para>
1367                <variablelist>
1368                        <varlistentry>
1369                                <term>RPM_SOURCE_DIR</term>
1370                                <listitem><para>
1371                                                ディレクトリSOURCESを表す。<xref linkend="mr-directories" />参照。
1372                                                デフォルトは、
1373                                                <screen>RPM_SOURCE_DIR="/usr/src/redhat/SOURCES"</screen>
1374                                </para></listitem>
1375                        </varlistentry>
1376                        <varlistentry>
1377                                <term>RPM_BUILD_DIR</term>
1378                                <listitem><para>
1379                                                ディレクトリBUILDを表す。<xref linkend="mr-directories" />参照。
1380                                                デフォルトは、
1381                                                <screen>RPM_BUILD_DIR="/usr/src/redhat/BUILD"</screen>
1382                                </para></listitem>
1383                        </varlistentry>
1384                        <varlistentry>
1385                                <term>RPM_DOC_DIR</term>
1386                                <listitem><para>
1387                                                %docで指定されたドキュメントファイルをインストールするためのディレクトリを表す。
1388                                                rpmrcファイルの、defaultdocdirで指定する。デフォルトは、
1389                                                <screen>RPM_DOC_DIR="/usr/doc"</screen>
1390                                </para></listitem>
1391                        </varlistentry>
1392                        <varlistentry>
1393                                <term>RPM_OPT_FLAGS</term>
1394                                <listitem><para>
1395                                                コンパイル時にコンパイラにわたすデフォルトのオプション指定を表す。
1396                                                rpmrcファイルの、optflagsで指定する。
1397                                                アーキテクチャ毎に指定ができる。
1398                                                例えば、%buildにおいて以下のように使う
1399                                                <screen>make CFLAGS=${RPM_OPT_FLAGS}</screen>
1400                                                デフォルトはarchitectureがi386のときには、
1401                                                <screen>RPM_OPT_FLAGS="-O2 -m486 -fno-strength-reduce"</screen>
1402                                </para></listitem>
1403                        </varlistentry>
1404                        <varlistentry>
1405                                <term>RPM_ARCH_FLAGS</term>
1406                                <listitem><para>
1407                                                buildを行なっているシステムのアーキテクチャを表す変数。
1408                                                アーキテクチャがi386なら、
1409                                                <screen>RPM_ARCH_FLAGS="i386"</screen>
1410                                </para></listitem>
1411                        </varlistentry>
1412                        <varlistentry>
1413                                <term>RPM_OS</term>
1414                                <listitem><para>
1415                                                buildを行なっているシステムのOSをあらわす変数。Linuxなら、
1416                                                <screen>RPM_OS="Linux"</screen>
1417                                </para></listitem>
1418                        </varlistentry>
1419                        <varlistentry>
1420                                <term>RPM_BUILD_ROOT</term>
1421                                <listitem><para>
1422                                                BuildRootで設定された仮想インストールのためのディレクトリを表す。
1423                                                (<xref linkend="package-info" />のBuildRootの項参照)
1424                                </para></listitem>
1425                        </varlistentry>
1426                        <varlistentry>
1427                                <term>RPM_PACKAGE_NAME</term>
1428                                <listitem><para>
1429                                                Nameで設定されたパッケージ名を表す。
1430                                                (<xref linkend="package-info" />のNameの項参照)
1431                                </para></listitem>
1432                        </varlistentry>
1433                        <varlistentry>
1434                                <term>RPM_PACKAGE_VERSION</term>
1435                                <listitem><para>
1436                                                Versionで設定されたバージョン名を表す。
1437                                                (<xref linkend="package-info" />のVersionの項参照)
1438                                </para></listitem>
1439                        </varlistentry>
1440                        <varlistentry>
1441                                <term>RPM_PACKAGE_RELEASE</term>
1442                                <listitem><para>
1443                                                Releaseで設定されたリリース番号を表す。
1444                                                (<xref linkend="package-info" />のReleaseの項参照)
1445                                </para></listitem>
1446                        </varlistentry>
1447                </variablelist>
1448        </sect1>
1449        <sect1 id="define-macro">
1450
1451                <title>specファイル中のマクロ定義</title>
1452                <para>
1453                        マクロは
1454                        <screen>%define マクロの名前 内容</screen>
1455                        のように書くことで定義できます。
1456                </para>
1457                <para>
1458                        <screen>%{マクロの名前}</screen>
1459                        のように書くことで利用できます。
1460                        {} を省略して %マクロの名前 と書くこともできますが、
1461                        {} をつけて利用したほうが、
1462                        <xref linkend="making-rpm-5-2" />に出てきた %prep や %build などといったタグと区別しやすくなります。
1463                </para>
1464                <para>
1465                        マクロは、%setupや%installなどのスクリプト部やファイル定義部など、
1466                        specファイル全体で使えるので、
1467                        うまく使うとバージョンアップに追随してspecファイルを書くときに楽ができます。
1468                </para>
1469                <para>
1470                        %define で定義せずに使えるマクロとして %{name} , %{version} , %{release} があります。
1471                        <xref linkend="package-info" />にでてきた、Name Version Release の値が、
1472                        それぞれ %{name} , %{version} , %{release} の内容になります。
1473                </para>
1474                <note><para>
1475                        %define name hoge として name を定義し Name: %{name} のように利用しているspecファイルを見かけることがありますが、
1476                        Name の値を参照するのが %{name} なので、本来とは逆の使い方になり問題を起こす場合があるかもしれません。
1477                        このような場合は %define pkg_name hoge , Name: %{pkg_name} のように
1478                        %{name} とは違う名前のマクロを利用したほうがよいでしょう。
1479                </para></note>
1480                <para>
1481                        <xref linkend="make-spec" />のspecファイルの例のデータ定義部は、
1482                        %{name} と %{version} というマクロを利用して、以下のように書くことができます。
1483                        Name: hoge なので %{name} は hoge に、Version: 1.1 なので %{version} は 1.1 になります。
1484                </para>
1485<screen>
1486Name: hoge
1487Version: 1.1
1488Release: 1
1489Source: %{name}-%{version}.tar.gz
1490Patch: %{name}.patch
1491</screen>
1492
1493                <para>
1494                        specファイルの中(どこでもいいです)に %dump と書いておくと、
1495                        <command>rpmbuild</command> コマンドでパッケージを作る時に、
1496                        すべてのマクロが標準エラー出力に出力され、確認することができます。
1497                </para>
1498                <para>
1499                        マクロの定義を取り消したいけれど、行を削除するのではなくコメントとして残しておきたいという場合には、
1500                        %define に % をつけて、%%define にし、さらに # をつけます。
1501
1502                        <screen>%define hoge hige</screen> を <screen># %%define hoge hige</screen> のようにします。
1503
1504                        <screen># %define hoge hige</screen> ではだめです。
1505                        # 以降はコメントになるという処理よりも、マクロの %define の方が先に処理されるので、
1506                        %define hoge hige が解釈されてしまいます。
1507                </para>
1508
1509        </sect1>
1510
1511        <sect1 id="common-macro">
1512
1513                <title>標準で定義されているマクロ</title>
1514
1515                <para>
1516                        よく利用されるコマンドやディレクトリなどにはあらかじめマクロが定義されています。
1517                        自分で定義した変数と同様にspecファイル全体で使えます。
1518                </para>
1519                <para>
1520                        標準で定義されているマクロは <filename>/usr/lib/rpm/macros</filename> に書かれています。
1521                        ユーザー毎のマクロを記述するファイルは<filename>~/.rpmmacros</filename>です。
1522                </para>
1523                <para>
1524                        <filename>~/.rpmmacros</filename> に書く場合には
1525                        <screen>%マクロの名前 内容</screen>
1526                        とします。
1527                        <xref linkend="mr-directories" />で出てきた %_topdir などもマクロです。
1528                </para>
1529                <para>
1530                        ユーザー毎のマクロと、標準で定義されているマクロをあわせたものは、
1531                        <command>rpm</command>コマンドの <option>--showrc</option>オプションで確認できます。
1532                        <screen>$ <command>rpm --showrc</command></screen>
1533                </para>
1534                <para>
1535                        また、それぞれのマクロがどんなものかは、
1536                        <screen>$ <command>rpm --eval "%{マクロ}"</command></screen>
1537                        のようにすると確認できます。
1538                </para>
1539                <para>
1540                        標準で定義されているマクロについてはなるべく利用してください。
1541                        specファイルのメンテナンスしやすさの向上につながります。
1542                </para>
1543                <para>
1544                        たとえば、%{configure} や %{makeinstall} といったマクロを利用することで、
1545                        %build や %install の部分を簡潔に書くことができる場合があります。
1546<screen>%build
1547%{configure}
1548%{__make}
1549
1550%install
1551%{makeinstall}</screen>
1552                        <screen>$ <command>rpm --eval "%{configure}"</command></screen>
1553                        などとやってそれぞれのマクロがどんなものか確認して下さい。
1554                </para>
1555
1556                <para>
1557                        rpm 4.x および Vine Linux 4.1 で定義されているマクロを使うと
1558                        <xref linkend="make-spec" />のspecファイルは次のようになります。
1559                </para>
1560<screen>
1561---------spec ファイルの例 (#から始まる行は、コメント行です)--------
1562#(1)データ定義部
1563Summary: hoge is a harehare horehore
1564Name: hoge
1565Version: 1.1
1566Release: 2
1567Source: %{name}-%{version}.tar.gz
1568Patch: %{name}.patch.gz
1569License: GPL2
1570Group: Local
1571URL: http://www.fugahogo.com/hogehoge.html
1572Packager: Jun Nishii &lt;jun@vinelinux.org&gt;
1573Requires: hige
1574BuildRequires: hige-devel
1575BuildRoot: %{_tmppath}/%{name}-%{version}-root
1576Summary(ja): hoge は harehare な horehore です。
1577
1578%description
1579Hoge is a harehare horehore and convenient for fugafuga.
1580Enjoy!
1581
1582%description -l ja
1583hoge は harehare な horehore で、fugafuga するときなどとても便利なツー
1584ルです。みんなでなかよく使いましょう。
1585
1586%changelog
1587* Tue Feb 16 1999 Jun Nishii &lt;jun@vinelinux.org&gt; 1.1-2
1588- added Japanese messages
1589
1590* Mon Feb 15 1999 Jun Nishii &lt;jun@vinelinux.org&gt; 1.1-1
1591- first release for version 1.1
1592
1593#(2)スクリプト部
1594%prep       #rpmを構築する前の準備です。
1595%{__rm} -rf $RPM_BUILD_ROOT
1596
1597%setup      #ソースをBUILDに展開します。
1598%patch -p1  #パッチをあてます。
1599
1600%build      #makeのための手順を書きます。
1601%{__make}
1602(cd man; %{__make} man)
1603
1604%install    #installのための手順を書きます。
1605%{__make} prefix=${RPM_BUILD_ROOT}/%{_prefix}/local install
1606(cd man; %{__make} prefix=${RPM_BUILD_ROOT}/%{_prefix}/local install.man)
1607
1608%clean      #rpmを作ったあとの後始末です。
1609%{__rm} -rf $RPM_BUILD_ROOT
1610
1611#(3)ファイルリスト部 --------------
1612%files
1613%defattr(-,root,root)
1614%doc README
1615%doc docs/
1616%{_bindir}/hoge.bin
1617%{_libdir}/hoge/
1618%{_mandir}/man1/hoge.1.gz
1619%dir %{_libdir}/hoge/
1620%config %{_libdir}/hoge/fuga.conf
1621
1622---------specの例はここまで-----------------------------------------
1623</screen>
1624
1625        </sect1>
1626</chapter>
1627
1628<chapter id="making-rpm-8">
1629        <title>サブパッケージの作成について</title>
1630        <para>
1631                大きなソースをmakeしてrpmパッケージを作るときなど、
1632                幾つかのrpmパッケージに分割したくなることがよくあります。
1633                たとえば、muleのrpmパッケージをつくるときに、
1634                baseのrpmパッケージがelcを含んでいれば、
1635                そのソースであるelファイルはなくてもmuleの実行には問題ないですから、
1636                mule.rpm と mule-el.rpm みたいにわけたほうがよいかもしれません。
1637                また、ライブラリや開発用インクルードファイルもソースに含まれるアプリケーションをrpm化する時は、
1638                アプリ本体の hoge.rpm と、開発者用にlibhoge.a や hoge.hを入れたhoge-devel.rpmにわけたいこともあるでしょう。
1639                ドキュメントが大きいと、hoge-docs.rpmも別に作りたいこともあるでしょう。
1640        </para>
1641        <para>
1642                こういうときには、ちょっとspecファイルを変更するだけで、
1643                サブパッケージの作成をすることができます。 具体的には、
1644                サブパッケージ(ここでは、hogeのサブパッケージhoge-docsとする)のための、
1645                データ定義部(%package docsではじまり、GroupやSummary、%description docsなどを書く部分)と、
1646                そのサブパッケージにいれるファイルを列挙した%files docs から始まるファイルリストを付け加えます。
1647                具体例は、RPM-BUILD-HOWTOにもありますので、興味のある人はそちらを参照してください。
1648        </para>
1649        <para>
1650                ただし、次節でものべるように、
1651                サブパッケージの作成は必要最小限にとどめるよう心掛けましょう。
1652        </para>
1653</chapter>
1654
1655<chapter id="making-rpm-9">
1656        <title>rpmパッケージをつくるときの注意</title>
1657        <orderedlist>
1658                <listitem>
1659                        <para>
1660                                <emphasis>重要:</emphasis> シンボリック・リンク等を%postとかで張らない。
1661                                間違えてもそれ(%postではったリンクなど)を%preunや%postunで削除してはいけない。
1662                        </para>
1663                        <para>
1664                                シンボリック・リンクを含む全てのファイルを%installまででインストールして、
1665                                %filesに加えるべきである。(詳しくは後述)
1666                        </para>
1667                </listitem>
1668                <listitem>
1669                        <para>
1670                                <emphasis>重要:</emphasis> むやみに Epoch を使わない。
1671                                Epoch については説明しませんが、
1672                                パッケージのバージョン管理に混乱を引き起こす場合があるので、
1673                                絶対に必要という場合以外は利用しないでください。
1674                                なお、Serial は rpm 4.4 で obsolete となっています。
1675                        </para>
1676                </listitem>
1677                <listitem>
1678                        <para>あまり細かくサブパッケージに分けない</para>
1679                        <para>
1680                                サブパッケージの作り方を覚えると、やたら沢山のサブパッケージをつくる人がいるが、
1681                                アップグレード時のメンテ(rpm -Uやspecの書き直し)が面倒になるばかりか、
1682                                どれがなんだか分からなくなったりする。分割は必要最小限に。
1683                        </para>
1684                </listitem>
1685                <listitem>
1686                        <para>%configは乱用しない</para>
1687                        <para>
1688                                %configを多くすると、%filesが非常にわかりづらくなることがあり、
1689                                version up等の時にこの部分のメンテに労力がかかるようになりよくない。
1690                                デフォルトのままで出来るだけ多くの人が利用できるようなconfigファイルを用意し、
1691                                ユーザの%configの設定は必要最小限ですむように心掛けると、
1692                                多くの人が利用しやすいものができ、多くの場合に%fileの記述もすっきりする。
1693                        </para>
1694                </listitem>
1695                <listitem>
1696                        <para>patchを使いすぎない</para>
1697                        <para>
1698                                configファイルの設定やMakefileなどを変えたりするために頑張ってpatchをいろいろつくるよりも、
1699                                別にファイルを用意してSourceに加えておき、%installあたりで
1700                                <screen>%{__cp} ${RPM_SOURCE_DIR}/hoge.conf .</screen>
1701                                とかしてしまったほうが、すっきりすることが多い。srpmをばらしても、
1702                                そのファイルがすぐ出てきてわかりやすく、
1703                                アップデートのためにspec修正するときも楽だったりする。
1704                        </para>
1705                </listitem>
1706                <listitem>
1707                        <para>specファイルはわかりやすく。第三者にもわかるようコメントを入れて。</para>
1708                        <para>
1709                                specファイルはソースのアップデートに対応して修正をしたり、
1710                                第三者が見て必要に応じて書き直したりすることがある。
1711                                凝っていろいろな設定をしたりする複雑なものを書くより、
1712                                ポータビリティを重視して簡潔に書いた方が後のメンテのためには吉。また、
1713                                違った環境でbuildができなくなるようなことが無いよう、
1714                                specファイル中のスクリプトで、特殊なコマンドを呼ぶようなことは避け、
1715                                一般的なコマンド使用にとどめるべき。
1716                        </para>
1717                </listitem>
1718        </orderedlist>
1719        <para>
1720                注意1は特に重要です。よく、%post で、シンボリック・リンクをはって、
1721                %preun でそのリンクを削除するようなspecファイルがあります。
1722                これを行うと、アップデート時に問題が生じることがあります。以前、
1723                libcのパッケージでこういう記述が入ってるものがあって、
1724                深刻な問題が生じたこともありました。
1725        </para>
1726
1727        <para>
1728                その理由は、rpm -U &lt;new-rpm&gt; としたときに、
1729<screen>
1730rpm -e &lt;old-rpm&gt;
1731rpm -i &lt;new-rpm&gt;
1732</screen>
1733                ではなく、
1734<screen>
1735rpm -i &lt;new-rpm&gt;
1736rpm -e &lt;old-rpm&gt;
1737</screen>
1738                とはたらくためです。
1739        </para>
1740        <para>
1741                つまり、%post で、シンボリック・リンクをはって、
1742                %preun でそれを削除するような rpm のバージョンアップをしようと、
1743                rpm -U (アップデート)を実行すると
1744                <orderedlist>
1745                        <listitem><para>
1746                                        新しいパッケージのインストールが行なわれ、
1747                                        %postでシンボリック・リンクがつくられる。
1748                        </para></listitem>
1749                        <listitem><para>
1750                                        古いパッケージのアンインストールが行なわれる。
1751                                        このとき、%preunでさっき新しいパッケージが作ったシンボリック・
1752                                        リンクが削除される。
1753                        </para></listitem>
1754                </orderedlist>
1755                この仕様は、libcとかのアップグレードの途中でlibcとかがなくなってトラブルが生じるのを避けようとしたためのものと思われます。
1756        </para>
1757        <para>
1758                実はこの問題は解決法があります。
1759                %pre, %post, %preun, %postunのスクリプト実行時には、スクリプトに対して以下の引数が与えられます。
1760        </para>
1761        <itemizedlist>
1762                <listitem>
1763                        <para>rpm -iでインストールを行うとき</para>
1764                        <para>%pre, %postに対して$1=1</para>
1765                </listitem>
1766                <listitem>
1767                        <para>rpm -Uでアップデートを行うとき</para>
1768                        <itemizedlist>
1769                                <listitem><para>
1770                                                新しいrpmのインストール時に、
1771                                                %pre, %postに対して$1=2
1772                                </para></listitem>
1773                                <listitem><para>
1774                                                古いrpmをアンインストール時に、
1775                                                %preun, %postunに対して$1=1
1776                                </para></listitem>
1777                        </itemizedlist>
1778                </listitem>
1779                <listitem>
1780                        <para>rpm -eでアンインストールを行うとき</para>
1781                        <para>%preun, %postunに対して$1=0</para>
1782                </listitem>
1783        </itemizedlist>
1784        <para>
1785                すなわち、はじめてインストールするときには、引数として1がわたされ、
1786                rpm -eでアンインストールするときには0がわたされるわけです。
1787                これを利用すると、
1788<screen>
1789%post
1790if [ $1 = 1]; then
1791        echo ``First installation!''
1792fi
1793%preun
1794if [ $1 = 0]; then
1795        echo ``Good bye!''
1796fi
1797</screen>
1798                とかできるわけです。
1799                (それでも%postなどでシンボリック・リンクをはったりすると、
1800                出どころ不明のファイルが増えることになります。その他トラブルをさけるため、
1801                できるだけファイルは%filesに加えるようにし、
1802                %postなどに書くスクリプトはできるだけ少なくしましょう)
1803        </para>
1804</chapter>
1805
1806<chapter id="making-rpm-10">
1807        <title>パッケージ作成後に確認すること</title>
1808        <orderedlist>
1809
1810          <listitem><para>SPEC ファイルのエンコーディング等を確認する。</para>
1811            <para><screen>$ <command>rpm -qpi hoge.rpm</command></screen>
1812              で文字化けしないかどうか、また、バージョンなど、記述した内容にミスが無いか確認する。</para>
1813            <para><screen>$ <command>LANG=C rpm -qpi hoge.rpm</command></screen>
1814              として英語での出力でも確認する。</para>
1815          </listitem>
1816         
1817          <listitem><para>Changelog の記述を確認する。</para>
1818            <para><screen>$ <command>rpm -qp --changelog hoge.rpm | head</command></screen>
1819              などで、追記した部分を確認する。</para>
1820          </listitem>
1821         
1822          <listitem><para>依存関係(Requires)を確認する。</para>
1823            <para><screen>$ <command>rpm -qpR hoge.rpm</command></screen></para>
1824           
1825            <para>パッケージがシェルスクリプトのファイルなどを含んでいる場合、その中で利用されるコマンド(もしくはパッケージ)が Requires: で指定されているかを確かめる必要もあります。これは、実際にシェルスクリプトを実行するなどして確かめる必要があります。</para>
1826          </listitem>
1827         
1828          <listitem><para>build 時の依存関係(BuildRequires)を確認する。</para>
1829           
1830            <para>できあがった src.rpm を、BuildRequires で指定していない devel などのパッケージをアンインストールした状態で rebuild してみる。</para>
1831
1832            <para>
1833              *-devel というパッケージをアンインストールするのに、筆者は(bash で)次のようなコマンド(for文)を利用しています。sed や awk で処理してる部分はもう少し上手なやり方があるかもしれません。
1834              <screen># <command>for i in `rpm -qa --last |grep devel |\
1835sed s/devel-/"devel "/ |awk '{print $1}'` ;
1836do echo $i ;
1837rpm -q $i &amp;&amp; rpm -e $i ;
1838rpm -q $i &amp;&amp; apt-get remove $i ;
1839done</command></screen>
1840            </para>
1841
1842          </listitem>
1843
1844        </orderedlist>
1845
1846        <para>ローカルに apt のリポジトリを作成しておくと、apt-get install や apt-get build-dep で、依存関係のチェック等が行えて便利です。</para>
1847
1848</chapter>
1849
1850
1851<!--appendix>
1852%section{デフォルト・マクロ名一覧}
1853</appendix-->
1854
1855<appendix id="group-list">
1856        <title>Vine Linux で使用できるGroup一覧</title>
1857        <para><filename>/usr/share/doc/rpm-*/GROUPS_for_vine.txt</filename> に記述されています。</para>
1858<screen>
1859Applications/Accessories
1860Applications/Administration
1861Applications/Archiving
1862Applications/Development
1863Applications/Documentation
1864Applications/Editors
1865Applications/Editors/Emacs
1866Applications/Edutainment
1867Applications/Games
1868Applications/Graphics
1869Applications/Internet
1870Applications/Multimedia
1871Applications/Other
1872Applications/Productivity
1873Applications/Publishing
1874Applications/Services
1875Applications/System
1876Applications/Text
1877Development/Languages
1878Development/Libraries
1879Development/Tools
1880System Environment/Base
1881System Environment/Daemons
1882System Environment/Kernel
1883System Environment/Libraries
1884System Environment/Shells
1885User Interface/Desktops
1886User Interface/X
1887</screen>
1888
1889        <para>それぞれの Group の簡単な説明です。</para>
1890        <para><filename>/usr/share/doc/rpm-*/GROUPS-DESC_for_vine.txt</filename> に記述されています。</para>
1891<screen>
1892Applications/Accessories
1893   ちょっとした小物や単機能のシンプルなアプリケーション
1894   例) 電卓、辞書等
1895Applications/Administration
1896   システムやデスクトップの設定、管理の為のアプリケーション
1897   (動作に root 権限が必要)
1898   例) synaptic、gnome-system-tools 等
1899Applications/Archiving
1900   ファイルの圧縮や解凍、書庫(アーカイブ)の作成に使用する
1901   アプリケーション
1902   例) bzip2, cpio, file-roller 等
1903Applications/Development
1904   アプリケーションの開発に使用するアプリケーション
1905   例) xxgdb、IDE 等
1906Applications/Documentation
1907   ドキュメントのみのパッケージ
1908   例)Vine-manual、JF 等
1909Applications/Editors
1910   テキストエディタ
1911   例) GEdit、Emacs、Vi 等
1912Applications/Editors/Emacs
1913   Emacs 及び Emacs 用のアプリケーション
1914Applications/Edutainment
1915   教育あるいは科学に関連したアプリケーション
1916   例) gnuplot、dia 等
1917Applications/Games
1918   ゲーム
1919Applications/Graphics
1920   画像を扱うアプリケーション
1921   例) GIMP、Inkscape 等
1922Applications/Internet
1923   インターネットを利用するアプリケーション
1924   例) firefox、Sylpheed、gFTP 等
1925Applications/Multimedia
1926   動画や音楽を扱うアプリケーション
1927   例) Totem、BMP 、XMMS 等。
1928Applications/Other
1929   Applications の他のどの Group にも割り当てられないもの
1930Applications/Productivity
1931   ワープロや表計算、PIM等のアプリケーション
1932   例) abiword、Gnumeric 等
1933Applications/Publishing
1934   印刷やフォントに関連したアプリケーション
1935   例) ghostscript, tetex 等
1936Applications/Services
1937   ウェブサーバーやメールサーバー及び各種 Daemon
1938   例) Apache、Postfix 等
1939Applications/System
1940   システムを設定したり監視したりするアプリケーション
1941   例)gnome-system-monitor、mtools 等 (ユーザー権限で動作可能)
1942Applications/Text
1943   テキストの処理に使用するアプリケーション
1944   例) less, nkf, namazu 等
1945Development/Libraries
1946   開発に必要なヘッダファイル等を含むパッケージ
1947   例) *-devel
1948Development/Languages
1949   開発に使用する各種言語用のパッケージ
1950   例) perl、php、ruby 等
1951Development/Tools
1952   開発に必要な各種 Tool を含むパッケージ
1953   例) automake、gettext 等
1954System Environment/Base
1955   システムの動作に必要な最小構成のパッケージ
1956   ※(インストーラでいうところの最小構成に該当)
1957System Environment/Daemons
1958   システムの動作で必要なサービス及びデーモン
1959   例) dbus、hal 等
1960System Enviroment/Kernel
1961   カーネル
1962System Environment/Libraries
1963   システムの動作に必要な各種ライブラリ
1964   例) gtk2、libpng 等
1965System Environment/Shells
1966   各種シェル
1967User Interface/Desktops
1968   デスクトップ環境やウィンドウマネージャのアプリケーション
1969   例) KDE、Xfce 、Fluxbox 等
1970User Interface/X
1971   XOrgと、それに付属するパッケージApplications/Accessories
1972</screen>
1973</appendix>
1974
1975<!--appendix>
1976%section{パッケージ固有の作法等について}
1977</appendix-->
1978
1979<appendix id="making-rpm-b">
1980        <title>パッケージ固有の作法等について</title>
1981
1982        <sect1 id="add_to_gnome_menu">
1983                <title>GNOME,KDE,Xfce のメニューに追加するために</title>
1984
1985                <para>GNOME,KDE,Xfce のメニューに追加するためには、ディレクトリ<filename>/usr/share/applications</filename><filename>アプリケーションの名前.desktop</filename> というファイル(以降 desktopファイルと呼びます)をインストールする必要があります。</para>
1986
1987                <para>desktopファイルを取り扱う <command>desktop-file-install</command>コマンド、<command>desktop-file-validate</command>コマンド、<command>update-desktop-database</command>コマンドは、<filename>desktop-file-utils</filename>というパッケージに含まれています。</para>
1988
1989                <para>desktopファイルの扱いは次のような手順になります。</para>
1990                <itemizedlist>
1991                        <listitem><para>
1992                                        %installタグの部分で次のようにして desktopファイルを<filename>%{buildroot}/%{_datadir}/applications</filename>にインストールしておきます。
1993                                       
1994<screen>
1995%install
1996%{__mkdir_p} %{buildroot}/%{_datadir}/applications
1997%{_bindir}/desktop-file-install --dir=%{buildroot}/%{_datadir}/applications <filename>hoge.desktop</filename>
1998</screen>
1999
2000                        </para></listitem>
2001                        <listitem><para>
2002                                        %checkタグの部分で次のようにして desktopファイルが書式にしたがって正しく書かれているかをチェックします。
2003<screen>
2004%check
2005%{_bindir}/desktop-file-validate %{buildroot}/%{_datadir}/applications/hoge.desktop
2006</screen>
2007
2008                                </para>
2009                                <para>ソースから make する、make install するなどの部分ではこのチェックが行われないことも多いので、%checkタグの部分でチェックを行うようにしておきます。</para>
2010                                <para><command>desktop-file-validate</command>コマンドは複数のファイルをまとめて処理できないので、*.desktop のようにはできません。desktopファイルの数だけ、コマンドを書いてください。もちろん、for文などを使ってもかまいません。
2011                        </para></listitem>
2012                        <listitem><para>
2013                                        %postタグや%postunタグの部分で
2014<screen>
2015%post
2016if [ -x %{_bindir}/update-desktop-database ] ; then
2017%{_bindir}/update-desktop-database %{_datadir}/applications
2018fi
2019
2020%postun
2021if [ -x %{_bindir}/update-desktop-database ] ; then
2022%{_bindir}/update-desktop-database %{_datadir}/applications
2023fi
2024</screen>
2025                                        のように処理します。
2026                                        <command>update-desktop-database</command> コマンドがインストールされていなければ実行しない、という形にすることで、twm や icewm や WindowMaker など、GNOME等のメニューとは直接関係ないウィンドウマネージャを使用しているときに、deskto-file-utils に依存せずにすむようになります。
2027                        </para></listitem>
2028                        <listitem><para>
2029                                        他のファイルと同じように %filesの部分に入れておきます。
2030<screen>%files
2031%{_datadir}/applications/<filename>hoge.desktop</filename></screen>
2032                        </para></listitem>
2033                        <listitem><para>
2034                                        BuildRequires で desktop-file-utils を指定します。
2035                                        <screen>BuildRequires(install,check): <filename>desktop-file-utils</filename></screen>
2036                        </para></listitem>
2037                </itemizedlist>
2038        </sect1>
2039
2040        <sect1 id="emacs_lisp_package">
2041                <title>Emacs Lisp のパッケージ</title>
2042
2043                <para>Emacsen には emacsen-common というパッケージがあり、
2044                        インストールされている Emacsen の FLAVOR の情報や、
2045                        FLAVOR ごとに、その FLAVOR で byte compile された Emacs Lisp パッケージのリストを管理するという仕組みがあります。</para>
2046                <para>この仕組みを用いることで以下のようなことが可能となっています。</para>
2047                <itemizedlist>
2048                        <listitem><para>
2049                                        パッケージのインストール時に、すでにインストールされている Emacsen の FLAVOR ごとにそれぞれ byte compile して elc ファイルを作成する。</para></listitem>
2050                        <listitem><para>
2051                                        パッケージのアンインストール時に、すべての FLAVOR からパッケージの elc ファイルを削除する。</para></listitem>
2052                        <listitem><para>
2053                                        Emacsen の FLAVOR のインストール時、アンインストール時に、その FLAVOR で byte compile する、FLAVOR で byte compile した elc を削除する。</para></listitem>
2054                </itemizedlist>
2055                <para>この仕組みを利用するために、Emacs Lisp のパッケージでは以下のようなことをしておきます。</para>
2056                <itemizedlist>
2057                        <listitem><para>
2058                                        %installタグの部分では byte compile していない el ファイルを
2059                                        %{_datadir}/emacs/site-lisp/%{name} 以下にインストールします。</para></listitem>
2060                        <listitem><para>
2061                                        Source2 や Source3 などに byte-compile と install を行うためのスクリプトAと、
2062                                        byte-compile してできた elc ファイルを削除するためのスクリプトBを用意します。
2063                                        インストールに使える Makefile 等がある場合は %installタグの部分で
2064                                        %{_datadir}/emacs/site-lisp/%{name} 以下に Makefile 等をインストールしておき、
2065                                        スクリプトの中から利用できるようにします。</para></listitem>
2066                        <listitem><para>
2067                                        install 用のスクリプトAでは、
2068                                        Emacsen の FLAVOR に応じて %{_datadir}/FLAVOR/site-list/%{name}/ 以下に
2069                                        bytecompile した elc ファイルをインストールするようにします。</para></listitem>
2070                        <listitem><para>
2071                                        uninstall 用のスクリプトBでは、
2072                                        Emacsen の FLAVOR に応じてスクリプトAでインストールした elc ファイルを削除するようにしておきます。</para></listitem>
2073                        <listitem><para>
2074                                        %installタグの部分で次のようにして、スクリプトAとスクリプトBをインストールします。
2075<screen>
2076%_installemacsenscript %{name} %{SOURCE2}
2077
2078%_removeemacsenscript  %{name} %{SOURCE3}
2079
2080</screen>
2081                                        スクリプトA,B はそれぞれ /usr/lib/emacsen-common/packages/install/ , /usr/lib/emacsen-common/packages/remove/ に、
2082                                        %{name} という名前でインストールされます。
2083                                        これによって、スクリプトA,B は、Emacs の FLAVOR がインストール、アンインストールされた時に実行されるようになります。</para>
2084                                <para>%files の部分でそれぞれのスクリプトを記述しておきます。</para>
2085<screen>%{_libdir}/emacsen-common/packages/install/%{name}
2086%{_libdir}/emacsen-common/packages/remove/%{name}</screen></listitem>
2087                        <listitem><para>
2088                                        %postタグの部分は次のように記述しておきます。
2089                                        if [ "$1" = 数字 ]; then ; fi は、インストール時、アップグレード時、アンインストール時、それぞれで違う動作をさせるためのものです。<xref linkend="making-rpm-9" />を参照してください。
2090<screen>
2091%post
2092#
2093# bytecompile and install
2094#
2095
2096if [ "$1" = 2 ]; then
2097%_emacsenPackageRemove %{name}
2098
2099fi
2100
2101%_addemacsenlist %{name}
2102
2103%_emacsenPackageInstall %{name}
2104
2105%preun
2106
2107if [ "$1" = 0 ]; then
2108%_emacsenPackageRemove %{name}
2109
2110%_removeemacsenlist %{name}
2111
2112fi
2113</screen>
2114                                </para>
2115                                <para>%_emacsenPackageInstall と %_emacsenPackageRemove は スクリプトA,B を実行するためのマクロです。</para>
2116                                <para>%_addemacsenlist と %_removeemacsenlist は、インストール済み Emacs Lisp パッケージのリストにパッケージを登録する、削除するというマクロです。</para>
2117                                <para>
2118                                        %_installemacsenscript, %_removeemacsenscript, %_emacsenPackageRemove, %_addemacsenlist,
2119                                        %_removeemacsenlist の行の次の行は、空行にしておかないとエラーとなるようです。</para></listitem>
2120                </itemizedlist>
2121        </sect1>
2122
2123
2124        <sect1 id="add_to_alternatives">
2125                <title>alternatives を利用するパッケージ</title>
2126
2127                <para>alternatives については <ulink url="update-alternatives.html">update-alternatives による標準コマンドの切り替え</ulink> にまとめられています。</para>
2128
2129                <para>
2130                        alternatives に登録する場合には %post と %preun で次のようにします。
2131<screen>%post
2132if [ "$1" = "1" ]; then
2133%{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度
2134fi
2135
2136%preun
2137if [ "$1" = "0" ]; then
2138%{_syssbindir}/update-alternatives --remove 総称名 選択候補
2139fi</screen>
2140                </para>
2141                <para>Provides と Requires を指定します。
2142<screen>Provides: 総称名 リンク名
2143Requires: update-alternatives
2144Requires(post,preun): %{_syssbindir}/update-alternatives</screen>
2145                        とします。
2146                </para>
2147
2148                <para>
2149                        Provides の リンク名 については、無くても問題はありませんが、%files には書かれないファイルなので、Provides に書いておいたほうがよいと思います。
2150                </para>
2151
2152                <para>
2153                        %post での登録と %preun での削除は、インストール時とアンインストール時だけに必要で、アップグレード時に実行してしまうと問題があるので、"$1" が 1 の場合(インストール時)と 0 の場合(アンインストール時)だけ処理するように if 文 にしておきます。
2154                </para>
2155
2156                <para>
2157                        %post での処理を、パッケージのアップグレード時にも行ってしまうと、パッケージのインストール後にユーザが優先度を変更していた場合、それを無視してパッケージ側で優先度を勝手に変更してしまうことになります。
2158                </para>
2159
2160                <para>
2161                        新規パッケージではなく、既存のパッケージの %post,%preun に update-alternatives の処理を追加する場合には、次のようにするとよいかもしれません。
2162<screen>%post
2163if [ "$1" = "1" ]; then
2164if [ "`%{_sysbindir/update-alternatives --list '総称名' | grep -c 'リンク名'`" = "0" ]; then
2165%{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度
2166fi
2167fi
2168
2169%preun
2170if [ "$1" = "0" ]; then
2171%{_syssbindir}/update-alternatives --remove 総称名 選択候補
2172fi</screen>
2173                </para>
2174
2175                <para>
2176                        %triggerin と %triggerpreun と %preun を用いることで、他のパッケージが持っているファイルを alternatives で登録するようなパッケージを作ることもできます。
2177
2178<screen>Provides: 総称名 リンク名
2179Requires: update-alternatives
2180Requires(preun,triggerin,triggerpreun): %{_syssbindir}/update-alternatives
2181
2182%preun
2183if [ "$1" = "0" ]; then
2184%{_syssbindir}/update-alternatives --remove-all 総称名
2185fi
2186
2187%triggerin -- 対象となるパッケージ
2188if [ "$1" = "1" ]; then
2189echo triggerin scriptlet by %{name} start
2190%{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度
2191echo triggerin scriptlet by %{name} end
2192fi
2193
2194%triggerpreun -- 対象となるパッケージ
2195if [ "$1" = "0" ]; then
2196echo triggerpreun scriptlet by %{name} start
2197%{_syssbindir}/update-alternatives --remove 総称名 選択候補
2198echo triggerin scriptlet by %{name} end
2199fi</screen>
2200                </para>
2201        </sect1>
2202</appendix>
2203
2204<appendix id="custom-dir">
2205        <title>パッケージ作成に必要なディレクトリの変更方法</title>
2206        <para>パッケージ作成に必要なディレクトリを変更したいときには、<filename>~/.rpmmacros</filename>の設定を変更します。</para>
2207        <example>
2208                <title>トップディレクトリの変更例</title>
2209                <para>パッケージ作成に必要なディレクトリを全て/home/user/VinePlus以下に格納する場合は、以下のように変更します。</para>
2210                <screen>%_topdir   /home/user/VinePlus</screen>
2211        </example>
2212        <para>また、以下のマクロを設定することで個別に設定することもできます。</para>
2213        <table>
2214                <title>ディレクトリ制御用マクロ</title>
2215                <tgroup cols="3">
2216                        <thead>
2217                                <row>
2218                                        <entry>マクロ名</entry>
2219                                        <entry>使用目的</entry>
2220                                        <entry>既定値</entry>
2221                                </row>
2222                        </thead>
2223                        <tbody>
2224                                <row>
2225                                        <entry>%_builddir</entry>
2226                                        <entry>ソースの展開・ビルド用</entry>
2227                                        <entry>%_topdir/BUILD</entry>
2228                                </row>
2229                                <row>
2230                                        <entry>%_rpmdir</entry>
2231                                        <entry>バイナリパッケージ格納用</entry>
2232                                        <entry>%_topdir/RPMS</entry>
2233                                </row>
2234                                <row>
2235                                        <entry>%_srcrpmdir</entry>
2236                                        <entry>ソースパッケージ格納用</entry>
2237                                        <entry>%_topdir/SRPMS</entry>
2238                                </row>
2239                                <row>
2240                                        <entry>%_specdir</entry>
2241                                        <entry>specファイル格納用</entry>
2242                                        <entry>%_topdir/SPECS</entry>
2243                                </row>
2244                                <row>
2245                                        <entry>%_sourcedir</entry>
2246                                        <entry>アプリケーションのソース・パッチ格納用</entry>
2247                                        <entry>%_topdir/SOURCES</entry>
2248                                </row>
2249                        </tbody>
2250                </tgroup>
2251        </table>
2252        <warning>
2253                <title>ディレクトリの作成を忘れないように</title>
2254                <para>ここで説明したマクロを設定した場合は、設定に合わせて書き込み可能なディレクトリを作成する必要があります。</para>
2255                <para>特に%_rpmdirを設定したとき(%_topdirの変更による位置の変化も含む)には、設定したディレクトリの中に i386・noarch などのarchitecture 毎のディクレトリも忘れずに作成してください。</para>
2256        </warning>
2257</appendix>
2258
2259<appendix id="tag-dependencies-information">
2260        <title>依存情報の記述に関する詳細</title>
2261
2262        <sect1>
2263                <title>Requires</title>
2264                <para>
2265                        rpmパッケージをbuildするときには、
2266                        そのパッケージに含まれるバイナリの実行に必要なライブラリ名も、
2267                        自動的にRequiresに加えられます(正確には必要なライブラリのsonameが加えられます)。
2268                        rpmパッケージをinstallするときに、必要なライブラリがシステム上にないと、
2269                        libhoge.so is neededとかいって、おこられますが、
2270                        libhoge.soがなんというパッケージに入ってるかわからずに困ることがよくあるので、
2271                        必要なパッケージ名をきちんとRequiresに書くように心がけましょう。
2272                </para>
2273                <para>
2274                        筆者はbuildした時に出力されるメッセージの
2275                        <screen>Requires: /bin/sh libICE.so.6 libORBit-2.so.0</screen>
2276                        といった部分を、(bash の for文 を利用して)<command>slocate</command> と <command>rpm -qf</command> で処理してパッケージ名を調べています。
2277                        <screen>$ for i in libICE.so.6 libORBit-2.so.0 ;
2278                                do slocate $i |xargs rpm -qf ;
2279                                done | sort -u</screen>
2280                </para>
2281                <para>
2282                        Requires には、従来の Requires: だけではなく Requires(pre): などのように
2283                        ( ) をつけて厳密に指定することもできるようになりました。
2284                </para>
2285
2286                <para>
2287                        ( ) の中には<xref linkend="Requires-options" />にあるものが入ります。
2288                        ( ) の中に入る項目は <xref linkend="making-rpm-5-2" /> のタグ等に対応しています。どの部分で必要になるかを書きます。
2289                </para>
2290
2291                <para>
2292                        Requires( ): のように ( ) の中に何も書かなかった場合は、Requires: として扱われます。
2293                </para>
2294
2295                <para>
2296                        ( ) の中は、Requires(pre,preun,post,postun): のように , を用いることで複数を同時に指定できます。
2297                </para>
2298
2299                <table id="Requires-options">
2300                        <title>Requires の ( ) の中で利用できるもの</title>
2301                        <tgroup cols="2">
2302                                <thead>
2303                                        <row><entry>項目</entry><entry>対応するタグ等</entry></row>
2304                                </thead>
2305                                <tbody>
2306                                        <row><entry>pre</entry><entry>%pre で必要になるもの</entry></row>
2307                                        <row><entry>preun</entry><entry>%preun で必要になるもの</entry></row>
2308                                        <row><entry>post</entry><entry>%post で必要になるもの</entry></row>
2309                                        <row><entry>postun</entry><entry>%postun で必要になるもの</entry></row>
2310                                        <row><entry>prereq</entry><entry>インストール時に必要になるもの</entry></row>
2311
2312                                        <row><entry>verify</entry><entry>%verifyscript で必要になるもの</entry></row>
2313                                        <row><entry>interp</entry><entry>スクリプト部を解釈(interpret)するために必要になるもの</entry></row>
2314                                        <row><entry>rpmlib</entry><entry>rpmのデータベース等を扱うために必要なもの</entry></row>
2315                                </tbody>
2316                        </tgroup>
2317                </table>
2318
2319                <para>
2320                        Requires(pre): などを指定した場合には、<emphasis>インストール、アンインストールされる順番が保証されます。</emphasis>
2321                        指定されたパッケージは<emphasis>先にインストールされ、後にアンインストールされます。</emphasis>
2322                </para>
2323
2324                <para>prereq は pre,preun,post,postun などよりも曖昧な書き方ですが、以前 PreReq で書かれていたものを Requires に機械的に置き換える場合には利用できると思います。</para>
2325
2326                <para>rpmlib については、通常、build 時に自動的に追加されるものなので、特別な機能を利用するのでなければ、記述する必要はありません。</para>
2327
2328                <para>interp も、自動的に追加されますが、特別な shell などを利用する場合には記述しておいた方がよいでしょう。</para>
2329        </sect1>
2330
2331        <sect1>
2332                <title>Provides</title>
2333                <para>
2334                        日本語化されたgsであるgs<emphasis>j</emphasis>というパッケージがあるとします。
2335                        このパッケージはもともとのgsと同等の機能を持っています。
2336                        インストールしたいhoge-1.1-2.rpmがgsを必要(Requires)としてるとしましょう。
2337                        しかし、gs<emphasis>j</emphasis>がインストールされているためにgsはインストールされていません。
2338                        このとき、hoge.rpmをインストールしようとするとrpmコマンドは
2339                        gsが無いためにエラー・メッセージを出します。
2340                </para>
2341                <para>
2342                        このようなトラブルをさけるためには、gs<emphasis>j</emphasis>を作るときに、
2343                        <screen>Provides: gs</screen>
2344                        と書いておくと、gs<emphasis>j</emphasis>はgsパッケージを提供することができます。
2345                </para>
2346                <para>
2347                        また、あるパッケージ A がpdfを読むツールをRequiresするときに、
2348                        xpdf と gs(pdf対応) のように複数の選択肢がある場合、
2349                        xpdf と gs の Providesに
2350                        <screen>Provides: pdf-reader</screen>
2351                        と仮想的なパッケージ名(仮想パッケージ virtual package)を書いておいて、
2352                        A で Requires: pdf-reader としておけば、パッケージ名を限定せずに、
2353                        なんらかのpdf-readerがインストールされてることを要求できます。
2354                        たとえば emacs lisp のパッケージでは emacs や xemacs ではなく
2355                        emacsen という仮想パッケージを要求するものが多いです。
2356                </para>
2357        </sect1>
2358       
2359        <sect1>
2360                <title>BuildRequires</title>
2361                <para>
2362                        コンパイラなどのパッケージや、
2363                        ヘッダーファイルやライブラリなどを含んだ hoge-devel
2364                        などのパッケージで不足するものがないか確認しましょう。
2365                </para>
2366                <para>
2367                        また、Source: で指定されたファイルが hoge.zip のように zip 形式の場合は、
2368                        ソースの展開に unzip のパッケージが、
2369                        同様に lzh 形式なら lha のパッケージが必要になります。
2370                </para>
2371                <para>
2372                        Vine Linux では <filename>build-essential</filename> という仮想パッケージがあり、
2373                        このパッケージをインストールすることでたくさんのパッケージがインストールされます。
2374                        参照 <ulink url="using-rpm-4.html#using-rpm-4-2">環境設定</ulink>
2375                </para>
2376                <para>
2377                        パッケージの作成時には build-essential をインストールすることを前提としているので、
2378                        build-essential に含まれている make,gzip,bzip2,tar,patch,findutils,coreutils,file,libtool,automake,autoconf などは省略してかまいません。
2379                        gcc や gettext などは、ソースが C言語であることや、メッセージが国際化されていることなどを示す意味もあるので、必要であれば書いておいた方がいいかもしれません。
2380                </para>
2381                <para>
2382                        <emphasis>%prep</emphasis>,<emphasis>%setup</emphasis>,<emphasis>%build</emphasis>,<emphasis>%install</emphasis> で必要になるコマンドやパッケージを指定します。
2383                </para>
2384                <para>
2385                        Requires( ): と同じように、BuildRequires も ( ) をつけて詳細な指定をすることができます。
2386                </para>
2387                <para>
2388                        ( ) の中には<xref linkend="BuildRequires-options" />にあるものが入ります。
2389                        ( ) の中に入る項目は <xref linkend="making-rpm-5-2" /> のタグ等に対応しています。どの部分で必要になるかを書きます。
2390                </para>
2391                <table id="BuildRequires-options">
2392                        <title>BuildRequires の ( ) の中で利用できるもの</title>
2393                        <tgroup cols="2">
2394                                <thead>
2395                                        <row><entry>項目</entry><entry>対応するタグ等</entry></row>
2396                                </thead>
2397                                <tbody>
2398                                        <row><entry>prep</entry><entry>%prep,%setup で必要になるもの</entry></row>
2399                                        <row><entry>build</entry><entry>%build で必要になるもの</entry></row>
2400                                        <row><entry>install</entry><entry>%install,%check で必要になるもの</entry></row>
2401                                        <row><entry>clean</entry><entry>%clean で必要になるもの</entry></row>
2402                                </tbody>
2403                        </tgroup>
2404                </table>
2405        </sect1>
2406
2407        <sect1>
2408                <title>BuildPrereq</title>
2409                <para>
2410                        BuildRequiresと同様にパッケージの作成の時に必要になるパッケージを書きます。
2411                        BuildRequiresとの違いは必要とするパッケージを<emphasis>作成する順番を決める</emphasis>ということです。
2412                </para>
2413                <para>
2414                        BuildRequiresと同様、BuildPrereq(prep) のように prep,build,install,clean を指定できます。
2415                </para>
2416                <!-- 参照 http://www.redhat.com/archives/rpm-list/2004-April/msg00164.html -->
2417                <para>
2418                        A というパッケージがパッケージ作成時に B と C の二つのパッケージを必要としているとします。
2419                        この場合 B と C をインストールすれば、A というパッケージを作成することができます。
2420                </para>
2421                <para>
2422                        このときに B と C のパッケージがなくて、それぞれ作る必要があったとします。
2423                        B と C がそれぞれ独立したものではなく、C のパッケージ作成時に B が必要で、
2424                        できあがった C は B の特定のバージョンを必要とするパッケージになるということがあります。
2425                        このような場合には BuildPrereq に B を BuildRequires に C を指定し、
2426                        B を C よりも先に作成する必要があるということを示しておきます。
2427                </para>
2428        </sect1>
2429</appendix>
2430
2431<appendix id="mr-othertag">
2432        <title>SPECファイルで使用できる便利なタグ</title>
2433        <variablelist>
2434                <varlistentry>
2435                        <term>Prefix</term>
2436                        <listitem><para>
2437                                        このタグを使うと、
2438                                        rpmパッケージをインストールする時にインストールディレクトリをコントロールできます。
2439                                        例えば、
2440                                        <screen>Prefix: /usr</screen>
2441                                        としていて、ファイル定義部で
2442                                        <screen>
2443                                                %files
2444                                                /usr/bin/fuga</screen>
2445                                        と定義してたとしましょう。このパッケージをインストールする時に、
2446                                        --prefix /usr/local とオプション指定すると、
2447                                        fugaは/usr/local/bin/fuga.binにインストールされます。
2448                        </para></listitem>
2449                </varlistentry>
2450                <varlistentry>
2451                        <term>BuildArch</term>
2452                        <listitem><para>
2453                                        書いたspecファイルを使って生成されるrpmパッケージのアーキテクチャを指定できます。
2454                                        例えば、elファイルとかシェルスクリプトとかばかりを含むrpmパッケージを作るときには、
2455                                        i386やalphaなどのアーキテクチャに依存しないnoarchであることを、
2456                                        <screen>BuildArch: noarch</screen>
2457                                        というふうに明示します。
2458                                        このような指定をしておくとnoarch.rpmという拡張子のつくrpmパッケージが作成できて、
2459                                        いろいろなアーキテクチャ上で共用できます。
2460                        </para></listitem>
2461                </varlistentry>
2462                <varlistentry>
2463                        <term>ExclusiveArch</term>
2464                        <listitem><para>
2465                                        specファイルや src.rpmパッケージから、パッケージを生成 できる アーキテクチャーを指定します。
2466                                        たとえば、ExclusiveArch: i386 とすると、i386 以外の ppc,i486,i586,i686,x86_64 といったアーキテクチャーではバイナリパッケージを生成できなくなります。
2467                        </para></listitem>
2468                </varlistentry>
2469                <varlistentry>
2470                        <term>ExcludeArch</term>
2471                        <listitem><para>
2472                                        specファイルや src.rpmパッケージから、パッケージを生成 できない アーキテクチャーを指定します。
2473                                        たとえば、ExcludeArch: ppc とすると、ppc ではバイナリパッケージを生成できなくなります。ppc 以外の i386,i486,i586,i686,x86_64 といったアーキテクチャーではバイナリパッケージを生成できます。
2474                        </para></listitem>
2475                </varlistentry>
2476        </variablelist>
2477</appendix>
2478
2479<appendix id="mr-changelog">
2480        <title>更新記録(1999/2/16以降)</title>
2481        <itemizedlist>
2482                <listitem>
2483                        <para>2009/6/26</para>
2484                        <itemizedlist>
2485                                <listitem><para>「rpm関連ファイルの説明」を「用語の解説」に修正</para></listitem>
2486                                <listitem><para>「rpmパッケージをつくるための準備」を「パッケージ作成毎の準備」に変更</para></listitem>
2487                        </itemizedlist>
2488                </listitem>
2489                <listitem>
2490                        <para>2009/6/25</para>
2491                        <itemizedlist>
2492                                <listitem><para>「はじめに」を「文書の概要」と「さらに深く知りたい方へ」に分割</para></listitem>
2493                                <listitem><para>「環境設定」を「rpmパッケージをつくるための準備」から分割</para></listitem>
2494                                <listitem><para>「更新記録」を付録に変更</para></listitem>
2495                        </itemizedlist>
2496                </listitem>
2497                <listitem>
2498                        <para>2007/10/3</para>
2499                        <itemizedlist>
2500                                <listitem><para>Appendix B で desktop file に関して修正</para></listitem>
2501                        </itemizedlist>
2502                </listitem>
2503                <listitem>
2504                        <para>2007/9/10</para>
2505                        <itemizedlist>
2506                                <listitem><para>Appendix B で desktop-file-install を使うよう修正</para></listitem>
2507                        </itemizedlist>
2508                </listitem>
2509                <listitem>
2510                        <para>2007/7/21</para>
2511                        <itemizedlist>
2512                                <listitem><para>Appendix B に desktop-file-validate について追記</para></listitem>
2513                        </itemizedlist>
2514                </listitem>
2515                <listitem>
2516                        <para>2007/6/26</para>
2517                        <itemizedlist>
2518                                <listitem><para>Copyright と Serial について追記</para></listitem>
2519                        </itemizedlist>
2520                </listitem>
2521                <listitem>
2522                        <para>2007/6/25</para>
2523                        <itemizedlist>
2524                                <listitem><para>%prep での %{SOURCE数字} の利用例を記載</para></listitem>
2525                                <listitem><para>%post での install-info の例で、install時にのみ処理を行うように if文 を追加</para></listitem>
2526                                <listitem><para>%files と Requires の探し方のヒントを記載</para></listitem>
2527                                <listitem><para>ExclusiveArch と ExcludeArch の説明を記載</para></listitem>
2528                                <listitem><para>Appendix B にalternatives を利用するパッケージについて追加</para></listitem>
2529                        </itemizedlist>
2530                </listitem>
2531                <listitem>
2532                        <para>2007/5/23</para>
2533                        <itemizedlist>
2534                                <listitem><para>Requires( ),BuildRequires( ) の説明を追加</para></listitem>
2535                                <listitem><para>Prereq の代わりに Requires(pre,post) 等の使用を推奨</para></listitem>
2536                                <listitem><para>%verifyscript について記載</para></listitem>
2537                                <listitem><para>%verify について記載</para></listitem>
2538                                <listitem><para>パッケージ作成後に確認することを記載</para></listitem>
2539                                <listitem><para>リンクの修正</para></listitem>
2540                        </itemizedlist>
2541                </listitem>
2542                <listitem>
2543                        <para>2006/12/8</para>
2544                        <itemizedlist>
2545                                <listitem><para>Epoch の使用について記載</para></listitem>
2546                                <listitem><para>install-info --delete の記述を修正</para></listitem>
2547                                <listitem><para>Group 一覧、説明 の typo を修正</para></listitem>
2548                        </itemizedlist>
2549                </listitem>
2550                <listitem>
2551                        <para>2006/11/17</para>
2552                        <itemizedlist>
2553                                <listitem><para>Group 一覧、説明を rpm-4.4.2-0vl16 にあわせて修正</para></listitem>
2554                        </itemizedlist>
2555                </listitem>
2556                <listitem>
2557                        <para>2006/11/8</para>
2558                        <itemizedlist>
2559                                <listitem><para>License の説明を修正</para></listitem>
2560                                <listitem><para>%check の説明を追記</para></listitem>
2561                                <listitem><para>rpmbuild -bi で %check も実行されることを記述</para></listitem>
2562                                <listitem><para>Vine Linux 4.x での Group 一覧、説明を修正</para></listitem>
2563                                <listitem><para>Appendix B にGNOMEのメニューについて追加</para></listitem>
2564                        </itemizedlist>
2565                </listitem>
2566                <listitem>
2567                        <para>2006/11/3</para>
2568                        <itemizedlist>
2569                                <listitem><para>Vine Linux 4.x での Group 一覧、説明を追加</para></listitem>
2570                                <listitem><para>BuildRequires と BuildConflictsの説明を追加</para></listitem>
2571                                <listitem><para>Requires と Prereq、BuildRequires と BuildPrereq の説明を修正、それぞれの違いを追記</para></listitem>
2572                                <listitem><para>%config に noreplace,missingok の説明を追加</para></listitem>
2573                                <listitem><para>マクロの説明を追加</para></listitem>
2574                                <listitem><para>spec の例を修正、マクロを使用した spec の例を追加</para></listitem>
2575                                <listitem><para>%check の説明を追加</para></listitem>
2576                                <listitem><para>%post,%postun に info ファイルの例を追加</para></listitem>
2577                                <listitem><para>タグの -p の説明を追加</para></listitem>
2578                                <listitem><para>Appendix B パッケージ固有の作法等についてを作成</para></listitem>
2579                        </itemizedlist>
2580                </listitem>
2581                <listitem>
2582                        <para>2006/10/26</para>
2583                        <itemizedlist>
2584                                <listitem><para>全体を見直し</para></listitem>
2585                        </itemizedlist>
2586                </listitem>
2587                <listitem>
2588                        <para>2004/9/19</para>
2589                        <itemizedlist>
2590                                <listitem><para>rpmbuildを推奨する様、追加。</para></listitem>
2591                        </itemizedlist>
2592                </listitem>
2593                <listitem>
2594                        <para>2004/6/30</para>
2595                        <itemizedlist>
2596                                <listitem><para>tex形式から、DocBook SGML形式に変更。</para></listitem>
2597                        </itemizedlist>
2598                </listitem>
2599                <listitem>
2600                        <para>2000/10/30</para>
2601                        <itemizedlist>
2602                                <listitem><para>細かい修正をすこし</para></listitem>
2603                                <listitem><para>rpm-3.0.5 以降で binary が strip されることと、man/info がgzされることを記述</para></listitem>
2604                                <listitem><para>Prereq の説明追加</para></listitem>
2605                                <listitem><para>rpm -bp の説明追加</para></listitem>
2606                        </itemizedlist>
2607                </listitem>
2608                <listitem>
2609                        <para>2000/3/7</para>
2610                        <itemizedlist>
2611                                <listitem><para>minor なタイポや記述の修正</para></listitem>
2612                                <listitem><para>%setup の記述修正(-a,-b)および追加(-q)</para></listitem>
2613                                <listitem><para>.rpmmacros の説明に .rpmrc の場合も併記</para></listitem>
2614                        </itemizedlist>
2615                </listitem>
2616                <listitem>
2617                        <para>1999/9/3</para>
2618                        <itemizedlist>
2619                                <listitem><para>.rpmmacros の記述追加(rpm-3.0.x 対応)</para></listitem>
2620                                <listitem><para>BuildPrereq に関する記述を追加</para></listitem>
2621                        </itemizedlist>
2622                </listitem>
2623                <listitem>
2624                        <para>1999/2/16</para>
2625                        <itemizedlist>
2626                                <listitem><para>Summary(ja), %description -l ja, %changelog に関する記述を追加</para></listitem>
2627                                <listitem><para>その他細かい修正</para></listitem>
2628                        </itemizedlist>
2629                </listitem>
2630        </itemizedlist>
2631</appendix>
2632
2633<appendix id="mr-more">
2634        <title>さらに深く知りたい方へ</title>
2635        <para>rpmパッケージの作り方についてさらに知りたい人は、
2636                <ulink url="http://www.linux.or.jp/JF/JFdocs/archive/RPM-BUILD-HOWTO.html">RPM-BUILD-HOWTO</ulink>
2637                (古高さん、石岡さん著、JFにあります)や
2638                <ulink url="http://www.rpm.org/max-rpm/index.html">Maximum-RPM</ulink>(英語です。)を読みましょう。
2639                どちらも、書かれてからだいぶ時間が経っていますが、参考になると思います。</para>
2640
2641        <note>
2642                <para>RPM-BUILD-HOWTO は JF というパッケージがインストールされていれば、
2643                        <ulink url="file:///usr/share/doc/JF/archive/RPM-BUILD-HOWTO.txt.gz">/usr/share/doc/JF/archive/RPM-BUILD-HOWTO.txt.gz</ulink> にあります。</para>
2644        </note>
2645
2646        <para>また、rpm付属のドキュメントが /usr/share/doc/rpm-version/ 以下にあります。(英語です。)</para>
2647        <para>細かなことについて知りたい場合は、apt-get source rpm , rpm -bp rpm.spec などとして、rpm 自体のソースを読むのもよいでしょう。</para>
2648
2649        <para>Vine Linux では <ulink url="http://vinelinux.org/packaging.html">パッケージングに関する指針</ulink> というドキュメントもあります。Vine Seed や Vine Plus のパッケージを作成する場合にはこの指針に従ってください。</para>
2650</appendix>
2651
2652</book>
2653
2654<!--
2655                Local Variables:
2656                encode: utf-8-unix
2657                mode: nxml
2658                End:
2659-->
Note: See TracBrowser for help on using the repository browser.