5.4. spec ファイルでの作業
新しいソフトウェアをパッケージ化するには、spec ファイルを作成する必要があります。spec ファイルは次のいずれかの方法で作成できます。
-
新しい
specファイルを最初から手動で作成します。 -
rpmdev-newspecユーティリティーを使用します。このユーティリティーは、空のspecファイルを作成します。このファイルに必要なディレクティブとフィールドを入力します。
プログラマー向けのテキストエディターの中には、新しい spec ファイルに独自の spec テンプレートを事前に入力するものもあります。rpmdev-newspec ユーティリティーは、テキストエディターに依存しない方法を提供します。
5.4.1. サンプルの Bash、Python、および C プログラム用の新しい spec ファイルを作成する リンクのコピーリンクがクリップボードにコピーされました!
rpmdev-newspec ユーティリティーを使用して、Hello World! プログラムの 3 つの実装それぞれに spec ファイルを作成できます。
前提条件
次の
Hello World!プログラム実装が、~/rpmbuild/SOURCESディレクトリーに配置されている。
手順
~/rpmbuild/SPECSディレクトリーに移動します。$ cd ~/rpmbuild/SPECSHello 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 python-pello python-pello.spec created; type minimal, rpm version >= 4.11.重要Python プロジェクトを RPM にパッケージ化するときは、常に
python-接頭辞をプロジェクトの元の名前に追加してください。ここではプロジェクト名がPelloであるため、specの名前はpython-pelloになります。~/rpmbuild/SPECS/ディレクトリーに、bello.spec、cello.spec、python-pello.specという 3 つのspecファイルが含まれた状態になります。作成されたファイルを調べます。
ファイル内のディレクティブは、spec ファイルについて で説明されているものです。次のセクションでは、
rpmdev -newspecの出力ファイルの特定のセクションを作成します。
5.4.2. 元の spec ファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
rpmdev-newspec ユーティリティーによって生成される元の出力 spec ファイルは、テンプレートです。このテンプレートを変更して、rpmbuild ユーティリティーに必要な指示を提供する必要があります。rpmbuild は、その指示を使用して RPM パッケージをビルドします。
前提条件
-
未入力の
~/rpmbuild/SPECS/<name>.specspecファイルを、rpmdev-newspecユーティリティーを使用して作成した。詳細は、サンプルの Bash、Python、および C プログラム用の新しい 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 ファイルが作成されました。
5.4.3. サンプル Bash プログラムの spec ファイルの例 リンクのコピーリンクがクリップボードにコピーされました!
以下に示す、bash で書かれた bello プログラムの spec ファイルの例を参考として使用できます。
bash で書かれたプログラムの 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
%autosetup
%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シェル環境のみが必要であるためです。 -
%autosetupマクロは、Source0ディレクティブによって参照されるソースアーカイブを展開し、それを変更します。 -
ソフトウェアのビルド方法を指定する
%buildセクションは空白です。これはbashスクリプトはビルドする必要がないためです。
bello をインストールするには、インストール先ディレクトリーを作成し、そこに実行可能な bash スクリプトファイルをインストールする必要があります。したがって、%install セクションで install コマンドを使用できます。RPM マクロを使用すると、パスをハードコーディングせずにこれを行うことができます。
5.4.4. Python で書かれたプログラムの spec ファイルの例 リンクのコピーリンクがクリップボードにコピーされました!
以下に示す、Python プログラミング言語で書かれた pello プログラムの spec ファイルの例を参考として使用できます。
Python で書かれたプログラムの spec ファイルの例
%global python3_pkgversion 3.12
Name: python-pello
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
# 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
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
%install
# The macro only supported projects with setup.py
%py3_install
%check
%{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/
%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 1.0.2-1
- First pello package
- 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コマンドを実行することができます。
5.4.5. サンプル C プログラムの spec ファイルの例 リンクのコピーリンクがクリップボードにコピーされました!
以下に示す、C プログラミング言語で書かれた cello プログラムの spec ファイルの例を参考として使用できます。
C 言語で書かれたプログラムの 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.patch
BuildRequires: gcc
BuildRequires: make
%description
The long-tail description for our Hello World Example implemented in
C.
%prep
%autosetup
%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 標準ライブラリー以外のものは必要としません。 -
%autosetupマクロは、Source0ディレクティブによって参照されるソースアーカイブを展開し、それを変更します。 -
%buildセクションは、この例で cello プログラム用のMakefileファイルを作成したことを反映しています。したがって、GNU make コマンドを使用できます。ただし、設定スクリプトを指定していないため、%configureへの呼び出しを削除する必要があります。
cello プログラムは、%make_install マクロを使用してインストールできます。これが可能なのは、cello プログラムの Makefile を利用できるためです。