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

Revision 122, 126.2 KB checked in by yasumichi, 15 years ago (diff)

add admonition graphics.

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