Tạo liên kết tượng trưng trong / usr / bin khi tạo RPM


13

Tôi đang tạo RPM cho một ứng dụng chưa có. Tôi đã có nó xây dựng và cài đặt tốt trong /optthư mục bằng cách sử dụng $RPM_BUILD_ROOT, nhưng tôi cũng muốn tạo một vài liên kết tượng trưng /usr/binđể ứng dụng có sẵn trên đường dẫn. Tất cả những nỗ lực của tôi để làm điều này đã dẫn đến lỗi "bị từ chối cấp phép" vì tôi đang chạy rpmbuildvới tư cách là người dùng không phải root và không được phép tạo tệp trong đó /usr/bin/.

Đây là tệp .spec hiện tại của tôi:

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

Câu trả lời:


6

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

Liên kết cần phải được tạo trong %buildphần và nó cũng cần trỏ đến nơi bạn đang cài đặt RPM.

Trước khi tạo liên kết, đảm bảo rằng thư mục đích tồn tại, tức là ${RPM_BUILD_ROOT}/%{_bindir}. Bạn có thể sử dụng mkdirhoặc install -dcho việc này.


Tôi đã chỉnh sửa tệp .spec của mình theo những gì tôi nghĩ bạn đã đề xuất và tôi đang gặp lỗi sau: + ln -sf /opt/bupc2.8/bin/upcc / home / eddale / src / rpm / tmp / ber ở_upc-root / usr / bin ln: tạo liên kết tượng trưng /home/eddale/src/rpm/tmp/berkeley_upc-root/usr/bin' to /opt/bupc2.8/bin/upcc ': Không có tệp hoặc thư mục như vậy
Edward Dale

Tôi nghĩ rằng bạn cần phải tạo thư mục đích, tức là /home/.../usr/bin. Đây là cách tôi làm: github.com/ciupicri/rpmbuild/blob/master/SPECS/ ((dòng 36).
Cristian Ciupitu

Đó là vấn đề. Tôi đã cập nhật câu hỏi để chứa phiên bản làm việc cuối cùng. Cảm ơn!
Edward Dale

1

macro %{__ln_s} cũng tốt

ví dụ thêm cài đặt bài đăng liên kết tượng trưng:

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

ví dụ xóa gỡ cài đặt liên kết tượng trưng:

%postun
rm -f %{_bindir}/exec2

1
Trong quá trình nâng cấp vòng / phút, vòng / phút cũ sẽ thực hiện% postun và hủy tập tin đó. Vòng quay mới sẽ không có liên kết, mã của bạn rất tệ.
ljdelight
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.