لماذا يتم ضبط topdir على قيمته الافتراضية عند استدعاء rpmbuild من tcl؟
سؤال
لدي برنامج نصي tcl والذي rpmbuild 'exec'.عند القيام بذلك، يكون "topdir" الذي يستخدمه rpmbuild خاطئًا.لدي ملف .rpmmacros في الدليل الرئيسي الخاص بي وإذا اتصلت يدويًا بـ rpmbuild، فإنه يعمل بشكل جيد، على سبيل المثال."topdir" ليس هو الافتراضي.
أضفت أ [تنفيذ rpmbuild "--showrc" ] في البرنامج النصي TCL للتحقق من قيمة com.topdir ويقول -14:_topdir %{_usrsrc}/redhat' وهي القيمة الافتراضية.
هل يمكن لأحد أن يشرح لي سبب هذا الوضع وكيفية حله؟
أفضل ألا أضطر إلى تحديده باستخدام --define لأنه يتم بالفعل في ملف تعريفي ولا أريد أن أتطرق إليه (إذا لم يكن هناك خيار آخر، سأفعل ذلك).
المحلول
هناك طريقتان لتغيير rpmbuild topdir الافتراضي:
لكل مستخدم:من خلال تكوين RPM topdir في $HOME/.rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
لكل مشروع:عن طريق تكوين 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" للتحقق.