web-dev-qa-db-fra.com

Pourquoi topdir at-il la valeur par défaut lorsque rpmbuild est appelé à partir de tcl?

J'ai un script tcl qui 'exec' rpmbuild. En faisant cela, le 'topdir' utilisé par rpmbuild est faux. J'ai un fichier .rpmmacros dans mon répertoire personnel et si j'appelle manuellement rpmbuild, cela fonctionne bien, c'est-à-dire. le 'topdir' n'est pas celui par défaut.

J'ai ajouté un [exec rpmbuild "--showrc"] dans le script tcl pour vérifier la valeur de topdir et il indique "-14: _topdir% {_ usrsrc}/redhat", valeur par défaut. .

Quelqu'un peut-il m'expliquer pourquoi cette situation se présente et comment la résoudre?

Je préférerais ne pas avoir à le spécifier avec --define car cela est fait dans un fichier makefile et je ne veux pas le toucher (s'il n'y a pas d'autre choix, je le ferai).

25
Barth

Il y a deux façons de changer le répertoire par défaut rpmbuild topdir:

  1. Par utilisateur: en configurant le RPM topdir dans $ HOME/.rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Par projet: en configurant le RPM topdir dans le Makefile ou sur la ligne de commande

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

Remarque: dans les deux cas, vous devrez vous assurer que votre répertoire topdir contient les répertoires appropriés (BUILD, SRPM, RPM, SPECS et SOURCES).

86
Zach Garner

Dans RHEL6 do:

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

Pour voir quels sont les chemins empruntés!

Effectuez cette modification (mon topdir n'était PAS défini sur /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
ahmad

TCL sera exécuté dans le répertoire en cours par défaut. Vous pouvez modifier le répertoire en cours à l'aide de la commande TCL http://www.tcl.tk/man/tcl8.4/TclCmd/cd.htm cd, par exemple:

cd ~username

Si topdir est une variable d'environnement, vous pourrez peut-être la définir http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 comme ceci:

set env(topdir) whatever/you/want
1
Joseph Bui

Mon premier contrôle serait de vous assurer que vous exécutez la même chose. Faites ces deux opérations sur la ligne de commande pour vous assurer que les alias ou les chemins ne perturbent rien.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
1
Hugge

Dans mon cas, cela est dû à la variable $ HOME qui n’est pas définie lors de l’appel de rpmbuild.
La variable est utilisée pour rechercher le fichier '/ rpmmacros'. Je suggère d'utiliser la commande 'printenv' pour vérifier.

0
l-sebastien