Warum ist topdir auf den Standardwert gesetzt, wenn von tcl genannt rpmbuild?
Frage
Ich habe einen tcl-Skript, das 'exec' rpmbuild. Dabei die ‚topdir‘ von rpmbuild verwendet wird, ist falsch. Ich habe eine .rpmmacros Datei in meinem Home-Verzeichnis und wenn ich manuell rpmbuild nennen, es funktioniert gut, das heißt. die ‚topdir‘ ist nicht der Standard ein.
Ich habe einen [exec rpmbuild "--showrc"] in dem tcl-Skript den Wert von topdir zu überprüfen, und es sagt, ‚-14: _topdir% {_ usrsrc } / redhat‘, die der Standardwert ist.
Kann mir jemand erklären, warum diese Situation ist und wie es zu lösen?
würde ich es vorziehen, nicht zu haben, es mit --define angeben, weil es tatsächlich in einer Make-Datei fertig ist und ich will nicht, es berühren (wenn keine andere Wahl, ich werde es tun).
Lösung
Es gibt zwei Möglichkeiten, um das Standard-rpmbuild topdir zu ändern:
-
Per-User: das RPM topdir in $ HOME / .rpmmacros Durch die Konfiguration
%_topdir %{getenv:HOME}/rpmbuild
-
Per-Projekt: das RPM topdir im Makefile oder auf der Kommandozeile Durch die Konfiguration
rpmbuild --define '_topdir build' -ba package.spec
Hinweis: In beiden Fällen müssen Sie sicherstellen, dass Ihr topdir Verzeichnis die entsprechenden Verzeichnisse (BUILD, SRPM, RPM, Specs und Quellen)
hatAndere Tipps
RHEL6 zu tun:
rpm --showrc|grep topdir
rpm --showrc|grep srcrpmdir
Um zu sehen, was die Pfade verwendet werden!
Nehmen Sie diese Änderung (mein topdir wurde nicht auf /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 wird im aktuellen Verzeichnis standardmäßig exec. Sie können das aktuelle Verzeichnis ändern, indem Sie den Befehl TCL http: // www .tcl.tk / Mann / tcl8.4 / TclCmd / cd.htm cd, zum Beispiel:
cd ~username
Wenn topdir eine Umgebungsvariable ist, können Sie in der Lage sein, es zu setzen http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 wie folgt aus:
set env(topdir) whatever/you/want
Meine erste Prüfung wäre sicherstellen, dass Sie die gleiche Sache ausführen. Haben diese beiden auf der Kommandozeile sicher, Aliase oder Pfade zu machen nichts stören.
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh
In meinem Fall ist dies auf die Variable $ HOME, die nicht gesetzt ist, wenn rpmbuild genannt wird.
Die Variable verwendet wird, um die ‚/ rpmmacros‘ Datei zu suchen. Ich schlage vor, den Befehl ‚printenv‘ zu verwenden, um zu überprüfen.