CentOS 5.5 - 在 RPM 规范文件中创建符号链接
Posted
技术标签:
【中文标题】CentOS 5.5 - 在 RPM 规范文件中创建符号链接【英文标题】:CentOS 5.5 - symbolic link creation into RPM spec file 【发布时间】:2011-06-16 23:06:09 【问题描述】:我需要在 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
我的 PC 上存在 /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 安装的一部分,我需要做什么才能创建符号链接?
谢谢
【问题讨论】:
【参考方案1】:最好的方法是防止您创建的符号链接被自动依赖和需要生成器扫描:
%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的信息。
【讨论】:
【参考方案2】: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 的规范文件。由于 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】:作为解决方法,我通过添加禁用自动依赖处理:
AutoReqProv: no
到我的规范文件。 我仍在寻找真正的解决方案。
【讨论】:
【参考方案4】:您需要在规范文件的 %post 部分运行 ldconfig:
%post
umask 007
/sbin/ldconfig > /dev/null 2>&1
%postun
umask 007
/sbin/ldconfig > /dev/null 2>&1
应该这样做。
【讨论】:
听起来像 /lib/libcrypto.so.0.9.8e 和 /lib/libssl.so.0.9.8e 不在 %files 列表中。此外,您对“ln”的调用也不会像“/bin/ln -sf /lib/libcrypto.so.0.9.8e /lib/libcrypto.so.0.9.8”那样引用它们。 /lib/libcrypto.so.0.9.8e 和 /lib/libssl.so.0.9.8e 是 openssl RPM 的一部分。 但是我的 RPM 正在安装的另一个二进制文件需要 /lib/libssl.so.0.9.8 和 /lib/libssl.so.0.9.8 而不是 /lib/libcrypto.so.0.9.8e和 /lib/libssl.so.0.9.8e以上是关于CentOS 5.5 - 在 RPM 规范文件中创建符号链接的主要内容,如果未能解决你的问题,请参考以下文章