¿Por qué se establece topdir en su valor predeterminado cuando se llama a rpmbuild desde tcl?
Pregunta
Tengo un script tcl que 'exec' rpmbuild. Al hacerlo, el 'topdir' utilizado por rpmbuild está mal. Tengo un archivo .rpmmacros en mi directorio de inicio y si llamo rpmbuild manualmente, funciona bien, es decir. el 'topdir' no es el predeterminado.
Agregué un [exec rpmbuild " - showrc " ] en el script tcl para verificar el valor de topdir y dice '-14: _topdir% {_ usrsrc} / redhat', que es el valor predeterminado.
¿Puede alguien explicarme por qué es esa situación y cómo resolverla?
Preferiría no tener que especificarlo con --define porque en realidad se hace en un archivo MAKE y no quiero tocarlo (si no hay otra opción, lo haré).
Solución
Hay dos formas de cambiar el rdmbuild topdir predeterminado:
-
Por usuario: configurando el topdir RPM en $ HOME / .rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
-
Por proyecto: configurando el topdir RPM en el Makefile o en la línea de comando
rpmbuild --define '_topdir build' -ba package.spec
Nota: en ambos casos, deberá asegurarse de que su directorio topdir tenga los directorios apropiados (BUILD, SRPM, RPM, SPECS y SOURCES)
Otros consejos
En RHEL6 haz:
rpm --showrc|grep topdir
rpm --showrc|grep srcrpmdir
¡Para ver cuáles son las rutas que se utilizan!
Realice este cambio (mi directorio superior NO se configuró en / 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 se ejecutará en el directorio actual de forma predeterminada. Puede cambiar el directorio actual usando el comando TCL http: // www .tcl.tk / man / tcl8.4 / TclCmd / cd.htm cd, por ejemplo:
cd ~username
Si topdir es una variable de entorno, puede configurarlo http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 así:
set env(topdir) whatever/you/want
Mi primera comprobación sería asegurarme de que ejecutas lo mismo. Haga estos dos en la línea de comando para asegurarse de alias o rutas no molestar nada.
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh
En mi caso, esto se debe a la variable $ HOME que no se establece cuando se llama a rpmbuild.
La variable se usa para buscar el archivo '/ rpmmacros'. Sugiero usar el comando 'printenv' para verificar.