36

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

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

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

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

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

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

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

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

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

4

2 に答える 2

74

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

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

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

于 2010-11-25T18:56:22.600 に答える
4

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

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

"HOME=mytopdir rpmbuild ...".
于 2010-06-04T04:18:11.290 に答える