RPMBuild가 TCL에서 전화했을 때 Topdir가 기본값으로 설정되는 이유는 무엇입니까?
문제
rpmbuild를 'exec'rpmbuild로하는 tcl 스크립트가 있습니다. 그렇게 할 때 RPMBuild가 사용하는 'Topdir'가 잘못되었습니다. 내 홈 디렉토리에 .rpmmacros 파일이 있고 수동으로 rpmbuild를 호출하면 잘 작동합니다. 'Topdir'는 기본값이 아닙니다.
나는 추가했다 exec rpmbuild "-showrc" TCL 스크립트에서 값을 확인합니다 Topdir 그리고 기본값 인 '-14 : _topdir %{_ usrsrc}/redhat'이라고 말합니다.
누군가가 왜 그 상황인지, 어떻게 해결하는지 설명 할 수 있습니까?
나는 실제로 makefile에서 수행되기 때문에 -define으로 그것을 지정하지 않기를 원하며 그것을 만지고 싶지 않기 때문에 (다른 선택이 없다면, 나는 그것을 할 것입니다).
해결책
기본 rpmbuild topdir를 변경하는 두 가지 방법이 있습니다.
사용자 당 : $ home/.rpmmacros의 RPM Topdir를 구성하여
%_topdir %{getenv:HOME}/rpmbuild
프로젝트 당 : makefile 또는 명령 줄에서 RPM Topdir를 구성하여
rpmbuild --define '_topdir build' -ba package.spec
참고 : 두 경우 모두 Topdir 디렉토리에 적절한 디렉토리 (빌드, SRPM, RPM, 사양 및 소스)가 있는지 확인해야합니다.
다른 팁
~ 안에 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
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
첫 번째 점검은 동일한 것을 실행하는 것입니다. 명령 줄 에서이 두 가지를 수행하여 별칭이나 경로가 아무것도 방해하지 않도록하십시오.
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh
필자의 경우, 이것은 rpmbuild가 호출 될 때 설정되지 않은 변수 $ 홈 때문입니다.
변수는 '/rpmmacros'파일을 검색하는 데 사용됩니다. 'printenv'명령을 사용하여 확인하는 것이 좋습니다.