我需要在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安装的一部分,我需要做些什么才能创建符号链接?
由于
答案 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。