Почему topdir имеет значение по умолчанию при вызове rpmbuild из tcl?
Вопрос
У меня есть tcl-скрипт, который 'exec' rpmbuild. При этом «topdir», используемый rpmbuild, неверен. У меня есть файл .rpmmacros в моем домашнем каталоге, и если я вызываю вручную rpmbuild, он работает нормально, т.е. topdir не является значением по умолчанию. Р>
Я добавил [exec rpmbuild " - showrc " ] в сценарии tcl, чтобы проверить значение topdir , и там указано «-14: _topdir% {_ usrsrc} / redhat», что является значением по умолчанию. Р>
Может кто-нибудь объяснить мне, почему такая ситуация и как ее решить? Р>
Я бы предпочел не указывать это с помощью --define, потому что на самом деле это делается в make-файле, и я не хочу к нему прикасаться (если нет другого выбора, я это сделаю).
Решение
Есть два способа изменить верхний каталог rpmbuild по умолчанию:
<Ол>Для каждого пользователя: путем настройки topdir RPM в $ HOME / .rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
Для каждого проекта: путем настройки topdir RPM в Makefile или в командной строке
rpmbuild --define '_topdir build' -ba package.spec
Примечание: в обоих случаях вам нужно убедиться, что в вашем каталоге topdir есть соответствующие каталоги (BUILD, SRPM, RPM, SPECS и SOURCES)
Другие советы
В 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
В моем случае это связано с переменной $ HOME, которая не устанавливается при вызове rpmbuild.
Переменная используется для поиска файла '/ rpmmacros'. Я предлагаю использовать команду «printenv» для проверки. Р>