共有ライブラリへのリンクの作成

共有ライブラリへのリンクの作成

opensslライブラリを必要とするライブラリ(ZendDebugger.so)があり、それへの参照が見つかりません。

実際にZendDebugger.soがロードされると、エラーログ(私の場合はApache error_logファイル)に次のエラーが表示されます。

Failed loading /usr/lib64/php/7.1/modules/ZendDebugger.so:  
libssl.so.1.0.0: cannot open shared object file: 
No such file or directory

それからopensslをインストールしようとしています。

 sudo yum install openssl
 Loaded plugins: priorities, update-motd, upgrade-helper
 amzn-main       | 2.1 kB  00:00:00
 amzn-updates   | 2.3 kB  00:00:00
 Package 1:openssl-1.0.1k-15.99.amzn1.x86_64 already installed and latest version
 Nothing to do

カスタムopensslがインストールされているようです(この場合はAmazonバージョン)。だから、次のようなことをしたいかもしれません。

cd /usr/lib64 
ln /path/to/amazon/openssl/openssl-1.0.1k-15.99.amzn1.x86_64.so libssl.so

このようにして、ZendDebugger.soで自動的に表示される共有ライブラリを作成します。これは、実行可能ファイルがライブラリを検索するデフォルトのディレクトリの1つである/ usr / lib64に生成されるためです。

ただし、その前にopenssl-1.0.1k-15.99.amzn1.x86_64ファイルのパスを知っておく必要があります。

sudo find / openssl-1.0.1k-15.99.amzn1.x86_64
.... 
....
find: `openssl-1.0.1k-15.99.amzn1.x86_64': No such file or directory

私は何を見逃していますか? Amazon opensslのパスをどのように見つけますか?それとも別の解決策がありますか?ありがとう

答え1

RPMは常にさまざまな焦点領域に分割されています。通常、名前は次のとおりです。

<pkg>.<arch>
<pkg>-devel.<arch>
<pkg>-libs.<arch>

どこに<pkg>いるのかopensslそして<arch>ものなのi686x86_64。他のアーキテクチャもありますが、これはAMD / Intelハードウェアで一般的であるため、これについてのみ説明します。

ソフトウェアを構成する実際のツールはopensslRPMに含まれていますopenssl.x86_64。このRPMの名前が上記のパターンとどのように一致するかを確認してください。

このRPMにはライブラリ(.so)があり、openssl-libs.x86_64このRPMにはヘッダファイル(.h)がありますopenssl-devel.x86_64

したがって、問題は、パッケージがコンパイルおよびリンクできるようにライブラリまたはヘッダーファイルを実際にインストールしていないことですopenssl

この試み:

$ yum search openssl | grep ^openssl
openssl-devel.i686 : Files for development of applications which will use
openssl-devel.x86_64 : Files for development of applications which will use
openssl-perl.x86_64 : Perl scripts provided with OpenSSL
openssl-pkcs11.x86_64 : A PKCS#11 engine for use with OpenSSL
openssl-static.i686 : Libraries for static linking of applications which will
openssl-static.x86_64 : Libraries for static linking of applications which will
openssl.x86_64 : Utilities from the general purpose cryptography library with
openssl-libs.x86_64 : A general purpose cryptography library with TLS
openssl-libs.i686 : A general purpose cryptography library with TLS
openssl098e.i686 : A compatibility version of a general cryptography and TLS
openssl098e.x86_64 : A compatibility version of a general cryptography and TLS

今インストールしてください:

$ sudo yum install -y openssl-{devel,libs}

インストール後にRPMの内容を確認できますopenssl-libs

$ rpm -ql openssl-libs | grep libssl.so
/usr/lib64/.libssl.so.1.0.2k.hmac
/usr/lib64/.libssl.so.10.hmac
/usr/lib64/libssl.so.1.0.2k
/usr/lib64/libssl.so.10

どのRPMをインストールするのかわからない場合はどうすればよいですか?

これは私がいつも見る一般的な質問です。 Fedora / CentOS / RHELなどのRedhatディストリビューションを初めて使用するほとんどの人は、コマンドラインツールをrepoquery認識しません。このツールを使用すると、リモートYUMリポジトリを照会し、特定のファイルを提供するパッケージを見つけることができます。

したがって、あなたのシナリオでは、次のようになります。

$ repoquery -qf */libssl.so*
openssl-libs-1:1.0.2k-12.el7.x86_64
openssl-devel-1:1.0.2k-12.el7.x86_64
openssl098e-0:0.9.8e-29.el7.centos.3.i686
openssl-libs-1:1.0.2k-12.el7.i686
openssl-devel-1:1.0.2k-12.el7.i686

libssl.so*このファイルは上記のすべてのRPMに含まれていることがわかります。したがって、既存のRPMによっては、次の2つが必要になる場合があります。

openssl-libs-1:1.0.2k-12.el7.x86_64
openssl-devel-1:1.0.2k-12.el7.x86_64

メモ:私はCentOS 7.xパッケージを示していますが、あなたはCentOSパッケージの独自のブランドであるAmazonのAMIを使用しているので、名前が少し異なりますが、私が示したプロセスは何でも構いません。同じでなければなりません。

答え2

/usr/lib64にlibsslライブラリがあることがわかりました。これはZendDebuggerが期待したもの(libssl.so.1.0.0)とファイル名が異なるだけです。だから正しいファイル名でハードリンクを作成しました。

[ec2-user@ip-172-31-4-60 ~] cd /usr/lib64
[ec2-user@ip-172-31-4-60 lib64] ls -la libssl*
-rwxr-xr-x 1 root root 303520 Jun 22  2017 libssl3.so
lrwxrwxrwx 1 root root     16 Sep 20  2017 libssl.so -> libssl.so.1.0.1k
lrwxrwxrwx 1 root root     16 Aug 13  2017 libssl.so.10 -> libssl.so.1.0.1k
-rwxr-xr-x 2 root root 449616 Feb 28  2017 libssl.so.1.0.1k
[ec2-user@ip-172-31-4-60 lib64] sudo ln libssl.so.1.0.1k libssl.so.1.0.0

今大丈夫!

関連情報