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