Perché topdir è impostato sul valore predefinito quando rpmbuild viene chiamato da tcl?
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ò).
Soluzione
Esistono due modi per modificare rpmbuild topdir predefinito:
-
Per utente: configurando l'RPM topdir in $ HOME / .rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
-
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.