CentOS 5.5 - 创建RPM规范文件的符号链接

时间:2011-01-28 01:02:28

标签: linux centos rpm centos5 rpm-spec

我需要在RPM文件中创建以下符号链接

/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规范文件中:

%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

有什么不对?作为RPM安装的一部分,我需要做些什么才能创建符号链接?

由于

4 个答案:

答案 0 :(得分:2)

作为解决方法,我通过添加:

来禁用自动依赖关系处理
AutoReqProv: no

到我的spec文件。 我仍然在寻找真正的解决方案。

答案 1 :(得分:1)

您需要在spec文件的%post部分运行ldconfig:

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


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

应该这样做。

答案 2 :(得分:1)

1)对于符号链接,您不需要在后期调用ldconfig。

2)正如ldav1s已经提到的:确保你的文件列在%files部分。

3)再次:确保列出您的文件 - ,尤其是,如果您使用类似

的内容
%define _unpackaged_files_terminate_build 0

如果在buildroot中找到未在%files部分中列出的文件,RHEL rpmbuild将终止并显示错误。使用此定义,您可以关闭行为/错误,但您应该确切地知道您实际在做什么。如果您使用此行,则应将其从规范文件中删除。

4)不要以root用户身份构建rpm包。如果您忘记使用rpm_build_root,则不会破坏您的实时系统。您的示例看起来像是从1997年Red Hat 4.2的spec文件中获取的。自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

RPM docs中描述了使用buildroot。

答案 3 :(得分:0)

执行此操作的最佳方法是阻止您创建的符号链接被自动依赖&amp;需要发电机:

%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