7

我需要在 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 存在于我的 PC 上,但是当我尝试安装 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

4 回答 4

2

作为解决方法,我通过添加禁用自动依赖处理:

AutoReqProv: no

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

于 2011-02-01T16:28:35.357 回答
1

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

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


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

应该这样做。

于 2011-01-28T02:15:17.857 回答
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 的规范文件。由于 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 。

于 2013-01-05T10:47:32.893 回答
0

最好的方法是防止您创建的符号链接被自动依赖和需要生成器扫描:

%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

更多关于依赖/需要过滤的信息在这里

于 2014-07-28T20:43:00.167 回答