Changes between Initial Version and Version 1 of docs/making-rpm/make-spec


Ignore:
Timestamp:
2013/01/31 00:03:48 (11 years ago)
Author:
yasumichi
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • docs/making-rpm/make-spec

    v1 v1  
     1[wiki:docs Vine Linux ドキュメント] / [wiki:../ RPM パッケージの作成方法] / SPEC ファイルの記述 
     2 
     3[[PageOutline]] 
     4 
     5= SPEC ファイルの記述 = 
     6 
     7パッケージ作成の肝となる SPEC ファイルの記述について説明します。 
     8 
     9SPEC ファイルの内容は、以下の主要部分に分類できます。 
     10 
     11* パッケージ情報 
     12* パッケージの作成やインストール等の手順(スクリプト部) 
     13* インストールされるファイルの一覧 
     14* パッケージの変更履歴 
     15 
     16== SPEC ファイルの文字コード == 
     17 
     18SPEC ファイルの文字コードは UTF-8 にしてください。 
     19 
     20== マクロの定義 == 
     21 
     22SPECファイルの冒頭にパッケージのバージョンなど頻繁に使用されるものをマクロとして定義しておくと後々の修正が楽になります。 
     23 
     24{{{ 
     25#!sh 
     26%define macro   literal 
     27}}} 
     28ようにするとパッケージ作成時に %{macro} と書かれた部分を literal に置換して処理します。 
     29 
     30[wiki:../env-and-macro 標準で定義されているマクロ]も参照して下さい。 
     31 
     32== パッケージ情報の記述 == 
     33 
     34rpmコマンドでパッケージに関する問い合わせを実行した場合に表示される情報やパッケージの依存情報などを記述します。 
     35 
     36以下にパッケージ情報の記述例を示します。(# を記述すると # から行末までがコメントとして扱われます。) 
     37 
     38{{{ 
     39#!sh 
     40# 基本情報 
     41Summary: hoge is a harehare horehore 
     42Summary(ja): hoge は harehare な horehore です。 
     43Name: hoge 
     44Version: 1.1 
     45Release: 1%{?_dist_release} 
     46License: GPL2 
     47Group: Applications/Internet 
     48URL: http://www.fugahogo.com/hogehoge.html 
     49Vendor: Project Vine 
     50Distribution: Vine Linux 
     51Packager: yourid,otherid 
     52 
     53# パッケージの作成時に必要となる情報 
     54Source: %{name}-%{version}.tar.gz 
     55Patch: hoge.patch 
     56BuildRoot: %{_tmppath}/%{name}-%{version}-root 
     57 
     58# 依存情報 
     59Requires:       piyo 
     60BuildRequires:  piyo-devel 
     61 
     62# 詳しい解説 
     63%description 
     64Hoge is a harehare horehore and convenient for fugafuga. 
     65Enjoy! 
     66 
     67%description -l ja 
     68hoge は harehare な horehore で、fugafuga するときなどとても便利なツー 
     69ルです。みんなでなかよく使いましょう。 
     70}}} 
     71 
     72基本情報から依存情報の部分は、1行につき1つの情報を記述する構成となっています。 
     73 
     74各行は「Summary:」のようにタグとそれに続くコロンで始まり、さらにタグに対応する情報が続く形式になっています。 
     75 
     76=== 基本情報 === 
     77 
     78==== パッケージ情報の問い合わせ時に表示される情報 ==== 
     79 
     80下記の情報は、rpm -qi などでパッケージに関して問い合わせを行った場合に表示されます。 
     81 
     82||=   タグ   =||=  内容  =|| 
     83||Summary      ||パッケージの簡単な説明を英語で記述します。|| 
     84||Summary(ja)  ||Summaryを日本語で翻訳します。|| 
     85||Name         ||パッケージの名前です。定義以降、%{name} というマクロで参照できます。|| 
     86||Version      ||パッケージのバージョンです。定義以降、%{version} というマクロで参照できます。|| 
     87||Release      ||冒頭の数字は同じバージョンで何回目のリリースになるかを意味します。%{?_dist_release} は、vl7 の様に対象となる Vine Linuxのバージョンに置き換えられます。定義以降、%{release} というマクロで参照できます。|| 
     88||License      ||アプリケーションのライセンス|| 
     89||Group        ||アプリケーションの種類。[wiki:../group-list Vine Linux で使用できる Group 一覧]を参照してください。|| 
     90||Packager     ||パッケージメンテナ。http://trac.vinelinux.org/ へのログインユーザ名を使用してください。複数のメンテナがいる場合、カンマで区切ります。|| 
     91||Distribution ||VinePlusやVineSeedのパッケージは、Vine Linuxを指定します。 
     92||Vendor       ||作成した rpm パッケージに関する責任を負う Vendor 名です。VinePlus や VineSeed のパッケージは、Project Vine を指定します。|| 
     93||Url          ||アプリケーションの情報を提供している URL|| 
     94 
     95==== パッケージ作成時に必要となるタグ ==== 
     96 
     97||=   タグ   =||=  内容  =|| 
     98||Source     ||パッケージ化するアプリケーションのソースファイル名。ソースの入手先を明示するために URL 形式で記述することも可能。|| 
     99||Patch      ||[wiki:../preparation#パッチの用意 パッチの用意]で用意したパッチファイルを指定します。書式は Source と同じです。|| 
     100||!BuildRoot ||仮想インストールのためのディレクトリ名を書きます。直接ディレクトリ名を書くのではなく、例のようにマクロを利用してください。 
     101 
     102複数のソースファイルやパッチがあるときは Source0、Source1、... や Patch0、Patch1、... というふうに番号をふって列挙します。(Source0 は、Source と省略できます。) 
     103 
     104Souce数字 で指定したファイルは %{SOURCE数字} というマクロとしてスクリプト部の %prep や %install などの部分で利用できます。 
     105 
     106==== 依存情報 ==== 
     107 
     108パッケージの依存情報など他のパッケージとの関係を示すには、以下のようなタグを使用します。 
     109 
     110||=   タグ   =||=  内容  =|| 
     111||Requires        ||作成している RPM パッケージが動作するのに必要なパッケージ名|| 
     112||!BuildRequires  ||パッケージの作成時に必要となるパッケージ名|| 
     113||Conflicts       ||共存できないパッケージ名|| 
     114||Provides        ||作成するパッケージが他のパッケージの代替となる場合、そのパッケージ名を記述|| 
     115||Obsoletes       ||パッケージをインストールする際にアンインストールしたいパッケージ名|| 
     116||!BuildConflicts ||パッケージ作成時にはインストールしておけないパッケージ名|| 
     117 
     118<, >, =, >=, <= といった演算子を使うとパッケージのバージョン、リリース番号を限定することもできます。 
     119 
     120複数のパッケージが関係する場合は、カンマ(,)やスペースで区切って列挙したり、複数行に分けて記述できます。複数行に分ける場合は、各行にタグが必要です。 
     121 
     122パッケージがいくつかのグループに分類できる場合には、複数行に書いた方がわかりやすくなります。 
     123 
     124===== 例: ghostscriptのバージョン5.10がパッケージの動作に必要な場合 ===== 
     125 
     126{{{ 
     127#!sh 
     128Requires: ghostscript = 5.10 
     129}}} 
     130 
     131===== 例: gtk2-develのバージョン2.16.0以上がパッケージの作成に必要な場合 ===== 
     132 
     133{{{ 
     134#!sh 
     135BuildRequires: gtk2-devel >= 2.16.0 
     136}}} 
     137 
     138===== 演算子の両側には必ずスペースやタブを入れてください。 ===== 
     139 
     140演算子の両側にスペースやタブを入れない場合、パッケージ名からバージョンまでが一つのパッケージ名として認識されてしまいます 
     141 
     142例えば、 
     143{{{ 
     144#!sh 
     145BuildRequires: gtk2-devel>=2.16.0 
     146}}} 
     147とすると「gtk2-devel>=2.16.0」というパッケージ名だと認識してしまいます。 
     148 
     149===== 例: 一行で記述する例 ===== 
     150 
     151{{{ 
     152#!sh 
     153Requires: ghostscript >= 5.10, ghostscript-fonts, VFlib = 2.24, tetex, tetex-extra 
     154}}} 
     155 
     156===== 例: 複数行に分けて記述する例 ===== 
     157 
     158{{{ 
     159#!sh 
     160Requires: ghostscript >= 5.10, ghostscript-fonts, VFlib = 2.24 
     161Requires: tetex, tetex-extra 
     162}}} 
     163 
     164==== 詳しい解説 ==== 
     165 
     166Summaryよりも詳しいパッケージの解説を 
     167{{{ 
     168#!sh 
     169%description 
     170}}} 
     171の次の行から、英語で記述します。 
     172 
     173Summary タグの場合と違い、複数行にわたる解説を書くことができます。 
     174 
     175なお、日本語による翻訳を追加する場合は、 
     176{{{ 
     177#!sh 
     178%description -l ja 
     179}}} 
     180として、同様に記述できます。 
     181 
     182=== スクリプト部 === 
     183 
     184スクリプト部では、パッケージの作成やインストール等の手順を記述します。 
     185 
     186{{{ 
     187#!sh 
     188# スクリプト部 
     189%prep       #rpmを構築する前の準備です。 
     190rm -rf $RPM_BUILD_ROOT 
     191 
     192%setup      #ソースをBUILDに展開します。 
     193%patch -p1  #パッチをあてます。 
     194 
     195%build      #makeのための手順を書きます。 
     196make 
     197(cd man; make man) 
     198 
     199%install    #installのための手順を書きます。 
     200make prefix=${RPM_BUILD_ROOT}/usr/local install 
     201(cd man; make prefix=${RPM_BUILD_ROOT}/usr/local install.man) 
     202 
     203%clean      #rpmを作ったあとの後始末です。 
     204rm -rf $RPM_BUILD_ROOT 
     205}}} 
     206 
     207スクリプト部は、下の表で示すセクションに分かれます。 
     208 
     209||=  セクション名  =||=  概要  =|| 
     210||%prep    ||ソースをビルドする前に実施する準備事項|| 
     211||%build   ||ソースのビルド手順|| 
     212||%install ||ソースからのインストール手順|| 
     213||%check   ||インストールが正しく実行されたかを検査する手順|| 
     214||%clean   ||パッケージ作成後の後始末|| 
     215||その他   ||パッケージのインストール等の前後に実行する手順(「[wiki:../other-section スクリプト部で使用できるその他のセクション]」参照)|| 
     216 
     217各セクションは、独立したbashスクリプトとして実行できるように記述します。 
     218 
     219==== rpmbuild時の内部の仕組み ==== 
     220 
     221各セクション名が現れた時に #!/bin/sh -e が起動され(Vine Linux では /bin/sh は /bin/bash にシンボリックリンクされている)、 各環境変数(RPM_SOURCE_DIR や RPM_PACKAGE_NAME など)が定義された後、 次のセクション名が出てくるまで、記述されているスクリプトが実行されます。 
     222 
     223環境変数の詳細については、[wiki:../env-and-macro 環境変数]を参照してください。 
     224 
     225==== %prepセクション ==== 
     226 
     227ソースをビルドする前に実施する準備事項をシェルスクリプトで記述します。 
     228 
     229以下で説明する %setup, %patch などのマクロを用いて、ソースの展開やパッチの適用などを行います。 
     230 
     231なお、このセクションの最初で 
     232{{{ 
     233#!sh 
     234rm -rf ${RPM_BUILD_ROOT} 
     235}}} 
     236として、 ${RPM_BUILD_ROOT} ([wiki:#パッケージ情報の記述 パッケージ情報の記述]の BuildRoot で指定したディレクトリ) を掃除することが多いです。ただし、このときには、BuildRoot の設定には十分気をつけて下さい(何故かわかりますね?) 
     237 
     238 %setup:: 
     239   tarでアーカイブされ、 gzipまたはbzip2圧縮されたソースを展開します。%setup とオプションなしで書くと、以下が順に行われます。 
     240   1. ~/rpm/BUILD に cd する。 
     241   1. 指定ディレクトリ(-nで指定できる。デフォルトのディレクトリ名は、 ${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}、後述) がカレント・ディレクトリ(BUILD)に存在すれば消去する。 
     242   1. Source で指定したソースのアーカイブを展開する。 
     243   1. 指定ディレクトリ(2の指定ディレクトリ名と同じ)にcdする。 
     244   %setupの動作を制御する必要がある場合は、[wiki:../setup-macro %setupマクロの詳細]を参照してください。 
     245 %patch:: 
     246   %setup で展開したソースにパッチをあてるためのマクロとしてはたらきます。 
     247   オプションなしで%patchと書くと、 
     248{{{ 
     249patch -p0 -s < ${RPM_SOURCE_DIR}/<Patchで指定したファイル> 
     250}}} 
     251   が起動されます。 
     252   [wiki:#スクリプト部 スクリプト部]の冒頭の例のように書くと、 
     253{{{ 
     254patch -p1 -s < ${RPM_SOURCE_DIR}/<Patchで指定したファイル> 
     255}}} 
     256   と同じことをします。 
     257   パッチファイルが複数ある場合、Patch0, Patch1,...に対して、 
     258{{{ 
     259%patch0 -p1 
     260%patch1 -p1 
     261}}} 
     262   と実行することも出来ます。%patchには -b <name> (バックアップ・ファイルの拡張子指定、デフォルトは .orig)などのオプションがあります。 
     263 
     264==== %buildセクション ==== 
     265 
     266ソースを make するスクリプトの開始であることを示し、また、%setup で指定したディレクトリに cd するマクロとしてはたらきます。 以下には、make を行うときの手順をスクリプトとして書きます。 
     267 
     268ここでの処理で必要となるパッケージ等は、!BuildRequires(build): で指定します。 
     269 
     270===== ソースにconfigureスクリプトが用意されている場合 ===== 
     271 
     272autoconf 化されたソースなど make の前に 
     273{{{ 
     274#!sh 
     275$ configure --prefix=/usr 
     276}}} 
     277などとしてインストールするディレクトリなどを制御できるソースがあります。 
     278 
     279configure スクリプトが用意されている場合には、%configure マクロを利用すると便利です。 
     280 
     281%configure マクロは、/usr/lib/rpm/macros で次のように定義されており、 Vine Linux 推奨のコンパイルフラグやインストールディレクトリを設定できます。 
     282 
     283{{{ 
     284#!sh 
     285%configure \ 
     286  CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ 
     287  CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ 
     288  FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \ 
     289  ./configure --host=%{_host} --build=%{_build} \\\ 
     290        --target=%{_target_platform} \\\ 
     291        --program-prefix=%{?_program_prefix} \\\ 
     292        --prefix=%{_prefix} \\\ 
     293        --exec-prefix=%{_exec_prefix} \\\ 
     294        --bindir=%{_bindir} \\\ 
     295        --sbindir=%{_sbindir} \\\ 
     296        --sysconfdir=%{_sysconfdir} \\\ 
     297        --datadir=%{_datadir} \\\ 
     298        --includedir=%{_includedir} \\\ 
     299        --libdir=%{_libdir} \\\ 
     300        --libexecdir=%{_libexecdir} \\\ 
     301        --localstatedir=%{_localstatedir} \\\ 
     302        --sharedstatedir=%{_sharedstatedir} \\\ 
     303        --mandir=%{_mandir} \\\ 
     304        --infodir=%{_infodir} 
     305}}} 
     306 
     307ここで定義されていないオプション、例えば --disable-scrollkeeper というようなオプションが必要な場合には 
     308{{{ 
     309#!sh 
     310%configure --disable-scroolkeeper 
     311}}} 
     312のように追加でオプションを指定できます。 
     313 
     314==== %installセクション ==== 
     315 
     316ファイルを install するスクリプトの開始であることを示し、また、%setup で指定したディレクトリに cd するマクロとしてはたらきます。 以下には、install を行うときの手順を示します。データ定義部の !BuildRoot で設定したディレクトリ(${RPM_BUILD_ROOT}) の下に全てのファイルがインストールされるように、工夫しましょう。 Makefile が短いときには、修正して patch をつくるかわりに、ここに、 cp, install コマンド等を用いた install スクリプトを書くのも一手です。 
     317 
     318%setup のところと同じように、マクロ %{SOURCE数字} を使って Source: で指定したファイルを直接インストールすることもできます。 
     319 
     320{{{ 
     321#!sh 
     322%{__install} -m 644 %{SOURCE2} %{buildroot}/where/there/ 
     323}}} 
     324 
     325なお、rpm-3.0.5 以降では、インストールされたバイナリは RPM パッケージにする段階で自動的に strip されますので、%install で binary の strip を行う必要はありません。 
     326 
     327ここでの処理で必要となるパッケージ等は、!BuildRequires(install): で指定します。 
     328 
     329==== %checkセクション ==== 
     330 
     331install が正しく実行されたかを check するスクリプトの開始であることを示します。%setup で指定したディレクトリに cd するマクロとしてはたらきます。 以下には、make test や make check などを実行するときの手順を示します。 
     332 
     333GNOME などが利用する desktop ファイルの書式チェックなどを行うこともできます。 「GNOME,KDE,Xfce のメニューに追加するために」を参照してください。 
     334 
     335rpm-4.2以降で実装された機能です。 
     336 
     337ここでの処理で必要となるパッケージ等は、!BuildRequires(install): で指定します。 
     338 
     339==== %cleanセクション ==== 
     340 
     341RPM パッケージを作ったあとの後始末を記述します。 
     342 
     343ここでの処理で必要となるパッケージ等は、!BuildRequires(clean): で指定します。 
     344 
     345=== ファイルリスト部 === 
     346 
     347%files はじまる部分で、RPM パッケージに収録するファイル名を列挙します。 
     348 
     349{{{ 
     350#!sh 
     351# ファイルリスト部 
     352%files 
     353%defattr(-,root,root) 
     354%doc README 
     355%doc docs/  
     356/usr/bin/hoge.bin 
     357/usr/lib/hoge/ 
     358/usr/man/man1/hoge.1.gz 
     359%dir /usr/lib/hoge/ 
     360%config /usr/lib/hoge/fuga.conf 
     361}}} 
     362 
     363このとき以下に注意してください。 
     364 
     365* ここに書くファイル名は重複してはいけません。 
     366* 列挙されたファイルは、%doc で指定するものを除いて、%install までのスクリプトの実行によって、 記述した通りの場所(${RPM_BUILD_ROOT}を''/''とみなす) に install されるものでないといけません。 
     367* 列挙されたファイルがおかしな userID/groupID を持っていると、RPM パッケージが正常に build できないことがあります。 
     368* ファイルを含まないバーチャルパッケージ[[FootNote(Requires で他のパッケージをまとめてインストールしたり、%post, %preun, %postun などで何らかのコマンド処理を行うようなパッケージ。task-gnome や task-tetex などのように task- という名前が使われます。)]]を作る場合でも、%files という行だけは必要になります。%files という行を省略してしまうと、rpmbuild コマンドで処理しても src.rpm しか作れません。 
     369 
     370rpmbuild コマンドは、SPEC ファイルに基づいて RPM パッケージを作るときに、[wiki:#スクリプト部 スクリプト部]で設定した一連のスクリプトを実行した後、 ${RPM_BUILD_ROOT} を / とみなして %files 以下で指定されたファイルを回収し、それを指定位置に install するような RPM パッケージをつくります。 
     371 
     372==== ドキュメント・ファイルの指定 ==== 
     373 
     374%doc というマクロを用います。上記の例のように、%doc README とすると、%setup で指定したホームディレクトリ下の README が、${RPM_BUILD_ROOT}/usr/doc/hoge-1.1-2/ に cp されたのち、RPM パッケージに収録されます。つまり %doc は、ドキュメントファイルのインストールとパッケージングのためのファイル指定を同時に行うマクロとしてはたらきます。以下のように、ディレクトリごと指定もできます。 
     375 
     376{{{ 
     377#!sh 
     378%doc doc/ 
     379}}} 
     380 
     381==== パッケージに収録するファイルの指定 ==== 
     382 
     383その絶対パスで指定します。 
     384 
     385* 個別ファイルはそのまま指定。(/usr/bin/hoge.bin など) 
     386* あるディレクトリ以下の全てのファイルを RPM パッケージに収録したいときには、そのディレクトリ名を書きます。(タグなし、/usr/hoge/ など)。アンインストール時には、そのディレクトリごと削除されます。 
     387* ワイルドカードも使えます。(/usr/hoge/* など) 
     388 
     389rpm-3.0.5 以降では、man ファイルや info ファイルは自動的に gzip で圧縮されます。 %files に man や info のファイル名を書くときには拡張子 .gz をつけるのを忘れないようにしましょう。 
     390 
     391==== タグを用いたファイル指定 ==== 
     392 
     393 %dir <dir name>:: 
     394   指定したディレクトリだけをパッケージに含める。 
     395{{{ 
     396``/usr/hoge/'' = ``%dir /usr/hoge/'' + ``/usr/hoge/*'' 
     397}}} 
     398   ってかんじです。 
     399 %config <file name>:: 
     400   config ファイルであることを示す。ファイルが書き換えられていた場合、アンインストール時には .rpmsave をつけた名前で保存されます。アップグレード時には新しいファイルと置き換えられ、元のファイルは .rpmsave をつけた名前で保存されます。 
     401   ファイルが変更されていた場合、アップグレード時に新しいファイルに置き換えずにもとのファイルをそのまま使う場合には、 %config(noreplace) を指定します。 
     402{{{ 
     403%config(noreplace) <file name> 
     404}}} 
     405   この場合新しいパッケージに入っている設定ファイルは、.rpmnew をつけた名前で保存されます。また、アップグレードではなく、同じバージョンをインストールし直した時には、 .rpmorig をつけた名前で保存されます。 
     406   存在しなくても問題ないファイルの場合は、 %config(missingok) を指定します。 
     407{{{ 
     408%config(missingok) <file name> 
     409}}} 
     410   これは、rpm コマンドの -V オプションでチェックした時に、ファイルが無くてもエラーにならないようにするためのものです。 
     411 %attr(<mode>,<owner>,<group>[, dirmode]) <file name>:: 
     412   %files に列挙するファイルのパーミッションや user ID、group ID を設定する。例えば、 
     413{{{ 
     414%attr(755,root,root) /usr/lib/hoge 
     415}}} 
     416   とする。一部の属性を省略(書き換えない)したいときには - を使って、 
     417{{{ 
     418%attr(755,-,root) /usr/lib/hoge 
     419}}} 
     420   とする。 
     421{{{ 
     422%attr(755,root,root) 
     423}}} 
     424   のように( )の中には 3つしか書かないことが多いですが、 
     425{{{ 
     426%attr(755,root,root,755) 
     427}}} 
     428   のように 4つ書くこともできます。 4つ目の数字(dirmode)は、 ディレクトリとサブディレクトリのパーミッションになります。 
     429 %defattr(<mode>,<owner>,<group>[, dirmode]):: 
     430    それ以降の行に書かれた属性のデフォルト値を設定する。 %attr が出てきた行を除いて、それ以降に書かれたものに共通になります。 
     431    %defattr も %attr も何度でも使えます。 次の例だと、/usr/bin/hoge と /usr/lib/hoge は一つ目の %defattr の 755 になり、 /usr/share/locale/ja 以降は二つ目の %defattr の 644 になります。 
     432{{{ 
     433%defattr(755,-,-) 
     434/usr/bin/hoge 
     435/usr/lib/hoge 
     436%defattr(644,-,-) 
     437/usr/share/locale/ja 
     438/usr/share/locale/lv 
     439}}} 
     440    %attrと同様、4つ目の数字は、 ディレクトリとサブディレクトリのパーミッションになります。 
     441 %verify( ) <file name>:: 
     442   %files に列挙するファイルについて、rpm -V でパッケージを検証する時に、検証する項目を指定する。 
     443   ( ) の中には以下の表にあるものが入ります。 複数指定する場合には、, もしくは スペース で区切ります。 
     444||=  項目  =||=  内容  =|| 
     445||size ||サイズ|| 
     446||mode ||パーミッションとファイルの種類|| 
     447||md5  ||md5 値|| 
     448||rdev ||デバイスファイルのモードビットなど|| 
     449||link ||リンク先|| 
     450||user ||ファイルの所有者 user|| 
     451||group||ファイルのグループ group|| 
     452||mtime||ファイルの更新時刻 mtime(modification time)|| 
     453   not とすると検証しない項目だけを指定できます。 
     454   書き換えることが前提となる設定ファイルなので、ファイルサイズ と md5値 と 更新時刻 は検証する必要がないといった場合には、 
     455{{{ 
     456%verify(not size,md5,mtime) /etc/hoge.conf 
     457}}} 
     458   のように指定します。 
     459 %defverify( ):: 
     460    それ以降の行に書かれたファイルについて検証する項目を設定します。  
     461    %verify と %defverify は、%attr と %defattr と同じような関係です。  
     462 
     463%config %attr %verify などは、次のようにスペースを入れることで一つのファイルに複数指定できます。 
     464 
     465{{{ 
     466%config %verify(not size,md5,mtime) /etc/hoge.conf 
     467}}} 
     468 
     469この %files の指定は少々面倒なとこかもしれません。新しくパッケージをつくる場合などは、%install までのスクリプト部を書いたところで、%files 以下は何も書かないまま、一度、その SPEC ファイルから RPM パッケージを build してみるとよいかもしれません。(rpm -bi hoge.spec これについては次節)。そのあとで、${RPM_BUILD_ROOT} 以下に install されてるファイルを、find コマンドで見てみて %files の指定をします。 
     470 
     471%files で書かれていないファイルがある場合には、build 時に 
     472{{{ 
     473パッケージに未収録のファイルを検査中: /usr/lib/rpm/check-files /var/tmp/hoge-1.1-root 
     474                                        警告: パッケージに未収録のインストール済みファイルが見つかりました: 
     475}}} 
     476と未収録のファイルの名前などが表示されます。この部分を利用して %files の部分を作成するのもよいでしょう。 
     477 
     478ソースのバージョンアップなどで、作成されるファイルが増減したり、ディレクトリが変わったりする場合があります。未収録のファイルがあっても、build が途中で終了せず、パッケージを作成できてしまう場合があるので、build 時のメッセージは必ず確認してください。 
     479 
     480=== パッケージの更新履歴 === 
     481 
     482%changelog 以下にパッケージの更新履歴を英語で記述します。最新の更新情報が上にくるように書きます。 
     483 
     484{{{ 
     485#!sh 
     486# 更新履歴 
     487%changelog 
     488* Tue Feb 16 1999 Jun Nishii <jun@vinelinux.org> 1.1-2 
     489- added Japanese messages 
     490 
     491* Mon Feb 15 1999 Jun Nishii <jun@vinelinux.org> 1.1-1 
     492- first release for version 1.1 
     493}}} 
     494 
     495一行目の最初に * を書き、日付と変更を加えた人の名前を書きます。二行目以降に - を書き、更新内容を書きます。今日の日付は date コマンドで 
     496{{{ 
     497#!sh 
     498$ LANG=C date +'%a %b %d %Y' 
     499}}} 
     500とすると確認できます。 12月1日のように日の部分が一桁の場合は 0 をつけ 01 のようにします。 
     501 
     502Vine Linux でのパッケージングルールでは 一行目に日付、パッケージャーの名前、メールアドレス、パッケージのバージョン,、リリース番号を書くことになっています。 
     503 
     504{{{ 
     505#!sh 
     506* 曜日 月 日 西暦年 パッケージャーの名前 <メールアドレス> バージョン-リリース番号 
     507- 更新内容 
     508}}} 
     509 
     510更新内容の部分でもマクロは展開され %{name} は hoge になります。 マクロを展開せずにそのまま %{name} と書きたい場合は %%{name} のように % を二つ続けて書いて下さい。 
     511 
     512日本語を使うことも可能になっていますが、Summary や description のように環境変数に応じて日本語や英語のどちらかを表示するという仕組みは無いので、 英語だけで書くほうがよいでしょう。