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