今天安装 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 行),谢谢!