Centos
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
現在一切都應該到位,我應該想?我錯過了什麼?
啊哈!
我補充說:
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}