RPM 说共享对象丢失,但我可以用 ls 找到它

RPM 说共享对象丢失,但我可以用 ls 找到它

今天安装 openssh rpm 时遇到问题:

[root@local_host ]# rpm -i openssh-6.7p1-1.i386.rpm
error: Failed dependencies:
        libcrypto.so.1.0.0 is needed by openssh-6.7p1-1.i386

啊?真奇怪:

[root@local_host ]# ls -l /lib/libcrypto*
lrwxrwxrwx 1 root root      19 Jan 20 15:18 /lib/libcrypto.so.1.0.0 -> libcrypto.so.1.0.1l
-rwxr-xr-x 1 root root 1815536 Jan 19 04:57 /lib/libcrypto.so.1.0.1l

rpm 的依赖项似乎列出了我安装的相同文件:

[root@local_host ]# rpm -qpR openssh-6.7p1-1.i386.rpm
config(openssh) = 6.7p1-1
...
libcrypto.so.1.0.0

我可以强制安装并且它可以工作 - 当然,因为安装了所需的库 - 但是,什么会导致这一切变得不稳定?

我确实在新的 openssl (也是手动滚动的)安装后运行了 ldconfig,因此这些库应该对系统可见。

盒子是CentOS 5.4。

附加信息

根据 @nlu,我检查了哪个包拥有相关文件。 ssh rpm 想要的文件实际上是实际文件的符号链接。

[root@local_host ~]# rpm -qf /lib/libcrypto.so.1.0.0
file /lib/libcrypto.so.1.0.0 is not owned by any package

[root@local_host ~]# rpm -qf /lib/libcrypto.so.1.0.1l
openssl-1.0.1l-1

但它没有出现在 rpm 中:

[root@local_host ~]# rpm -ql openssl-1.0.1l-1
...
/lib/libcrypto.so.1.0.1l
...

所以,我又做了一些工作。弄清楚如何在 rpm 中打包符号链接,还修复了名称以反映 openssl 的标准安装并重新旋转 rpm。安装没问题。然后,去安装 openssh 并收到完全相同的错误!

在盒子上,我现在有:

[root@local_host ]# ls -l /lib/libcrypto*
lrwxrwxrwx 1 root root 27 Jan 21 14:16 /lib/libcrypto.so.1.0.0 -> /usr/lib/libcrypto.so.1.0.0
lrwxrwxrwx 1 root root 27 Jan 21 14:16 /lib/libcrypto.so.6 -> /usr/lib/libcrypto.so.1.0.0

[root@local_host ]# ls -l /usr/lib/libcrypto*
lrwxrwxrwx 1 root root      27 Jan 21 14:16 /usr/lib/libcrypto.so -> /usr/lib/libcrypto.so.1.0.0
-rwxr-xr-x 1 root root 1815536 Jan 21 05:43 /usr/lib/libcrypto.so.1.0.0

[root@local_host ]# rpm -ql openssl-1.0.1l
...
/lib/libcrypto.so.1.0.0
/lib/libcrypto.so.6
/usr/lib/libcrypto.so
/usr/lib/libcrypto.so.1.0.0

我想,现在一切都应该就位了?我错过了什么?

答案1

RPM 数据库的内容和文件系统的内容是独立的。

要证明 libcrypto 是从 RPM 安装的,您应该检查文件是否属于 rpm:

rpm -qf /lib/libcrypto.so.1.0.0
rpm -qf /lib/libcrypto.so.1.0.1l

另外你可以做

rpm -ql {RPM of libcrypto}

答案2

啊哈!

我补充道:

Provides: libcrypto.so.1.0.0 libssl.so.1.0.0

到规范文件,重新旋转并安装。现在.... openssh 毫无问题地安装!

现在的问题是......为什么?我在 openssh.spec 文件中没有看到库或先决条件。

更新

感谢马克让我进入要求位...发现我将属性AutoReqProv设置为“否”...应该是“是”。现在可以正常工作(不必添加上面的 Provides 行),谢谢!

相关内容