Подтвердить что ты не робот

Почему topdir установлен на значение по умолчанию, когда rpmbuild вызван из tcl?

У меня есть tcl script, который "exec" rpmbuild. При этом "topdir", используемый rpmbuild, неверен. У меня есть файл .rpmmacros в моем домашнем каталоге, и если я вызову вручную rpmbuild, он отлично работает, т.е. "topdir" не является стандартным.

Я добавил [exec rpmbuild "--showrc" ] в tcl script, чтобы проверить значение topdir, и он говорит '-14: _topdir% {_ usrsrc}/redhat', который является значением по умолчанию.

Может кто-нибудь объяснить мне, почему эта ситуация и как ее решить?

Я бы предпочел не указывать его с помощью -define, потому что это действительно сделано в make файле, и я не хочу его трогать (если нет другого выбора, я сделаю это).

4b9b3361

Ответ 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' для проверки.