2011-01-28 22 views
6

tôi cần phải tạo ra các liên kết tượng trưng sau vào tập tin RPMCentOS 5.5 - biểu tượng tạo liên kết vào RPM đặc tả tập tin

/bin/ln -sf libcrypto.so.0.9.8e /lib/libcrypto.so.0.9.8 
/bin/ln -sf libssl.so.0.9.8e /lib/libssl.so.0.9.8 

Trong file spec RPM của tôi:

%files 
%defattr(-,root,root) 
/lib/libcrypto.so.0.9.8 
/lib/libssl.so.0.9.8 
<other files...> 

%install 
/bin/ln -sf libcrypto.so.0.9.8e /lib/libcrypto.so.0.9.8 
/bin/ln -sf libssl.so.0.9.8e /lib/libssl.so.0.9.8 

Các/lib/libcrypto. so.0.9.8e và /lib/libssl.so.0.9.8e tồn tại trên PC của tôi, nhưng khi tôi đang cố gắng cài đặt RPM của mình, tôi gặp lỗi:

libcrypto.so.0.9.8 is needed by my-test-rpm-1.el5.i686 
libssl.so.0.9.8 is needed by my-test-rpm-1.el5.i686 

Wron gì g? Những gì tôi cần làm để tạo liên kết tượng trưng như là một phần của việc cài đặt RPM?

Cảm ơn

Trả lời

2

Như workaround tôi vô hiệu hóa chế biến phụ thuộc tự động bằng cách thêm:

AutoReqProv: no 

đến file spec của tôi. Tôi vẫn đang tìm giải pháp thực sự.

1

Bạn cần phải chạy ldconfig trong thư mục% bài một phần của file spec:

%post 
umask 007 
/sbin/ldconfig > /dev/null 2>&1 


%postun 
umask 007 
/sbin/ldconfig > /dev/null 2>&1 

nên làm điều đó.

+0

Tôi đã thử, sự cố vẫn là ... – Dima

+0

Âm thanh như /lib/libcrypto.so.0.9.8e và /lib/libssl.so.0.9.8e không nằm trong danh sách% tệp. Ngoài ra, lời gọi của bạn về 'ln' không tham chiếu đến chúng như là '/ bin/ln -sf /lib/libcrypto.so.0.9.8e /lib/libcrypto.so.0.9.8'. – ldav1s

+0

/lib/libcrypto.so.0.9.8e và /lib/libssl.so.0.9.8e là một phần của RPM mở. – Dima

1

1) Chỉ dành cho các liên kết tượng trưng bạn không cần phải gọi ldconfig ở giai đoạn hậu.

2) Như đã đề cập bởi ldav1s: Đảm bảo rằng tệp của bạn được liệt kê trong phần% tệp.

3) Một lần nữa: Hãy chắc chắn rằng các file của bạn được liệt kê - đặc biệt nếu bạn sử dụng một cái gì đó giống như

%define _unpackaged_files_terminate_build 0 

RHEL rpmbuild chấm dứt với một lỗi nếu file được tìm thấy trong buildroot mà không được liệt kê trong% phần tệp. Với điều này xác định bạn có thể chuyển đổi hành vi/lỗi nhưng bạn nên biết chính xác những gì bạn đang thực sự làm. Nếu bạn sử dụng dòng này, bạn nên loại bỏ nó khỏi tập tin spec của bạn.

4) Không xây dựng gói rpm làm gốc của người dùng. Nếu bạn quên sử dụng rpm_build_root, bạn sẽ không phá hủy hệ thống trực tiếp của mình. Ví dụ của bạn trông giống như nó được lấy từ một tập tin đặc tả của Red Hat 4.2 năm 1997. Vì Red Hat 5 (không phải RHEL 5!) Vào năm 1997 lệnh rpm/rpmbuild biết định nghĩa RPM_BUILD_ROOT. Tôi đoán rằng đây là vấn đề của bạn: Bạn không sử dụng buildroot nhưng cài đặt trực tiếp vào FS gốc và chạy rpmbuild làm người dùng root.

Với ví dụ của bạn cần được thay đổi để:

%install 
/bin/ln -sf libcrypto.so.0.9.8e $RPM_BUILD_ROOT/lib/libcrypto.so.0.9.8 
/bin/ln -sf libssl.so.0.9.8e $RPM_BUILD_ROOT/lib/libssl.so.0.9.8 

Sử dụng buildroot được mô tả trong RPM docs.

0

Cách tốt nhất để làm điều này là bằng cách ngăn chặn các liên kết tượng trưng mà bạn đã tạo từ được quét bởi tự động phụ thuộc & đòi hỏi phát:

%filter_provides_in libcrypto.so.0.9.8e 
%filter_provides_in libssl.so.0.9.8e 
%filter_requires_in libcrypto.so.0.9.8e 
%filter_requires_in libssl.so.0.9.8e 
%filter_setup 

Thông tin thêm về phụ thuộc/đòi hỏi phải lọc here.

Các vấn đề liên quan