符号链接创建到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安装的一部分?
谢谢
解决方法是禁用自动依赖性处理,方法是添加:
AutoReqProv: no
到我的规格文件。 我仍在寻找真正的解决方案。
您需要在spec文件的%post部分中运行ldconfig:
%post
umask 007
/sbin/ldconfig > /dev/null 2>&1
%postun
umask 007
/sbin/ldconfig > /dev/null 2>&1
应该这样做。
1)仅用于符号链接,你不需要在后期调用ldconfig。
2)正如ldav1s已经提到的那样:确保你的文件在%files部分列出。
3)再一次:确保你的文件被列出 - 特别是如果你使用类似的东西
%define _unpackaged_files_terminate_build 0
如果在buildroot中找到未在%files部分中列出的文件,则RHEL rpmbuild将终止并显示错误。 有了这个定义,你可以关闭行为/错误,但你应该完全知道你在做什么。 如果你使用这一行,你应该从你的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
在RPM文档中描述了使用buildroot。
链接地址: http://www.djcxy.com/p/50257.html