4.5. SPEC ファイルでの作業
新しいソフトウェアをパッケージ化するには、SPEC ファイルを作成する必要があります。次のいずれかの方法で spec
ファイルを作成できます。
- 新しい SPEC ファイルを最初から手動で作成します。
-
rpmdev-newspec
ユーティリティーを使用します。このユーティリティーは、空の SPEC ファイルを作成します。このファイルに必要なディレクティブとフィールドを入力します。
プログラマーに焦点を合わせたテキストエディターの中には、独自の SPEC テンプレートで新しい .spec
ファイルを事前に準備しているものもあります。rpmdev-newspec
ユーティリティーでは、エディターに依存しないアプローチを利用できます。
4.5.1. サンプル Bash、C、Python プログラム用の新しい仕様ファイルを作成する
rpmdev-newspec
ユーティリティーを使用して、Hello World!
プログラムの 3 つの実装ごとに spec
ファイルを作成できます。
前提条件
次の
Hello World!
プログラム実装は、~/rpmbuild/SOURCES
ディレクトリーに配置されました。
手順
~/rpmbuild/SPECS
ディレクトリーに移動します。$ cd ~/rpmbuild/SPECS
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.spec
、cello.spec
、およびpello.spec
という名前の 3 つの SPEC ファイルが追加されます。作成されたファイルを調べます。
ファイル内のディレクティブは 、仕様ファイルについて で説明されているものを表します。次のセクションでは、
rpmdev -newspec
の出力ファイルの特定のセクションを作成します。
4.5.2. オリジナルのスペックファイルの変更
rpmdev-newspec
ユーティリティーによって生成された元の出力 仕様
ファイルは、rpmbuild
ユーティリティーに必要な指示を提供するために変更する必要があるテンプレートを表します。rpmbuild は
これらの命令を使用して RPM パッケージを構築します。
前提条件
-
未入力の
~/rpmbuild/SPECS/<name>.spec
仕様
ファイルは、rpmdev-newspec
ユーティリティーを使用して作成されました。詳細は、サンプルの Bash、C、および Python プログラム用の新しい仕様ファイルを作成する を参照してください。
手順
-
rpmdev-newspec
ユーティリティーによって提供される~/rpmbuild/SPECS/<name>.spec
ファイルを開きます。 仕様
ファイルの プリアンブル セクションに次のディレクティブを入力します。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
- ソフトウェアアーキテクチャーを指定します。
仕様
ファイルの 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 が利用できるため可能です。
関連情報