第5章 SPECファイルの記述

いよいよ、パッケージ作成の肝となるSPECファイルの記述について説明します。

SPECファイルの内容は、以下の主要部分に分類できます。

  • パッケージ情報

  • パッケージの作成やインストール等の手順(スクリプト部)

  • インストールされるファイルの一覧

  • パッケージの変更履歴

SPECファイルの文字コード

SPECファイルの文字コードはUTF-8にしてください。

マクロの定義

SPECファイルの冒頭にパッケージのバージョンなど頻繁に使用されるものをマクロとして定義しておくと後々の修正が楽になります。

%define	macro	literal

ようにするとパッケージ作成時に%{macro}と書かれた部分をliteralに置換して処理します。

「標準で定義されているマクロ」も参照して下さい。

5.1. パッケージ情報の記述

rpmコマンドでパッケージに関する問い合わせを実行した場合に表示される情報やパッケージの依存情報などを記述します。

例5.1 パッケージ情報の記述例

以下にパッケージ情報の記述例を示します。(#を記述すると#から行末までがコメントとして扱われます。)

# 基本情報
Summary: hoge is a harehare horehore
Summary(ja): hoge は harehare な horehore です。
Name: hoge
Version: 1.1
Release: 1%{?_dist_release}
License: GPL2
Group: Applications/Internet
URL: http://www.fugahogo.com/hogehoge.html
Vendor:	Project Vine
Distribution: Vine Linux
Packager: yourid,otherid

# パッケージの作成時に必要となる情報
Source: %{name}-%{version}.tar.gz
Patch: hoge.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-root

# 依存情報
Requires:	piyo
BuildRequires:	piyo-devel

# 詳しい解説
%description
Hoge is a harehare horehore and convenient for fugafuga.
Enjoy!

%description -l ja
hoge は harehare な horehore で、fugafuga するときなどとても便利なツー
ルです。みんなでなかよく使いましょう。
# 基本情報
Summary: hoge is a harehare horehore
Summary(ja): hoge は harehare な horehore です。
Name: hoge
Version: 1.1
Release: 1%{?_dist_release}
License: GPL2
Group: Applications/Internet
URL: http://www.fugahogo.com/hogehoge.html
Vendor:	Project Vine
Distribution: Vine Linux
Packager: yourid,otherid

# パッケージの作成時に必要となる情報
Source: %{name}-%{version}.tar.gz
Patch: hoge.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-root

# 依存情報
Requires:	piyo
BuildRequires:	piyo-devel

# 詳しい解説
%description
Hoge is a harehare horehore and convenient for fugafuga.
Enjoy!

%description -l ja
hoge は harehare な horehore で、fugafuga するときなどとても便利なツー
ルです。みんなでなかよく使いましょう。

基本情報から依存情報の部分は、1行につき1つの情報を記述する構成となっています。

各行は「Summary:」のようにタグとそれに続くコロンで始まり、さらにタグに対応する情報が続く形式になっています。

5.1.1. 基本情報

表5.1「基本情報で使用されるタグ」の情報は、rpm -qiなどでパッケージに関して問い合わせを行った場合に表示されます。

表5.1 基本情報で使用されるタグ

タグ 内容
Summary パッケージの簡単な説明を英語で記述します。
Summary(ja) Summaryを日本語で翻訳します。
Name パッケージの名前です。定義以降、%{name}というマクロで参照できます。
Version パッケージのバージョンです。定義以降、%{version}というマクロで参照できます。
Release 冒頭の数字は同じバージョンで何回目のリリースになるかを意味します。%{?_dist_release}は、vl5の様に対象となるVine Linuxのバージョンに置き換えられます。定義以降、%{release}というマクロで参照できます。
License アプリケーションのライセンス
Group アプリケーションの種類。付録B Vine Linux で使用できるGroup一覧を参照して下さい。
Packager パッケージメンテナ。BTS.VineLinux.Orgへのログインユーザ名を使用してください。複数のメンテナがいる場合、カンマで区切ります。
Distribution VinePlusやVineSeedのパッケージは、Vine Linuxを指定します。
Vendor 作成したrpmパッケージに関する責任を負うVendor名です。VinePlusやVineSeedのパッケージは、Project Vineを指定します。
Url アプリケーションの情報を提供しているURL

5.1.2. パッケージ作成時に必要となるタグ

表5.2 パッケージ作成時に必要となるタグ

タグ 内容
Source パッケージ化するアプリケーションのソースファイル名。ソースの入手先を明示するためにURL形式で記述することも可能。
Patch 「パッチの用意」で用意したパッチファイルを指定します。 書式はSourceと同じです。
BuildRoot 仮想インストールのためのディレクトリ名を書きます。直接ディレクトリ名を書くのではなく、例のようにマクロを利用してください。

複数のソースファイルやパッチがあるときはSource0、Source1、...やPatch0、Patch1、...というふうに番号をふって列挙します。(Source0は、Sourceと省略できます。)

Souce数字 で指定したファイルは %{SOURCE数字} というマクロとして 「スクリプト部」の %prep や %install などの部分で利用できます。

5.1.3. 依存情報

パッケージの依存情報など他のパッケージとの関係を示すには、表5.3「パッケージの依存関係を扱うタグ」のようなタグを使用します。

表5.3 パッケージの依存関係を扱うタグ

タグ 内容
Requires 作成しているrpmパッケージが動作するのに必要なパッケージ名
BuildRequires パッケージの作成時に必要となるパッケージ名
Conflicts 共存できないパッケージ名
Provides 作成するパッケージが他のパッケージの代替となる場合、そのパッケージ名を記述
Obsoletes パッケージをインストールする際にアンインストールしたいパッケージ名
BuildConflicts パッケージ作成時にはインストールしておけないパッケージ名

<, >, =, >=, <=といった演算子を使うとパッケージのバージョン、リリース番号を限定することもできます。

例5.2 ghostscriptのバージョン5.10がパッケージの動作に必要な場合

Requires: ghostscript = 5.10

例5.3 gtk2-develのバージョン2.16.0以上がパッケージの作成に必要な場合

BuildRequires: gtk2-devel >= 2.16.0

演算子の両側には必ずスペースやタブを入れてください。

演算子の両側にスペースやタブを入れない場合、パッケージ名からバージョンまでが一つのパッケージ名として認識されてしまいます

例えば、

BuildRequires: gtk2-devel>=2.16.0

とすると「gtk2-devel>=2.16.0」というパッケージ名だと認識してしまいます。

複数のパッケージが関係する場合は、カンマ(,)やスペースで区切って列挙したり、複数行に分けて記述できます。複数行に分ける場合は、各行にタグが必要です。

パッケージがいくつかのグループに分類できる場合には、複数行に書いた方がわかりやすくなります。

例5.4 一行で記述する例

Requires: ghostscript >= 5.10, ghostscript-fonts, VFlib = 2.24, tetex, tetex-extra

例5.5 複数行に分けて記述する例

Requires: ghostscript >= 5.10, ghostscript-fonts, VFlib = 2.24
Requires: tetex, tetex-extra

5.1.4. 詳しい解説

Summaryよりも詳しいパッケージの解説を

%description

の次の行から、英語で記述します。

Summaryタグの場合と違い、複数行にわたる解説を書くことができます。

なお、日本語による翻訳を追加する場合は、

%description -l ja

として、同様に記述できます。