¿Por qué se establece topdir en su valor predeterminado cuando se llama a rpmbuild desde tcl?

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

  •  03-07-2019
  •  | 
  •  

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é).

¿Fue útil?

Solución

Hay dos formas de cambiar el rdmbuild topdir predeterminado:

  1. Por usuario: configurando el topdir RPM en $ HOME / .rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top