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
$ cd ~/rpmbuild/SPECSCopy to Clipboard Copied! Toggle word wrap Toggle overflow Hello World!プログラムの 3 つの実装それぞれにspecファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~/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>.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 ファイルが作成されました。
4.5.3. サンプル Bash プログラムの spec ファイルの例 リンクのコピーリンクがクリップボードにコピーされました!
以下に示す、bash で書かれた bello プログラムの spec ファイルの例を参考として使用できます。
bash で書かれた bello プログラムの spec ファイルの例
-
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 ファイルの例
Requiresディレクティブ (パッケージにランタイム依存関係を指定) には、以下の 2 つのパッケージが含まれます。-
実行時にバイトコンパイルされたコードを実行するために必要な
pythonパッケージ。 -
小さなエントリーポイントスクリプトを実行するために必要な
bashパッケージ。
-
実行時にバイトコンパイルされたコードを実行するために必要な
-
BuildRequiresディレクティブは、パッケージのビルド時の依存関係を指定し、pythonパッケージのみを含みます。pelloプログラムでは、バイトコンパイルビルドプロセスを実行するためにpythonが必要です。 -
ソフトウェアのビルド方法を指定する
%buildセクションでは、スクリプトのバイトコンパイルバージョンを作成します。実際のパッケージングでは、使用されるディストリビューションに応じて、通常は自動的に実行されることに注意してください。 -
%installセクションは、バイトコンパイルされたファイルをシステム上のライブラリーディレクトリーにインストールしてアクセスできるようにする必要があるという事実に一致しています。
spec ファイル内にインラインでラッパースクリプトを作成するこの例は、spec ファイル自体がスクリプト可能であることを示しています。このラッパースクリプトは、here document を使用して Python バイトコンパイルコードを実行します。
4.5.5. サンプル C プログラムの spec ファイルの例 リンクのコピーリンクがクリップボードにコピーされました!
以下に示す、C プログラミング言語で書かれた cello プログラムの spec ファイルの例を参考として使用できます。
C で書かれた cello の spec ファイルの例
パッケージのビルド時の依存関係を指定する
BuildRequiresディレクティブには、コンパイルビルドプロセスを実行するために必要な次のパッケージが含まれています。-
gcc -
make
-
-
この例では、パッケージにランタイム依存関係を指定する
Requiresディレクティブは省略されています。すべてのランタイム要件はrpmbuildにより処理されます。celloプログラムはコア C 標準ライブラリー以外のものは必要としません。 -
%buildセクションは、この例で cello プログラム用のMakefileファイルを作成したことを反映しています。したがって、GNU make コマンドを使用できます。ただし、設定スクリプトを指定していないため、%configureへの呼び出しを削除する必要があります。
cello プログラムは、%make_install マクロを使用してインストールできます。これが可能なのは、cello プログラムの Makefile を利用できるためです。