2011-01-28 50 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