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


Tengo un script tcl que 'exec' rpmbuild. Al hacerlo, el' topdir ' utilizado por rpmbuild es incorrecto. Tengo una .archivo rpmmacros en mi directorio personal y si llamo manualmente rpmbuild, funciona bien, es decir. el 'topdir' no es el predeterminado.

He añadido un [exec rpmbuild "--showrc" ] en el script tcl para comprobar 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 resolverlo ?

Preferiría no tener que especificarlo con define define porque en realidad se hace en un makefile y no quiero tocarlo (si no hay otra opción, lo haré).

 23
Author: serenesat, 2009-01-06

5 answers

Hay dos formas de cambiar el topdir predeterminado de rpmbuild:

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

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Por proyecto: Configurando el topdir RPM en el Makefile o en la línea de comandos

    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)

 82
Author: Zach Garner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-14 10:08:20

In RHEL6 do:

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

Para ver cuáles son los caminos que se utilizan !

Hacer este cambio (mi topdir NO estaba establecido 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
 10
Author: ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-03 04:41:31

TCL se ejecutará en el directorio actual por defecto. Puede cambiar el directorio actual utilizando 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, es posible que pueda configurarla http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 así:

set env(topdir) whatever/you/want
 1
Author: Joseph Bui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-06 18:09:44

Mi primera comprobación sería para asegurarse de que ejecuta la misma cosa. Haga estos dos en la línea de comandos para asegurarse de que los alias o las rutas no molestes nada.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
 1
Author: Hugge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-16 21:02:15

En mi caso, esto se debe a la variable HOME HOME que no se establece cuando se llama a rpmbuild.
La variable se utiliza para buscar en el archivo '/rpmmacros'. Sugiero usar el comando 'printenv' para verificar.

 0
Author: l-sebastien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 07:01:44