4.5. spec ファイルでの作業
新しいソフトウェアをパッケージ化するには、spec
ファイルを作成する必要があります。spec
ファイルは次のいずれかの方法で作成できます。
-
新しい
spec
ファイルを最初から手動で作成します。 -
rpmdev-newspec
ユーティリティーを使用します。このユーティリティーは、空のspec
ファイルを作成します。このファイルに必要なディレクティブとフィールドを入力します。
プログラマー向けのテキストエディターの中には、新しい spec
ファイルに独自の spec
テンプレートを事前に入力するものもあります。rpmdev-newspec
ユーティリティーでは、エディターに依存しないアプローチを利用できます。
4.5.1. サンプルの Bash、Python、および C プログラム用の新しい 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
ユーティリティーによって生成された元の出力 仕様
ファイルは、rpmbuild
ユーティリティーに必要な指示を提供するために変更する必要があるテンプレートを表します。rpmbuild は
これらの命令を使用して RPM パッケージを構築します。
前提条件
-
未入力の
~/rpmbuild/SPECS/<name>.spec
spec
ファイルを、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
ファイルが作成されました。
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 ファイルの例
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 プログラムの 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
を利用できるためです。
関連情報