আরপিএম তৈরি করার সময় / usr / বিনে সিমলিংক তৈরি করা হচ্ছে


13

আমি এমন একটি অ্যাপ্লিকেশনের জন্য একটি আরপিএম তৈরি করছি যার ইতিমধ্যে একটি নেই। আমি এটি /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 ইনস্টল করছেন তাও নির্দেশ করতে হবে ।

লিঙ্কটি তৈরি করার আগে নিশ্চিত করে নিন যে গন্তব্য ডিরেক্টরিটি বিদ্যমান ${RPM_BUILD_ROOT}/%{_bindir}। আপনি ব্যবহার করতে পারেন mkdirবা install -dএই জন্য।


আপনি আমার পরামর্শ অনুসারে আমার .spec ফাইলটি সম্পাদনা করেছি এবং আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: + ln -sf /opt/bupc2.8/bin/upcc / home / eddale / src / rpm / tmp / berkeley_upc- মূল / usr / বিন 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
কোনও আরপিএম-ইউ আপগ্রেড করার সময়, পুরানো আরপিএম% পোস্টুন চালায় এবং ফাইলটি নষ্ট করে দেবে। নতুন আরপিএমের কোনও লিঙ্ক থাকবে না, আপনার কোডটি খারাপ।
— ljdelight
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.