Pourquoi topdir at-il la valeur par défaut lorsque rpmbuild est appelé à partir de tcl?
Question
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 indiquer "-14: _topdir% {_ usrsrc} / redhat", qui est la 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 (si je n'ai pas d'autre choix, je le ferai).
La solution
Il existe deux façons de modifier le répertoire par défaut rpmbuild topdir:
-
Par utilisateur: en configurant le répertoire racine de RPM dans $ HOME / .rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
-
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)
.Autres conseils
Dans RHEL6 , procédez comme suit:
rpm --showrc|grep topdir
rpm --showrc|grep srcrpmdir
Pour voir quels sont les chemins utilisés!
Apporter 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
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 , 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
Mon premier contrôle serait de s’assurer que vous exécutez la même chose. Effectuez ces deux opérations sur la ligne de commande pour vous assurer que les alias ou les chemins ne dérangez rien.
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh
Dans mon cas, cela est dû à la variable $ HOME qui n'est pas définie lorsque rpmbuild est appelée.
La variable est utilisée pour rechercher le fichier '/ rpmmacros'. Je suggère d'utiliser la commande 'printenv' pour vérifier.