لماذا يتم ضبط topdir على قيمته الافتراضية عند استدعاء rpmbuild من tcl؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

لدي برنامج نصي tcl والذي rpmbuild 'exec'.عند القيام بذلك، يكون "topdir" الذي يستخدمه rpmbuild خاطئًا.لدي ملف .rpmmacros في الدليل الرئيسي الخاص بي وإذا اتصلت يدويًا بـ rpmbuild، فإنه يعمل بشكل جيد، على سبيل المثال."topdir" ليس هو الافتراضي.

أضفت أ [تنفيذ rpmbuild "--showrc" ] في البرنامج النصي TCL للتحقق من قيمة com.topdir ويقول -14:_topdir %{_usrsrc}/redhat' وهي القيمة الافتراضية.

هل يمكن لأحد أن يشرح لي سبب هذا الوضع وكيفية حله؟

أفضل ألا أضطر إلى تحديده باستخدام --define لأنه يتم بالفعل في ملف تعريفي ولا أريد أن أتطرق إليه (إذا لم يكن هناك خيار آخر، سأفعل ذلك).

هل كانت مفيدة؟

المحلول

هناك طريقتان لتغيير rpmbuild topdir الافتراضي:

  1. لكل مستخدم:من خلال تكوين RPM topdir في $HOME/.rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. لكل مشروع:عن طريق تكوين RPM topdir في ملف Makefile أو في سطر الأوامر

    rpmbuild --define '_topdir build' -ba package.spec
    

ملحوظة:في كلتا الحالتين، ستحتاج إلى التأكد من أن دليل topdir الخاص بك يحتوي على الدلائل المناسبة (BUILD وSRPM وRPM وSPECS وSOURCES)

نصائح أخرى

في RHEL6 يفعل:

  rpm --showrc|grep topdir
  rpm --showrc|grep srcrpmdir

لنرى ما هي المسارات المستخدمة!

قم بإجراء هذا التغيير (لم يتم تعيين topdir الخاص بي على /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 سوف إكسيك في الدليل الحالي بشكل افتراضي. يمكنك تغيير الدليل الحالي باستخدام HTTP: // شبكة الاتصالات العالمية .tcl.tk / رجل / tcl8.4 / TclCmd / cd.htm مؤتمر نزع السلاح، على سبيل المثال:

cd ~username

إذا topdir هو متغير البيئة، قد تكون قادرا على تعيين <لأ href = "http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4" يختلط = "نوفولو noreferrer "> http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 مثل هذا:

set env(topdir) whatever/you/want

والأول الاختيار بلدي سيكون للتأكد من تنفيذ نفس الشيء. هل هذين على سطر الأوامر للتأكد من الأسماء المستعارة أو مسارات لا تخل بأي شيء.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh

في حالتي، وهذا يرجع إلى منزل $ متغير التي لم يتم تعيين عندما يتم استدعاء rpmbuild.
يستخدم المتغير للبحث في ملف "/ rpmmacros. أقترح استخدام الأمر "printenv" للتحقق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top