RPM बनाते समय / usr / bin में सिमलिंक बनाना


13

मैं एक ऐसे एप्लिकेशन के लिए RPM बना रहा हूं जिसमें पहले से एक नहीं है। मैंने इसे निर्माण और /optनिर्देशिका में ठीक स्थापित करने का उपयोग कर लिया है $RPM_BUILD_ROOT, लेकिन मैं एक युगल सिम्बलिंक भी बनाना चाहूंगा, /usr/binताकि आवेदन पथ पर उपलब्ध हो। ऐसा करने के मेरे सभी प्रयासों ने "अनुमति से इनकार" त्रुटियों को उत्पन्न किया है क्योंकि मैं rpmbuildएक गैर-रूट उपयोगकर्ता के रूप में चल रहा हूं और इसमें फ़ाइलों को बनाने की अनुमति नहीं है /usr/bin/

यहाँ मेरी वर्तमान .spec फ़ाइल है:

Summary: Berkeley UPC
Name: berkeley_upc
Version: 2.8.0
Release: 1
Source0: %{name}-%{version}.tar.gz
License: GPL
Group: Development/Tools
BuildRoot: %{_builddir}/%{name}-root
Prefix: /opt/bupc2.8
Prefix: /usr

%description
Berkeley UPC on the BASS for the comp633 class.

%prep
%setup -q

%build
./configure CC=gcc44 CXX=g++44 --disable-aligned-segments --prefix=/opt/bupc2.8
make %{_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

mkdir -p ${RPM_BUILD_ROOT}%{_bindir}
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1

ln -sf /opt/bupc2.8/bin/upcc          ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcc_multi    ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcc_multi.pl ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcdecl       ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcrun        ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upc_trace     ${RPM_BUILD_ROOT}%{_bindir}

ln -sf /opt/bupc2.8/man/man1/upcc.1      ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upcdecl.1   ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upcrun.1    ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upc_trace.1 ${RPM_BUILD_ROOT}%{_mandir}/man1

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/opt/bupc2.8
%config /opt/bupc2.8/etc
%config /opt/bupc2.8/opt/etc

%{_bindir}/upcc
%{_bindir}/upcc_multi
%{_bindir}/upcc_multi.pl
%{_bindir}/upcdecl
%{_bindir}/upcrun
%{_bindir}/upc_trace

%{_mandir}/man1/upcc.1.gz
%{_mandir}/man1/upcdecl.1.gz
%{_mandir}/man1/upcrun.1.gz
%{_mandir}/man1/upc_trace.1.gz

जवाबों:


6

ln -sf /opt/bupc2.8/bin/upcc ${RPM_BUILD_ROOT}/%{_bindir}

लिंक को %buildअनुभाग में बनाने की आवश्यकता है और यह भी इंगित करना होगा कि आप आरपीएम कहां स्थापित कर रहे हैं ।

लिंक बनाने से पहले यह सुनिश्चित कर लें कि गंतव्य निर्देशिका मौजूद है, यानी ${RPM_BUILD_ROOT}/%{_bindir}। आप इसके लिए उपयोग कर सकते हैं mkdirया कर सकते हैं install -d


मैंने अपनी .spec फ़ाइल को मेरे द्वारा सुझाई गई जानकारी के अनुसार संपादित किया और मुझे निम्नलिखित त्रुटि मिल रही है: + ln -sf /opt/bupc2.8/bin/upcc / home / eddale / src / rpm / tmp / berpley_upc-root / usr / bin ln: प्रतीकात्मक लिंक /home/eddale/src/rpm/tmp/berkeley_upc-root/usr/bin' to बनाना /opt /bupc2.8/bin/upcc ': ऐसी कोई फ़ाइल या निर्देशिका नहीं
एडवर्ड डेल

मुझे लगता है कि आपको गंतव्य निर्देशिका बनाने की आवश्यकता है, अर्थात /home/.../usr/bin। यहां बताया गया है कि मैं यह कैसे करता हूं: github.com/ciupicri/rpmbuild/blob/master/SPECS/… (पंक्ति 36)।
बजे क्रिस्टियन सियुपिटु

यही समस्या थी। मैंने अंतिम कार्यशील संस्करण को शामिल करने के लिए प्रश्न को अपडेट किया है। धन्यवाद!
एडवर्ड डेल

1

macro %{__ln_s} अच्छा भी है

उदाहरण जोड़ने प्रतीकात्मक लिंक पोस्ट स्थापित:

%post
%{__ln_s} -f %{_bindir}/exec %{_bindir}/exec2

उदाहरण निकालें प्रतीकात्मक लिंक की स्थापना रद्द करें:

%postun
rm -f %{_bindir}/exec2

1
एक rpm -U अपग्रेड के दौरान, पुराना rpm% postun निष्पादित करेगा और उस फ़ाइल को नष्ट कर देगा। नए आरपीएम में लिंक नहीं होगा, आपका कोड खराब है।
ljdelight
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.