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).
Il y a deux façons de changer le répertoire par défaut rpmbuild topdir:
Par utilisateur: en configurant le RPM topdir 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).
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
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
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
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.