検索

4.5. SPEC ファイルでの作業

download PDF

新しいソフトウェアをパッケージ化するには、SPEC ファイルを作成する必要があります。次のいずれかの方法で spec ファイルを作成できます。

  • 新しい SPEC ファイルを最初から手動で作成します。
  • rpmdev-newspec ユーティリティーを使用します。このユーティリティーは、空の SPEC ファイルを作成します。このファイルに必要なディレクティブとフィールドを入力します。
注記

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

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

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.spec、および pello.spec という名前の 3 つの SPEC ファイルが追加されます。

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

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

4.5.2. オリジナルのスペックファイルの変更

rpmdev-newspec ユーティリティーによって生成された元の出力 仕様 ファイルは、rpmbuild ユーティリティーに必要な指示を提供するために変更する必要があるテンプレートを表します。rpmbuild は これらの命令を使用して RPM パッケージを構築します。

前提条件

手順

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

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

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

    注記

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

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

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

    パッケージの各 バージョンリリース の日付スタンプ付きエントリーのリストを入力します。

    %changelog セクションの最初の行は * 文字で始まり、その後に Day-of-Week Month Day Year Name Surname <email> - Version-Release

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

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

これで、必要なプログラム用に SPEC ファイル全体を作成できるようになりました。

4.5.3. サンプル Bash プログラムのサンプル仕様ファイル

以下に示す、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 プログラムのサンプル仕様ファイル

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

Python で書かれた pello プログラムの SPEC ファイルサンプル

Name:           pello
Version:        0.1.1
Release:        1%{?dist}
Summary:        Hello World example implemented in Python

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

BuildRequires:  python
Requires:       python
Requires:       bash

BuildArch:      noarch

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

%prep
%setup -q

%build

python -m compileall %{name}.py

%install

mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/usr/lib/%{name}

cat > %{buildroot}/%{_bindir}/%{name} <<EOF
#!/bin/bash
/usr/bin/python /usr/lib/%{name}/%{name}.pyc
EOF

chmod 0755 %{buildroot}/%{_bindir}/%{name}

install -m 0644 %{name}.py* %{buildroot}/usr/lib/%{name}/

%files
%license LICENSE
%dir /usr/lib/%{name}/
%{_bindir}/%{name}
/usr/lib/%{name}/%{name}.py*

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

  • Requires ディレクティブ (パッケージにランタイム依存関係を指定) には、以下の 2 つのパッケージが含まれます。

    • 実行時にバイトコンパイルされたコードを実行するために必要な Python パッケージ。
    • 小さなエントリーポイントスクリプトを実行するために必要な bash パッケージ。
  • BuildRequires ディレクティブは、パッケージのビルド時の依存関係を指定し、python パッケージのみを含みます。pello プログラムでは、バイトコンパイルビルドプロセスを実行するために Python が 必要です。
  • ソフトウェアのビルド方法を指定する %build セクションでは、スクリプトのバイトコンパイルバージョンを作成します。実際のパッケージングでは、使用されるディストリビューションに応じて、通常は自動的に実行されることに注意してください。
  • %install セクションは、バイトコンパイルされたファイルをシステム上のライブラリーディレクトリーにインストールしてアクセスできるようにする必要があるという事実に対応しています。

仕様 ファイル内にインラインでラッパースクリプトを作成するこの例は、仕様 ファイル自体がスクリプト可能であることを示しています。このラッパースクリプトは、ヒアドキュメント を使用して Python バイトコンパイルコードを実行します。

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

以下に示す、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 に対する呼び出しを削除する必要があります。

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.