Por que é TOPDIR conjunto com o seu valor padrão quando rpmbuild chamado de tcl?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um script tcl que 'exec' rpmbuild. Ao fazê-lo, o 'TOPDIR' usado por rpmbuild está errado. Eu tenho um arquivo .rpmmacros no meu diretório home e se eu chamar rpmbuild manualmente, ele funciona bem, isto é. o 'TOPDIR' não é o padrão.

Eu adicionei um [rpmbuild exec "--showrc"] no script tcl para verificar o valor de TOPDIR e ele diz '-14: _topdir% {_ usrsrc } / redhat', que é o valor padrão.

Alguém pode me explicar por que é que situação e como resolvê-lo?

Eu preferiria não ter que especificá-lo com --define porque ele é realmente feito em um makefile e eu não quero tocá-lo (se não houver outra opção, vou fazê-lo).

Foi útil?

Solução

Há duas maneiras de alterar a TOPDIR rpmbuild padrão:

  1. Por Usuário: Ao configurar o TOPDIR RPM em $ HOME / .rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Por-Projeto: Ao configurar o TOPDIR RPM no Makefile ou na linha de comando

    rpmbuild --define '_topdir build' -ba package.spec
    

Nota: em ambos os casos, você vai precisar para se certificar de seu diretório TOPDIR tem os diretórios apropriados (BUILD, SRPM, RPM, especificações e fontes)

Outras dicas

Em RHEL6 fazer:

  rpm --showrc|grep topdir
  rpm --showrc|grep srcrpmdir

Para ver quais são os caminhos sendo usado!

Faça esta mudança (meu TOPDIR não foi definido para /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 vai exec no diretório atual por padrão. Você pode alterar o diretório atual usando o comando TCL http: // www .tcl.tk / man / tcl8.4 / TclCmd / cd.htm cd, por exemplo:

cd ~username

Se TOPDIR é uma variável de ambiente, você pode ser capaz de defini-lo http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 assim:

set env(topdir) whatever/you/want

O meu primeiro cheque seria para se certificar de que você executar a mesma coisa. Será que estes dois na linha de comando para garantir que os aliases ou caminhos fazer qualquer coisa não perturbe.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh

No meu caso, isso é devido ao $ HOME variável que não é definido quando rpmbuild é chamado.
A variável é utilizada para procurar o arquivo '/ rpmmacros'. Eu sugiro usar o comando 'printenv' para verificar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top