検索

4.5. SPEC ファイルでの作業

download PDF

新しいソフトウェアをパッケージ化するには、SPEC ファイルを作成する必要があります。

SPEC ファイルは次の方法で作成できます。

  • 新しい SPEC ファイルを最初から手動で作成します。
  • rpmdev-newspec ユーティリティーを使用します。

    このユーティリティーは、空の SPEC ファイルを作成します。このファイルに必要なディレクティブとフィールドを入力します。

注記

プログラマーに焦点を合わせたテキストエディターの中には、独自の SPEC テンプレートで新しい .spec ファイルを事前に準備しているものもあります。rpmdev-newspec ユーティリティーでは、エディターに依存しないアプローチを利用できます。

次のセクションでは、Hello World! プログラムの 3 つの実装例を使用します。

ソフトウェアの名前

例の説明

bello

raw インタープリタープログラミング言語で書かれたプログラム。ソースコードを構築する必要はなく、インストールのみが必要である場合を示しています。事前にコンパイル済みのバイナリーをパッケージ化する必要がある場合、バイナリーは単なるファイルであるため、この方法を使用することもできます。

pello

バイトコンパイルインタプリタ-プログラム言語で書かれたプログラム。ソースコードをバイトコンパイルし、バイトコード (生成される、事前に最適化されたファイル) をインストールする方法を示します。

cello

ネイティブコンパイル言語で書かれたプログラム。ソースコードをマシンコードにコンパイルし、生成される実行可能ファイルをインストールする一般的なプロセスを示します。

Hello World! の実装は次のとおりです。

前提条件として、これらの実装は、~/rpmbuild/SOURCES ディレクトリーに置く必要があります。

Hello World! プログラムの実装の詳細は、 ソースコードとは を参照してください。

次のセクションでは、SPEC ファイルの使用方法を説明します。

4.5.1. サンプルの Bash、C、および Python プログラム用の新しい spec ファイルを作成する

rpmdev-newspec ユーティリティーを使用して、Hello World! プログラムの 3 つの実装それぞれに spec ファイルを作成できます。

前提条件

手順

  1. ~/rpmbuild/SPECS ディレクトリーに移動します。

    $ cd ~/rpmbuild/SPECS
  2. Hello World! プログラムの 3 つの実装それぞれに spec ファイルを作成します。

    $ rpmdev-newspec bello
    bello.spec created; type minimal, rpm version >= 4.11.
    
    $ rpmdev-newspec cello
    cello.spec created; type minimal, rpm version >= 4.11.
    
    $ rpmdev-newspec pello
    pello.spec created; type minimal, rpm version >= 4.11.

    ~/rpmbuild/SPECS/ ディレクトリーに、bello.speccello.specpello.spec という 3 つの spec ファイルが追加されます。

  3. 作成されたファイルを調べます。

    ファイル内のディレクティブは、spec ファイルについて で説明されているものです。次のセクションでは、rpmdev -newspec の出力ファイルの特定のセクションを作成します。

4.5.2. 元の spec ファイルの変更

rpmdev-newspec ユーティリティーによって生成される元の spec 出力ファイルは、テンプレートです。このテンプレートを変更して、rpmbuild ユーティリティーに必要な指示を提供する必要があります。rpmbuild は、その指示を使用して RPM パッケージをビルドします。

前提条件

手順

  1. rpmdev-newspec ユーティリティーによって提供される ~/rpmbuild/SPECS/<name>.spec ファイルを開きます。
  2. spec ファイルの Preamble セクションに次のディレクティブを入力します。

    Name
    Name は、すでに rpmdev-newspec の引数として指定されています。
    Version
    Version は、ソースコードのアップストリームのリリースバージョンと一致するように設定します。
    Release
    Release は、1%{?dist} に自動的に設定されます。最初は 1 となります。
    Summary
    パッケージの説明を 1 行で入力します。
    License
    ソースコードに関連付けるソフトウェアライセンスを入力します。
    URL
    アップストリームのソフトウェア Web サイトの URL を入力します。一貫性を保つために、%{name} RPM マクロ変数を利用し、https://example.com/%{name} 形式を使用します。
    Source

    アップストリームのソフトウェアソースコードへの URL を入力します。パッケージ化するソフトウェアバージョンに直接リンクします。

    注記

    このドキュメントのサンプル URL には、ハードコードされた値が含まれています。この値は将来変更される可能性があります。同様に、リリースのバージョンも変更される可能性があります。今後の変更を簡素化するには、%{name} マクロと %{version} マクロを使用します。これらのマクロを使用すると、更新する必要がある箇所が、spec ファイル内の 1 つのフィールドだけになります。

    BuildRequires
    パッケージのビルド時の依存関係を指定します。
    Requires
    パッケージの実行時の依存関係を指定します。
    BuildArch
    ソフトウェアアーキテクチャーを指定します。
  3. spec ファイルの Body セクションに次のディレクティブを入力します。これらのディレクティブは、実行する複数行、複数指示のタスクやスクリプト処理タスクを定義できるため、セクションの見出しと考えることができます。

    %description
    ソフトウェアの詳細な説明を入力します。
    %prep
    ソフトウェアのビルドを準備するための 1 つまたは一連のコマンドを入力します。
    %build
    ソフトウェアをビルドするための 1 つまたは一連のコマンドを入力します。
    %install
    ソフトウェアを BUILDROOT ディレクトリーにインストールする方法を rpmbuild コマンドに指示する 1 つまたは一連のコマンドを入力します。
    %files
    システムにインストールする、RPM パッケージによって提供されるファイルのリストを指定します。
    %changelog

    パッケージの各 Version-Release の日付入りエントリーのリストを入力します。

    %changelog セクションの最初の行は、アスタリスク (*) 文字で始め、その後に Day-of-Week Month Day Year Name Surname <email> - Version-Release を入力します。

    実際の変更エントリーについては、次のルールに従ってください。

    • 各変更エントリーには、変更ごとに複数の項目を含めることができます。
    • 各項目は新しい行で始まります。
    • 各項目の先頭にハイフン (-) 文字を付けます。

これで、必要なプログラムの完全な spec ファイルが作成されました。

4.5.3. サンプル Bash プログラムの spec ファイルの例

以下に示す、bash で書かれた bello プログラムの spec ファイルの例を参考として使用できます。

bash で書かれた bello プログラムの spec ファイルの例

Name:           bello
Version:        0.1
Release:        1%{?dist}
Summary:        Hello World example implemented in bash script

License:        GPLv3+
URL:            https://www.example.com/%{name}
Source0:        https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz

Requires:       bash

BuildArch:      noarch

%description
The long-tail description for our Hello World Example implemented in
bash script.

%prep
%setup -q

%build

%install

mkdir -p %{buildroot}/%{_bindir}

install -m 0755 %{name} %{buildroot}/%{_bindir}/%{name}

%files
%license LICENSE
%{_bindir}/%{name}

%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 0.1-1
- First bello package
- Example second item in the changelog for version-release 0.1-1

  • bello のビルドステップがないため、パッケージのビルドタイム依存関係を指定する BuildRequires ディレクティブが削除されました。bash は、raw インタープリタープログラミング言語で、ファイルはシステム上のその場所にインストールされます。
  • パッケージの実行時の依存関係を指定する Requires ディレクティブには、bash のみが含まれています。これは、bello スクリプトの実行には bash シェル環境のみが必要であるためです。
  • ソフトウェアのビルド方法を指定する %build セクションは空白です。これは bash スクリプトはビルドする必要がないためです。
注記

bello をインストールするには、インストール先ディレクトリーを作成し、そこに実行可能な bash スクリプトファイルをインストールする必要があります。したがって、%install セクションで install コマンドを使用できます。RPM マクロを使用すると、パスをハードコーディングせずにこれを行うことができます。

4.5.4. Python で書かれたプログラムの spec ファイルの例

Python プログラミング言語で書かれた pello プログラムの spec ファイルの例を次に示します。

Python で書かれた pello プログラムの spec ファイルの例

%global python3_pkgversion 3.11                                       1

Name:           python-pello                                          2
Version:        1.0.2
Release:        1%{?dist}
Summary:        Example Python library

License:        MIT
URL:            https://github.com/fedora-python/Pello
Source:         %{url}/archive/v%{version}/Pello-%{version}.tar.gz

BuildArch:      noarch
BuildRequires:  python%{python3_pkgversion}-devel                     3

# Build dependencies needed to be specified manually
BuildRequires:  python%{python3_pkgversion}-setuptools

# Test dependencies needed to be specified manually
# Also runtime dependencies need to be BuildRequired manually to run tests during build
BuildRequires:  python%{python3_pkgversion}-pytest >= 3


%global _description %{expand:
Pello is an example package with an executable that prints Hello World! on the command line.}

%description %_description

%package -n python%{python3_pkgversion}-pello                         4
Summary:        %{summary}

%description -n python%{python3_pkgversion}-pello %_description


%prep
%autosetup -p1 -n Pello-%{version}


%build
# The macro only supported projects with setup.py
%py3_build                                                            5


%install
# The macro only supported projects with setup.py
%py3_install


%check                                                                6
%{pytest}


# Note that there is no %%files section for the unversioned python module
%files -n python%{python3_pkgversion}-pello
%doc README.md
%license LICENSE.txt
%{_bindir}/pello_greeting

# The library files needed to be listed manually
%{python3_sitelib}/pello/

# The metadata files needed to be listed manually
%{python3_sitelib}/Pello-*.egg-info/

1
python3_pkgversion マクロを定義することで、このパッケージがビルドされる Python バージョンを設定します。デフォルトの Python バージョン 3.9 用にビルドするには、マクロをデフォルト値 3 に設定するか、その行を完全に削除します。
2
Python プロジェクトを RPM にパッケージ化するときは、常に python- 接頭辞をプロジェクトの元の名前に追加してください。ここでの元の名前は pello であるため、ソース RPM (SRPM) の名前 は、python-pello になります。
3
BuildRequires は、このパッケージのビルドおよびテストに必要なパッケージを指定します。BuildRequires には、Python パッケージのビルドに必要なツールを提供するアイテム python3-devel (もしくは python3.11-devel または python3.12-devel) と、パッケージ化する特定のソフトウェアに必要な関連プロジェクト python3-setuptools (もしくは python3.11-setuptools または python3.12-setuptools)、あるいは %check セクションでテストを実行するために必要なランタイムとテストの依存関係を常に含めます。
4
バイナリー RPM (ユーザーがインストールできるパッケージ) の名前を選択する際には、バージョン管理された Python 接頭辞を追加します。デフォルトの Python 3.9 の場合は python3- 接頭辞、Python 3.11 の場合は python3.11- 接頭辞、Python 3.12 の場合は python3.12- 接頭辞を使用します。%{python3_pkgversion} マクロを使用できます。これは、明示的なバージョン (3.11 など) に設定しない限り、デフォルトの Python バージョン 3.9 の場合は 3 と評価されます(脚注 1 を参照)。
5
%py3_build マクロおよび %py3_install マクロは、インストール場所、使用するインタープリター、その他の詳細を指定する追加の引数を使用して、setup.py build コマンドおよび setup.py install コマンドをそれぞれ実行します。
6
%check セクションは、パッケージ化されたプロジェクトのテストを実行する必要があります。正確なコマンドはプロジェクト自体に依存しますが、%pytest マクロを使用して、RPM に適した方法で pytest コマンドを実行することができます。

4.5.5. サンプル C プログラムの spec ファイルの例

以下に示す、C プログラミング言語で書かれた cello プログラムの spec ファイルの例を参考として使用できます。

C で書かれた cello の spec ファイルの例

Name:           cello
Version:        1.0
Release:        1%{?dist}
Summary:        Hello World example implemented in C

License:        GPLv3+
URL:            https://www.example.com/%{name}
Source0:        https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz

Patch0:         cello-output-first-patch.patch

BuildRequires:  gcc
BuildRequires:  make

%description
The long-tail description for our Hello World Example implemented in
C.

%prep
%setup -q

%patch0

%build
make %{?_smp_mflags}

%install
%make_install

%files
%license LICENSE
%{_bindir}/%{name}

%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 1.0-1
- First cello package

  • パッケージのビルド時の依存関係を指定する BuildRequires ディレクティブには、コンパイルビルドプロセスを実行するために必要な次のパッケージが含まれています。

    • gcc
    • make
  • この例では、パッケージにランタイム依存関係を指定する Requires ディレクティブは省略されています。すべてのランタイム要件は rpmbuild により処理されます。cello プログラムはコア C 標準ライブラリー以外のものは必要としません。
  • %build セクションは、この例で cello プログラム用の Makefile ファイルを作成したことを反映しています。したがって、GNU make コマンドを使用できます。ただし、設定スクリプトを指定していないため、%configure への呼び出しを削除する必要があります。

cello プログラムは、%make_install マクロを使用してインストールできます。これが可能なのは、cello プログラムの Makefile を利用できるためです。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.