5.2. マクロの詳細
このセクションでは、選択したビルトイン RPM マクロを説明します。そのようなマクロの完全なリストは、RPM ドキュメンテーション を参照してください。
5.2.1. 独自のマクロの定義する リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、カスタムマクロの作成方法を説明します。
手順
RPM
specファイルに次の行を含めます。%global <name>[(opts)] <body>
<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
5.2.2. %setup マクロの使用 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、%setup マクロの異なるバリアントを使用して、ソースコード tarball でパッケージを構築する方法を説明します。マクロバリアントは組み合わせることができることに注意してください。rpmbuild の出力は、%setup マクロにおける標準的な挙動を示しています。各フェーズの開始時に、マクロは以下の例のように Executing(%…) を出力します。
例5.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 をデプロイメントします。
- 一部のデフォルト権限を設定します。
5.2.2.1. %setup -q マクロの使用 リンクのコピーリンクがクリップボードにコピーされました!
-q オプションでは、%setup マクロの冗長性が制限されます。tar -xvvof の代わりに tar -xof のみが実行されます。このオプションは、最初のオプションとして使用します。
5.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
5.2.2.3. %setup -c マクロの使用 リンクのコピーリンクがクリップボードにコピーされました!
-c オプションは、ソースコード tarball にサブディレクトリーが含まれておらず、デプロイメント後に、アーカイブのファイルで現在のディレクトリーを埋める場合に使用されます。
次に、-c オプションによりディレクトリーが作成され、以下のようにアーカイブデプロイメント手順に映ります。
/usr/bin/mkdir -p cello-1.0
cd 'cello-1.0'
このディレクトリーは、アーカイブ拡張後も変更されません。
5.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 -
5.2.2.5. %setup -a マクロおよび %setup -b マクロの使用 リンクのコピーリンクがクリップボードにコピーされました!
-a オプションおよび -b オプションは、特定のソースを拡張します。
-
-bオプションはbeforeを表します。このオプションは、作業ディレクトリーに移動する前に特定のソースを展開します。 -
-aオプションはafterを表します。このオプションは、移動した後にそれらのソースを展開します。引数は、specファイルの Preamble のソース番号です。
以下の例では、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
5.2.3. %files セクション共通の RPM マクロ リンクのコピーリンクがクリップボードにコピーされました!
次の表は、spec ファイルの %files セクションに必要な高度な RPM マクロを示しています。
| マクロ | 定義 |
|---|---|
| %license |
|
| %doc |
|
| %dir |
|
| %config(noreplace) |
|
5.2.4. ビルトインマクロの表示 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux では、複数のビルトイン RPM マクロを提供しています。
手順
ビルトイン RPM マクロをすべて表示するには、以下のコマンドを実行します。
rpm --showrc注記出力のサイズは非常に大きくなります。結果を絞り込むには、
grepコマンドとともに上記のコマンドを使用します。システムの RPM バージョン用の RPM マクロに関する情報を確認するには、以下のコマンドを実行します。
rpm -ql rpm注記RPM マクロは、出力ディレクトリー構造の
macrosというタイトルのファイルです。
5.2.5. RPM ディストリビューションマクロ リンクのコピーリンクがクリップボードにコピーされました!
パッケージ化しているソフトウェアの言語実装や、ディストリビューションの特定のガイドラインに基づいて提供する推奨 RPM マクロセットは、ディストリビューションによって異なります。
多くの場合、推奨される RPM マクロセットは RPM パッケージとして提供され、yum パッケージマネージャーでインストールできます。
インストールすると、マクロファイルは、/usr/lib/rpm/macros.d/ ディレクトリーに配置されます。
手順
raw RPM マクロ定義を表示するには、以下のコマンドを実行します。
rpm --showrc
上記の出力では、raw RPM マクロ定義が表示されます。
RPM のパッケージ化を行う際のマクロの機能や、マクロがどう役立つかを確認するには、
rpm --evalコマンドに、引数として使用するマクロの名前を付けて実行します。rpm --eval %{_MACRO}
5.2.6. カスタムマクロの作成 リンクのコピーリンクがクリップボードにコピーされました!
~/.rpmmacros ファイル内のディストリビューションマクロは、カスタムマクロで上書きできます。加えた変更は、マシン上のすべてのビルドに影響します。
~/.rpmmacros ファイルで新しいマクロを定義することは推奨されません。このようなマクロは、ユーザーがパッケージを再構築する可能性がある他のマシンには存在しません。
手順
マクロを上書きするには、次のコマンドを実行します。
%_topdir /opt/some/working/directory/rpmbuild
上記の例から、rpmde-setuptree ユーティリティーを使用して、すべてのサブディレクトリーを含むディレクトリーを作成できます。このマクロの値は、デフォルトでは ~/rpmbuild です。
%_smp_mflags -l3
上記のマクロは、Makefile に渡すためによく使用されます。たとえば、make %{?_smp_mflags} と、ビルドフェーズ時に多数の同時プロセスを設定します。デフォルトでは、-jX に設定されています。X は多数のコアです。コア数を変すると、パッケージビルドの速度アップまたはダウンを行うことができます。