Perché topdir è impostato sul valore predefinito quando rpmbuild viene chiamato da tcl?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho uno script tcl che 'exec' rpmbuild. Nel fare ciò, il 'topdir' usato da rpmbuild è sbagliato. Ho un file .rpmmacros nella mia home directory e se chiamo manualmente rpmbuild, funziona bene, cioè. il 'topdir' non è quello predefinito.

Ho aggiunto un [exec rpmbuild " - showrc " ] nello script tcl per verificare il valore di topdir e dice '-14: _topdir% {_ usrsrc} / redhat' che è il valore predefinito.

Qualcuno può spiegarmi perché è quella situazione e come risolverla?

Preferirei non doverlo specificare con --define perché è effettivamente fatto in un makefile e non voglio toccarlo (se non ho altra scelta, lo farò).

È stato utile?

Soluzione

Esistono due modi per modificare rpmbuild topdir predefinito:

  1. Per utente: configurando l'RPM topdir in $ HOME / .rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Per progetto: configurando l'RPM topdir nel Makefile o nella riga di comando

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

Nota: in entrambi i casi, dovrai assicurarti che la tua directory topdir abbia le directory appropriate (BUILD, SRPM, RPM, SPECS e SOURCES)

Altri suggerimenti

In RHEL6 fai:

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

Per vedere quali sono i percorsi utilizzati!

Apporta questa modifica (il mio topdir NON era impostato su / 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 verrà eseguito nella directory corrente per impostazione predefinita. Puoi cambiare la directory corrente usando il comando TCL http: // www .tcl.tk / man / tcl8.4 / TclCmd / cd.htm cd, ad esempio:

cd ~username

Se topdir è una variabile d'ambiente, potresti essere in grado di impostarla http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 in questo modo:

set env(topdir) whatever/you/want

Il mio primo controllo sarebbe quello di assicurarmi di eseguire la stessa cosa. Esegui questi due sulla riga di comando per assicurarti alias o percorsi non disturbare nulla.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh

Nel mio caso, ciò è dovuto alla variabile $ HOME che non è impostata quando viene chiamato rpmbuild.
La variabile viene utilizzata per cercare il file '/ rpmmacros'. Suggerisco di usare il comando 'printenv' per verificare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top