Warum ist topdir auf den Standardwert gesetzt, wenn von tcl genannt rpmbuild?

StackOverflow https://stackoverflow.com/questions/416983

  •  03-07-2019
  •  | 
  •  

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).

War es hilfreich?

Lösung

Es gibt zwei Möglichkeiten, um das Standard-rpmbuild topdir zu ändern:

  1. Per-User: das RPM topdir in $ HOME / .rpmmacros Durch die Konfiguration

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. 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)

hat

Andere 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top