web-dev-qa-db-ja.com

rpmbuildがtclから呼び出されたときに、topdirがデフォルト値に設定されるのはなぜですか?

'exec'rpmbuildするtclスクリプトがあります。そうするとき、rpmbuildによって使用される「topdir」は間違っています。ホームディレクトリに.rpmmacrosファイルがあり、手動でrpmbuildを呼び出すと、正常に動作します。 'topdir'はデフォルトではありません。

[exec rpmbuild "--showrc"]をtclスクリプトに追加して、topdirの値を確認すると、 '-14:_topdir%{_ usrsrc}/redhatと表示されます。 'これはデフォルト値です。

誰かが私にその状況がなぜであり、それを解決する方法を説明できますか?

これは実際にはメイクファイルで行われ、触れたくないので、-defineで指定する必要はありません(他に選択肢がない場合は、行います)。

25
Barth

デフォルトのrpmbuildtopdirを変更する方法は2つあります。

  1. ユーザーごと:$ HOME /.rpmmacrosでRPMトップディレクトリを構成する

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. プロジェクトごと:MakefileまたはコマンドラインでRPMtopdirを構成する

    rpmbuild --define '_topdir build' -ba package.spec
    

注:どちらの場合も、topdirディレクトリに適切なディレクトリ(BUILD、SRPM、RPM、SPECS、およびSOURCES)があることを確認する必要があります。

89
Zach Garner

RHEL6で:

  rpm --showrc|grep topdir
  rpm --showrc|grep srcrpmdir

使用されているパスを確認するには!

この変更を行います(私のtopdirが/usr/src/に設定されていません):

vi  /usr/lib/rpm/macros
#       Path to top of build area.
#%_topdir               %{getenv:HOME}/rpmbuild
%_topdir                %{_usrsrc}/redhat

rpm --showrc|grep topdir    now shows   /usr/src/redhat/ as its BUILD dir
10
ahmad

TCLは、デフォルトで現在のディレクトリで実行されます。 TCLコマンドを使用して現在のディレクトリを変更できます http://www.tcl.tk/man/tcl8.4/TclCmd/cd.htm cd、例:

cd ~username

Topdirが環境変数の場合、次のように設定できる可能性があります http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4

set env(topdir) whatever/you/want
1
Joseph Bui

私の最初のチェックは、あなたが同じことを実行することを確認することです。コマンドラインでこれら2つを実行して、エイリアスまたはパスが何も邪魔しないことを確認します。

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
1
Hugge

私の場合、これは、rpmbuildが呼び出されたときに設定されない変数$ HOMEが原因です。
この変数は、「/ rpmmacros」ファイルを検索するために使用されます。コマンド「printenv」を使用して確認することをお勧めします。

0
l-sebastien