28

我有一个 'exec' rpmbuild 的 tcl 脚本。这样做时,rpmbuild 使用的“topdir”是错误的。我的主目录中有一个 .rpmmacros 文件,如果我手动调用 rpmbuild,它可以正常工作,即。“topdir”不是默认的。

我在 tcl 脚本中添加了一个[exec rpmbuild "--showrc" ]来检查topdir的值,它显示 '-14: _topdir %{_usrsrc}/redhat' 这是默认值。

有人可以解释一下为什么会出现这种情况以及如何解决吗?

我宁愿不必用 --define 指定它,因为它实际上是在 makefile 中完成的,我不想碰它(如果没有其他选择,我会这样做)。

4

5 回答 5

96

有两种方法可以更改默认的 rpmbuild topdir:

  1. 每个用户:通过在 $HOME/.rpmmacros 中配置 RPM topdir

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. 每个项目:通过在 Makefile 或命令行中配置 RPM topdir

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

注意:在这两种情况下,您都需要确保您的 topdir 目录具有适当的目录(BUILD、SRPM、RPM、SPECS 和 SOURCES)

于 2010-06-21T00:34:53.573 回答
10

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
于 2011-12-29T17:00:18.010 回答
1

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
于 2009-01-06T18:09:44.610 回答
1

我的第一个检查是确保您执行相同的操作。在命令行上执行这两个操作以确保别名或路径不会干扰任何内容。

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
于 2009-01-21T07:36:08.870 回答
0

就我而言,这是由于调用 rpmbuild 时未设置变量 $HOME 所致。
该变量用于搜索“/rpmmacros”文件。我建议使用命令'printenv'来验证。

于 2017-04-12T21:49:14.797 回答