2011-01-28 76 views
6

我需要創建以下符號鏈接到RPM文件的CentOS 5.5 - 符號鏈接創建到RPM spec文件

/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 

在我的RPM spec文件:

%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 

到/ lib/libcrypto。 so.0.9.8e和​​/lib/libssl.so.0.9.8e都存在我的電腦上,但是當我試圖安裝我的RPM,我得到了一個錯誤:

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?我需要做什麼才能創建符號鏈接作爲RPM安裝的一部分?

感謝

回答

2

通過添加解決辦法我禁用了自動依存性處理:

AutoReqProv: no 

到我的規格文件。 我仍在尋找真正的解決方案。

1

您需要在規範文件的%post部分運行ldconfig:

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


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

應該這樣做。

+0

我試過了,問題仍然存在...... – Dima 2011-01-28 12:11:46

1

1)僅用於符號鏈接,您不需要在後期調用ldconfig。

2)正如ldav1s已經提到的:確保您的文件在%files部分列出。

3)再次:請確保您的文件中列出 - 尤其,如果你使用類似

%define _unpackaged_files_terminate_build 0 

RHEL的rpmbuild與未在%上市,如果文件中的buildroot發現錯誤終止文件部分。有了這個定義,你可以關閉行爲/錯誤,但你應該完全知道你在做什麼。如果你使用這一行,你應該從你的spec文件中刪除它。

4)不要以root用戶身份構建rpm包。如果您忘記使用rpm_build_root,則不會破壞您的實時系統。您的示例看起來像是從1997年的Red Hat 4.2的規範文件中獲取的。自1997年Red Hat 5(不是RHEL 5!)以來,rpm/rpmbuild命令知道RPM_BUILD_ROOT定義。我想這是你的問題:你不使用buildroot,而是直接安裝到根FS並以root用戶身份運行rpmbuild。

鑑於你的榜樣,應該改爲:

%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 

使用的buildroot在RPM docs描述。

0

做到這一點,最好的辦法是通過阻止您通過自動掃描創建符號鏈接取決於&需要發電機:上

%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 

更多信息取決於/需要過濾here