検索

4.2. スペックファイルについて

download PDF

spec ファイルは、rpmbuild ユーティリティーが RPM パッケージを構築するために使用する指示が記述されたファイルです。SPEC ファイルは、一連のセクションで命令を定義することで、ビルドシステムに必要な情報を提供します。これらのセクションは、仕様 ファイルの プリアンブル本文 部分で定義されています。

  • プリアンブル セクションには、本文 セクションで使用される一連のメタデータ項目が含まれています。
  • 本文 セクションは、手順の主要部分を表します。

4.2.1. Preamble 項目

以下は、RPM 仕様 ファイルの Preamble セクションで使用できるディレクティブの一部です。

表4.2 前文 セクションの指示
ディレクティブ定義

Name

仕様 ファイル名と一致する必要があるパッケージの基本名。

バージョン

ソフトウェアのアップストリームのバージョン番号。

リリース

パッケージのバージョンがリリースされた回数。

初期値を 1%{?dist} に設定し、パッケージの新しいリリースごとに増加します。新しい Version のソフトウェアを構築するときに、1 にリセットされます。

Summary

パッケージの 1 行の概要

ライセンス

パッケージ化しているソフトウェアのライセンス。

SPEC ファイルで License にラベルを付ける方法は、使用する RPM ベースの特定の Linux ディストリビューションガイドラインによって異なります。

URL

ソフトウェアの詳細情報の完全な URL (パッケージ化されるソフトウェアのアップストリームプロジェクト Web サイトなど)。

ソース

パッチが適用されていないアップストリームソースコードの圧縮アーカイブへのパスまたは URL。これは、たとえば、パッケージャーのローカルストレージではなく、アップストリームページなどのアーカイブの、アクセス可能で信頼できるストレージを参照している必要があります。

ディレクティブ名の末尾に数字を付けても付けなくても、Source ディレクティブを適用できます。番号が指定されていない場合は、エントリーに内部的に番号が割り当てられます。Source0Source1Source2Source3 などのように、番号を明示的に指定することもできます。

パッチ

必要に応じて、ソースコードに適用する最初のパッチの名前。

ディレクティブ名の末尾に数字を付けても付けなくても、Patch ディレクティブを適用できます。番号が指定されていない場合は、エントリーに内部的に番号が割り当てられます。Patch0Patch1Patch2Patch3 などのように番号を明示的に指定することもできます。

%patch0%patch1%patch2 マクロなどを使用して、パッチを個別に適用できます。マクロは、RPM SPEC ファイルの Body セクションの %prep ディレクティブ内で適用されます。または、%autounconfined マクロを使用できます。これは、SPEC ファイルに指定されている順序ですべてのパッチを自動的に適用します。

BuildArch

ソフトウェアが構築されるアーキテクチャー。

ソフトウェアがアーキテクチャーに依存しない場合、たとえば、ソフトウェア全体をインタープリタ型プログラミング言語で記述した場合は、値を BuildArch: noarch に設定します。この値を設定しないと、ソフトウェアは、x86_64 など、構築されたマシンのアーキテクチャーを自動的に継承します。

BuildRequires

コンパイル言語で書かれたプログラムを構築するのに必要なコンマ区切りまたは空白区切りのリスト。BuildRequires のエントリーは複数になる場合があります。各エントリーに対する行が、SPEC ファイル行に含まれます。

Requires

インストール後のソフトウェアの実行に必要なパッケージのコンマ区切りまたは空白区切りのリスト。Requires のエントリーは複数ある場合があります。これらは、SPEC ファイル行に独自の行を持ちます。

ExcludeArch

ソフトウェアが特定のプロセッサーアーキテクチャーで動作できない場合は、ExcludeArch ディレクティブでこのアーキテクチャーを除外できます。

Conflicts

ソフトウェアをインストールしたときに正常に機能させるために、システムにインストールしてはならないパッケージの、コンマまたは空白で区切られたリスト。Conflicts のエントリーは、仕様 ファイル内の各行に複数存在できます。

Obsoletes

Obsoletes ディレクティブは、次の要因に応じて更新の動作方法を変更します。

  • rpm コマンドをコマンドラインで直接使用すると、インストールされているパッケージの古いパッケージに一致するすべてのパッケージが削除されるか、更新または依存関係ソルバーによって更新が実行されます。
  • 更新または依存関係リゾルバー (YUM) を使用すると、一致する Obsoletes: を含むパッケージが更新として追加され、一致するパッケージが置き換えられます。

提供する項目

パッケージに Provides ディレクティブを追加すると、このパッケージは名前以外の依存関係によって参照できるようになります。

NameVersion、および Release (NVR) ディレクティブは 、名前 - バージョン - リリース 形式の RPM パッケージのファイル名を設定します。

rpm コマンドを使用して RPM データベースを照会することにより、特定のパッケージの NVR 情報を表示できます。次に例を示します。

# rpm -q bash
bash-4.4.19-7.el8.x86_64

ここでは、bash がパッケージ名で、4.4.19 がバージョン番号を示し、7.el8 がリリースを意味しています。x86_64 マーカーはパッケージアーキテクチャーです。NVR とは異なり、アーキテクチャーのマーカーは RPM パッケージャーで直接管理されていませんが、rpmbuild ビルド環境で定義されます。ただし、これはアーキテクチャーに依存しない noarch パッケージです。

4.2.2. Body 項目

RPM SPEC ファイルの Body section で使用される項目は次のとおりです。

表4.3 本文セクションの項目
ディレクティブ定義

%description

RPM でパッケージ化されているソフトウェアの完全な説明。この説明は、複数の行や、複数の段落にまでわたることがあります。

%prep

たとえば、Source ディレクティブでアーカイブを展開するなど、ソフトウェアをビルド用に準備するためのコマンドまたは一連のコマンド。%prep ディレクティブにはシェルスクリプトを含めることができます。

%build

ソフトウェアをマシンコード (コンパイル言語の場合) またはバイトコード (一部のインタープリター言語の場合) にビルドするための 1 つまたは一連のコマンド。

%install

ソフトウェアがビルドされた後、rpmbuild ユーティリティーがソフトウェアを BUILDROOT ディレクトリーにインストールするために使用するコマンドまたは一連のコマンド。これらのコマンドは、ビルドが行われる %_builddir ディレクトリーから、パッケージ化されるファイルを含むディレクトリー構造を含む %buildroot ディレクトリーに、必要なビルドアーティファクトをコピーします。これは通常、ファイルを ~/rpmbuild/BUILD から /rpmbuild/buildroot にコピーして、必要なディレクトリーを /rpmbuild/buildroot に作成することを意味します。

このディレクトリーは空の chroot ベースディレクトリーで、エンドユーザーの root ディレクトリーに似ています。ここでは、インストールしたファイルを格納するディレクトリーを作成できます。このようなディレクトリーを作成するには、パスをハードコードせずに RPM マクロを使用します。

%install は パッケージのインストール時ではなく、パッケージの作成時にのみ実行されることに注意してください。詳細は、SPEC ファイルでの作業 を参照してください。

%check

ソフトウェアをテストするためのコマンドまたは一連のコマンド (ユニットテストなど)。

%files

RPM パッケージによって提供され、ユーザーのシステムにインストールされるファイルと、システム上の完全なパスの場所のリスト。

ビルド中に、%buildroot ディレクトリーに %files にリストされていないファイルがある場合、パッケージ化されていないファイルの可能性があるという警告が表示されます。

%files セクション内では、組み込みマクロを使用してさまざまなファイルのロールを示すことができます。これは、rpm コマンドを使用してパッケージファイルのマニフェストメタデータをクエリーする場合に便利です。たとえば、LICENSE ファイルがソフトウェアライセンスファイルであることを示すには、%license マクロを使用します。

%changelog

異なる Version または Release ビルド間でパッケージに行われた変更の記録。これらの変更には、パッケージの各バージョンリリースの日付スタンプ付きエントリーのリストが含まれます。これらのエントリーは、パッチの追加や %build セクションでのビルド手順の変更など、ソフトウェアの変更ではなくパッケージの変更を記録します。

4.2.3. 高度な項目

仕様 ファイルには、スクリプトレットトリガー などの高度な項目を含めることができます。

スクリプトレットとトリガーは、ビルドプロセスではなく、エンドユーザーのシステムでのインストールプロセス中のさまざまな時点で有効になります。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.