4.2. マクロの詳細
本セクションでは、選択したビルトイン RPM マクロについて説明します。このようなマクロの完全なリストは、RPM ドキュメンテーション を参照してください。
4.2.1. 独自のマクロの定義する
次のセクションでは、カスタムマクロの作成方法を説明します。
手順
RPM SPEC ファイルに以下の行を含めます。
%global <name>[(opts)] <body>
\
の周りの空白すべてが削除されます。名前は英数字と _
で設定できます。最低でも 3 文字で指定する必要があります。(opts)
フィールドの指定は任意です。
-
Simple
マクロには、(opts)
フィールドは含まれません。この場合、再帰的なマクロ拡張のみが実行されます。 -
Parametrized
マクロには、(opts)
フィールドが含まれます。括弧で囲まれているopts
文字列は、マクロ呼び出しの開始時にargc/argv
処理のgetopt (3)
に渡されます。
古い RPM SPEC ファイルは、代わりに % define <name> <body>
マクロパターンを使用します。%define
マクロと %global
マクロの違いは次のとおりです。
-
%define
にはローカルスコープがあります。これは、SPEC ファイルの特定の部分に適用されます。使用時に、%define
マクロの本文がデプロイメントされます。 -
%global
にはグローバルスコープがあります。これは SPEC ファイル全体に適用されます。%global
マクロの本文は、定義時にデプロイメントされます。
マクロは、コメントアウトされた場合でも、マクロ名が SPEC ファイルの %changelog
に指定されている場合でも評価されます。マクロをコメントアウトするには %%
を使用します。例: %%global
関連情報
マクロ機能に関する包括的な情報は、RPM ドキュメント を参照してください。
4.2.2. %setup マクロの使用
このセクションでは、%setup
マクロの異なるバリアントを使用して、ソースコード tarball でパッケージを構築する方法を説明します。マクロのバリアントは組み合わせることができることに注意してください。rpmbuild
の出力は、%setup
マクロの標準的な動作を示しています。各フェーズの開始時に、マクロは以下の例のように Executing(%…)
を出力します。
例4.1 %setup
マクロの出力例
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.DhddsG
シェルの出力は、set -x enabled
で設定されます。/var/tmp/rpm-tmp.DhddsG
の内容を表示するには、--debug
オプションを指定します。これは、rpmbuild
により、ビルドの作成後に一時ファイルが削除されるためです。環境変数の設定の後に、以下のような設定が表示されます。
cd '/builddir/build/BUILD' rm -rf 'cello-1.0' /usr/bin/gzip -dc '/builddir/build/SOURCES/cello-1.0.tar.gz' | /usr/bin/tar -xof - STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'cello-1.0' /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
%setup
マクロ:
- 正しいディレクトリーで作業していることを確認します。
- 以前のビルドで残ったファイルを削除します。
- ソース tarball をデプロイメントします。
- 一部のデフォルト権限を設定します。
4.2.2.1. %setup -q マクロの使用
-q
オプションでは、%setup
マクロの冗長性が制限されます。tar -xvof
の代わりに tar -xof
のみが実行されます。このオプションは、最初のオプションとして使用します。
4.2.2.2. %setup -n マクロの使用
- n
オプションは、拡張 tarball からディレクトリー名を指定します。
デプロイメントした tarball のディレクトリーの名前が、想定される名前 (%{name}-%{version}
と異なる場合に、これを使用すると、%setup
マクロのエラーが発生することがあります。
たとえば、パッケージ名が cello
で、ソースコードが hello-1.0.tgz
でアーカイブされ、hello/
ディレクトリーが含まれている場合、SPEC ファイルのコンテンツは次のようになります。
Name: cello
Source0: https://example.com/%{name}/release/hello-%{version}.tar.gz
…
%prep
%setup -n hello
4.2.2.3. %setup -c マクロの使用
-c
オプションは、ソースコード tarball にサブディレクトリーが含まれておらず、デプロイメント後に、アーカイブのファイルで現在のディレクトリーを埋める場合に使用されます。
次に、-c
オプションによりディレクトリーが作成され、以下のようにアーカイブデプロイメント手順に映ります。
/usr/bin/mkdir -p cello-1.0 cd 'cello-1.0'
このディレクトリーは、アーカイブ拡張後も変更されません。
4.2.2.4. %setup -D マクロおよび %setup -T マクロの使用
- D
オプションは、ソースコードのディレクトリーの削除を無効するため、%setup
マクロを複数回使用する場合に特に便利です。-D
オプションでは、次の行は使用されません。
rm -rf 'cello-1.0'
- T
オプションは、スクリプトから以下の行を削除して、ソースコード tarball の拡張を無効にします。
/usr/bin/gzip -dc '/builddir/build/SOURCES/cello-1.0.tar.gz' | /usr/bin/tar -xvvof -
4.2.2.5. %setup -a マクロおよび %setup -b マクロの使用
-a
オプションおよび -b
オプションは、特定のソースを拡張します。
-b
オプションは before
を意味し、作業ディレクトリーに移動する前に特定のソースをデプロイメントします。-a
オプションは after
を意味し、移動後にそのソースをデプロイメントします。これらの引数は、SPEC ファイルのプリアンブルからのソース番号です。
以下の例では、cello-1.0.tar.gz
アーカイブに空の example
ディレクトリーが含まれています。サンプルは、別の example.tar.gz
tarball に同梱されており、同じ名前のディレクトリーにデプロイメントされます。この場合、作業ディレクトリーに移動してから Source1
を展開する場合は、-a 1
を指定します。
Source0: https://example.com/%{name}/release/%{name}-%{version}.tar.gz
Source1: examples.tar.gz
…
%prep
%setup -a 1
以下の例では、サンプルは cello-1.0-examples.tar.gz
tarball にあり、cello-1.0/examples
にデプロイメントされます。この場合、作業ディレクトリーに移動する前に、-b 1
を指定して Source1
をデプロイメントします。
Source0: https://example.com/%{name}/release/%{name}-%{version}.tar.gz
Source1: %{name}-%{version}-examples.tar.gz
…
%prep
%setup -b 1
4.2.3. %files セクション共通の RPM マクロ
このセクションでは、SPEC ファイルの %files
セクションで必要となる高度な RPM マクロを紹介します。
マクロ | 定義 |
---|---|
%license |
マクロは、LICENSE ファイルとしてリストされているファイルを識別します。そしてインストールされ、RPM などとしてラベルが付けられます。例: |
%doc |
マクロは、ドキュメントとしてリストされるファイルを識別して、RPM によりインストールされ、ラベル付けされます。このマクロは、パッケージソフトウェアに関するドキュメントや、コード例や、付随するさまざまなアイテムに使用されます。コードの例が含まれる場合は、実行ファイルから実行可能モードを削除するように注意してください。例: |
%dir |
このマクロは、そのパスが、この RPM が所有するディレクトリーとなるようにします。これは、RPM ファイルマニフェストが、アンインストール時にどのディレクトリーをクリーンアップするかを正確に認識できるようにするために重要です。例: |
%config (noreplace) |
このマクロにより、次のファイルが設定ファイルであることが保証されます。そのため、ファイルを元のインストールチェックサムから修正しても、パッケージのインストールまたは更新で上書き (または置き換え) しないでください。変更がある場合は、アップグレード時またはインストール時にファイル名の末尾に |
4.2.4. ビルトインマクロの表示
複数のビルトイン RPM マクロを指定します。
手順
ビルトイン RPM マクロをすべて表示するには、以下のコマンドを実行します。
rpm --showrc
注記出力のサイズは非常に大きくなります。結果を絞り込むには、
grep
コマンドとともに上記のコマンドを使用します。システムの RPM バージョン用の RPM マクロに関する情報を確認するには、以下のコマンドを実行します。
rpm -ql rpm
注記RPM マクロは、出力ディレクトリー構造の
macros
というタイトルのファイルです。
4.2.5. RPM ディストリビューションマクロ
パッケージ化しているソフトウェアの言語実装や、ディストリビューションの特定のガイドラインに基づいて提供する推奨 RPM マクロセットは、ディストリビューションによって異なります。
多くの場合、推奨される RPM マクロセットは RPM パッケージとして提供され、yum
パッケージマネージャーでインストールできます。
インストールすると、マクロファイルは、/usr/lib/rpm/macros.d/
ディレクトリーに配置されます。
raw RPM マクロ定義を表示するには、以下のコマンドを実行します。
rpm --showrc
上記の出力では、raw RPM マクロ定義が表示されます。
RPM のパッケージ化を行う際のマクロの機能や、マクロがどう役立つかを確認するには、rpm --eval
コマンドに、引数として使用するマクロの名前を付けて実行します。
rpm --eval %{_MACRO}
詳細は rpm
の man ページを参照してください。
4.2.5.1. カスタムマクロの作成
~/.rpmmacros
ファイル内のディストリビューションマクロは、カスタムマクロで上書きできます。加えた変更は、マシン上のすべてのビルドに影響します。
~/.rpmmacros
ファイルで新しいマクロを定義することは推奨されません。このようなマクロは、ユーザーがパッケージを再構築する可能性がある他のマシンには存在しません。
マクロを上書きするには、次のコマンドを実行します。
%_topdir /opt/some/working/directory/rpmbuild
上記の例から、rpmde-setuptree
ユーティリティーを使用して、すべてのサブディレクトリーを含むディレクトリーを作成できます。このマクロの値は、デフォルトでは ~/rpmbuild
です。
%_smp_mflags -l3
上記のマクロは、Makefile に渡すためによく使用されます。たとえば、make %{?_smp_mflags}
と、ビルドフェーズ時に多数の同時プロセスを設定します。デフォルトでは、-jX
に設定されています。X
は多数のコアです。コア数を変すると、パッケージビルドの速度アップまたはダウンを行うことができます。