符号链接创建到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

上一篇: symbolic link creation into RPM spec file

下一篇: Dead code detection in ruby