Программа может вести себя по-разному в зависимости от того, каким именем она была названа.
Примером является bash
, который перейдет в режим POSIX , если будет вызван как sh
:
$ bash -c 'set() { echo 1; }; set'
1
, а:
$ ARGV0=sh bash -c 'set() { echo 1; }; set'
sh: `set': is a special builtin
( zsh
используйте переменную ARGV0 для передачи argv [0]
)
RPM всегда разделены на проблемные области. Обычно их называют:
<pkg>.<arch>
<pkg>-devel.<arch>
<pkg>-libs.<arch>
Где <pkg>
будет openssl
, а <arch>
будет i686
или x86_64
. Существуют и другие архитектуры, но эти наиболее распространены на оборудовании AMD/Intel, поэтому в данном обсуждении мы остановимся только на них.
Фактические инструменты, составляющие openssl
программное обеспечение, включены в RPM openssl.x86_64
. Обратите внимание, как имя этого RPM соответствует шаблонам, которые я показал выше?
Библиотеки (.so )находятся в этом RPM, openssl-libs.x86_64
, а заголовочные файлы (.h )находятся в этом RPM, 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}
После установки вы можете проверить содержимое openssl-libs
RPM:
$ 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
Это общий вопрос, который я вижу постоянно. Большинство людей, которые плохо знакомы с дистрибутивами Redhat, такими как Fedora/CentOS/RHEL, не знают об инструменте командной строки 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, вы используете Amazon AMI, который является их собственным фирменным пакетом CentOS, поэтому названия немного отличаются, но процесс, который я показано, что вы должны быть идентичны, независимо от того.
Оказалось, что у меня была библиотека libssl в /usr/lib64, только с именем файла, отличным от ожидаемого 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
и теперь это работает!