Centos

RPM 說共享對象失去,但我可以用 ls 找到它

  • January 21, 2015

我今天手動安裝了一個 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

現在一切都應該到位,我應該想?我錯過了什麼?

啊哈!

我補充說:

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

到規範文件,重新旋轉並安裝。現在…. openssh 安裝毫無疑問!

現在的問題是……為什麼?我在 openssh.spec 文件中看不到庫或先決條件。

更新

感謝 Mark 將我置於所需位… 發現我將AutoReqProv屬性設置為 No… 應該是。現在可以正常工作(不必添加上面的提供行),謝謝!

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}

引用自:https://unix.stackexchange.com/questions/180160