공유 라이브러리에 대한 링크 만들기

공유 라이브러리에 대한 링크 만들기

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에서 자동으로 볼 수 있는 공유 라이브러리를 생성하겠습니다. 이는 실행 파일이 라이브러리를 찾는 기본 디렉터리 중 하나인 /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>것인가 i686또는 x86_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

이제 괜찮아!

관련 정보