web-dev-qa-db-ja.com

呼び出しごとにrpmbuildのビルド領域を設定する方法

自動ビルドを変更していて、rpmbuild呼び出すときに特定のビルド領域を使用するように指示したいと思います

これは 既存の質問 に似ていますが、より具体的です。

  • Rootユーザーとしてビルドコマンドを実行したくありません。目的はRPMを持つことだけであり、システムに何もインストールすることではありません。

  • したくない ユーザーにドットファイルの変更を要求する (例:$HOME/.rpmrc);ビルドは自己完結型であり、ユーザーの既存の設定に影響を与えないようにする必要があります。

  • 場所をfoo.specファイルにハードコーディングしたくありません。ユーザーが別の場所にビルドする場合は、そのファイルをそのまま使用できる必要があります。

  • --buildrootオプション は私が必要とするものではありません。これは、ビルドプロセスのmake部分に疑似ルートファイルシステムを設定しますが、全体RPMビルドプロセスの「ビルド領域」を指定する必要があります。

私が探しているのは、rpmbuildコマンドに指定できる架空の--build-area FOODIRオプション、または同等のものです。環境変数。したがって、コマンドの1回の呼び出しにのみ影響し、ビルド領域に指定されたユーザー書き込み可能な場所を使用するようになります。

私が話しているように見える_topdirマクロへの参照を見てきましたが、呼び出しごとに構成可能ではないようです。

rpmbuildが必要なときにその場所に独自の環境をセットアップできれば理想的ですが、ビルドの一部として自動化できるため、ビルドごとにディレクトリをセットアップしてもかまいません。 。目標は、ビルド実行中のみユーザーが書き込み可能な場所が存在するようにし、RPMが完了したらその場所全体を削除してクリーンアップすることです。ファイルが生成されます。

36
bignose

文書化されていませんが、_topdirマクロがビルド領域を決定します。

したがって、この呼び出しごとにrpmbuild --define "_topdir ${PWD}/foobar" ...を使用して設定し、ディレクトリを任意の値に設定できます。

--defineは、_topdirだけでなく、任意のマクロの値を設定するための鍵です。

72
Noah Campbell

--buildrootオプションは、探しているものではありません。この名前は、ビルドルートを変更するのではなく、ビルドのインストールフェーズのルートを設定するため、少し誤解を招く可能性があります。 RPMは基本的に、ビルドの一部として「make install」を実行し、その結果をパックしています。 buildrootオプションを使用すると、このインストールをたとえば/ tmp/myinstallrootに実行できます。

最近、rpmパッケージビルドを自動ビルドに統合する必要があり、同じ問題が発生しました。私がしたことは、%topdirが適切に設定されたカスタム.rpmmacrosファイルを生成することでした。次に、HOMEをそのカスタム.rpmmacrosファイルの場所に一時的に変更します。

"HOME=mytopdir rpmbuild ...".
4