Почему topdir имеет значение по умолчанию при вызове rpmbuild из tcl?

StackOverflow https://stackoverflow.com/questions/416983

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть 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» для проверки.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top