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

specファイルに再度回転してインストールします。今.... opensshは問題なくインストールされます!

今質問は…なぜ? openssh.specファイルにライブラリまたは前提条件は表示されません。

修正する

要件について説明していただきありがとうございます。属性がAutoReqProv「いいえ」に設定されていることがわかりました。 「はい」でなければなりません。これでうまくいきます(上記のProvide行を追加する必要はありません)。ありがとうございます!

関連情報