การสร้าง symlink ใน / usr / bin เมื่อสร้าง RPM


13

ฉันกำลังสร้าง RPM สำหรับแอปพลิเคชันที่ไม่มีอยู่แล้ว ฉันได้รับมันสร้างและติดตั้งได้ดีใน/optไดเรกทอรีโดยใช้$RPM_BUILD_ROOTแต่ฉันต้องการที่จะสร้างสองสาม symlinks ใน/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-root / usr / bin ln: การสร้างลิงก์สัญลักษณ์/home/eddale/src/rpm/tmp/berkeley_upc-root/usr/bin' to /opt/bupc2.8/bin/upcc ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
Edward Dale

/home/.../usr/binผมคิดว่าคุณจำเป็นต้องสร้างไดเรกทอรีปลายทางคือ นี่คือวิธีที่ฉันทำ: github.com/ciupicri/rpmbuild/blob/master/SPECS/… (บรรทัดที่ 36)
Cristian Ciupitu

นั่นคือปัญหา ฉันได้อัปเดตคำถามเพื่อให้มีรุ่นที่ใช้งานได้สุดท้าย ขอบคุณ!
Edward Dale

1

macro %{__ln_s} เป็นสิ่งที่ดี

ตัวอย่างเพิ่มการติดตั้งลิงค์สัญลักษณ์สัญลักษณ์:

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

ตัวอย่างลบการถอนการติดตั้งลิงก์สัญลักษณ์:

%postun
rm -f %{_bindir}/exec2

1
ในระหว่างการอัพเกรด rpm -U rpm เก่าจะรัน% postun และทำลายไฟล์นั้น รอบต่อนาทีใหม่จะไม่มีลิงค์รหัสของคุณไม่ดี
ljdelight
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.