我有一个'exec'rpmbuild的tcl脚本。这样做时,rpmbuild使用的'topdir'是错误的。我的主目录中有一个.rpmmacros文件,如果我手动调用rpmbuild,它工作正常,即。 'topdir'不是默认值。
我在tcl脚本中添加了 [exec rpmbuild“--showrc”] 以检查 topdir 的值,并显示'-14:_topdir%{_ usrsrc } / redhat'这是默认值。
有人能解释我为什么会出现这种情况以及如何解决这个问题?
我不想用--define指定它,因为它实际上是在makefile中完成的,我不想触摸它(如果没有其他选择,我会这样做)。
答案 0 :(得分:87)
有两种方法可以更改默认的rpmbuild topdir:
每位用户:通过在$ HOME / .rpmmacros中配置RPM topdir
%_topdir %{getenv:HOME}/rpmbuild
Per-Project:通过在Makefile或命令行中配置RPM topdir
rpmbuild --define '_topdir build' -ba package.spec
注意:在这两种情况下,您都需要确保topdir目录具有相应的目录(BUILD,SRPM,RPM,SPECS和SOURCES)
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:1)
我的第一个检查是确保你执行同样的事情。 在命令行上执行这两项操作以确保别名或路径 不要打扰任何事情。
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh
答案 4 :(得分:0)
在我的情况下,这是由于变量$ HOME在调用rpmbuild时未设置。
该变量用于搜索' / rpmmacros'文件。我建议使用命令' printenv'核实。