Pourquoi topdir est-il défini sur sa valeur par défaut lorsque rpmbuild est appelé à partir de tcl?
J'ai un script tcl qui 'exec' rpmbuild. Ce faisant, le 'topdir' utilisé par rpmbuild est incorrect. 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 dit: "-14: _topdir %{_usrsrc}/redhat" qui est la valeur par défaut.
Quelqu'un Peut-il m'expliquer pourquoi cette situation et comment le résoudre ?
Je préférerais ne pas avoir à le spécifier avec --define car il est réellement fait dans un makefile et je ne veux pas le toucher (si aucun autre choix, je le ferai).
5 réponses
Il y a deux façons de changer le topdir rpmbuild par défaut:
-
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 devez vous assurer que votre répertoire topdir possède les répertoires appropriés (BUILD, SRPM, RPM, SPECS et SOURCES)
Dans RHEL6 faire:
rpm --showrc|grep topdir
rpm --showrc|grep srcrpmdir
Pour voir quels sont les chemins utilisés !
Effectuez ce changement (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 exécutera dans le répertoire courant par défaut. Vous pouvez modifier le répertoire courant à 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 pouvez la définir http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 comme ceci:
set env(topdir) whatever/you/want
Ma première vérification serait de m'assurer que vous exécutez la même chose. Ces deux sur la ligne de commande pour s'assurer des alias ou des chemins ne pas déranger quoi que ce soit.
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é.
La variable est utilisée pour rechercher le/rpmmacros fichier. Je suggère d'utiliser la commande 'printenv' pour vérifier.