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