Criando um link para uma biblioteca compartilhada

0

Eu tenho uma biblioteca (ZendDebugger.so) que, por sua vez, requer a biblioteca openssl, mas não encontra uma referência a ela.

Na verdade, quando o ZendDebugger.so carrega, ele imprime esse erro no log de erros (que é o arquivo error_log do Apache no meu caso):

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

Então eu tentei instalar o 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

Parece que já existe um openssl personalizado instalado, neste caso, uma versão da Amazon. Então eu posso querer fazer algo como:

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

Dessa forma eu criaria uma biblioteca compartilhada que é automaticamente vista pelo ZendDebugger.so, já que seria criada em / usr / lib64, que é um dos diretórios padrão onde os executáveis vão procurar por suas bibliotecas.

Mas antes disso, eu preciso saber o caminho para o arquivo 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

O que estou perdendo? Como posso encontrar o caminho para o Amazon openssl? Ou você tem alguma outra solução? Obrigado

    
por Pixel 13.07.2018 / 18:55

2 respostas

0

Os RPMs são sempre divididos em áreas de interesse. Eles normalmente são nomeados:

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

Em que <pkg> seria openssl e <arch> i686 ou x86_64 . Existem outras arquiteturas, mas estas são as mais comuns em hardware AMD / Intel, então vamos nos ater apenas àquelas para esta discussão.

As ferramentas reais que compõem o software openssl estão incluídas no RPM openssl.x86_64 . Observe como o nome deste RPM está de acordo com os padrões que mostrei acima?

As bibliotecas (.so) estão neste RPM, openssl-libs.x86_64 enquanto os arquivos de cabeçalho (.h) estão neste RPM, openssl-devel.x86_64 .

Portanto, seu problema é que você não instalou realmente a biblioteca ou os arquivos de cabeçalho para que seu pacote possa compilar e vincular-se ao pacote openssl .

Tente isto:

$ 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

Agora, instale-os:

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

Uma vez instalado, você pode confirmar o conteúdo do 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

E se eu não souber o que o RPM deve instalar?

Essa é uma pergunta comum que eu vejo o tempo todo. A maioria das pessoas que são novas nas distribuições do Redhat, como Fedora / CentOS / RHEL, desconhecem a ferramenta de linha de comando repoquery . Com esta ferramenta você pode consultar repositórios YUM remotos e procurar quais pacotes fornecem um determinado arquivo.

Então, no seu cenário:

$ 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

Podemos ver que o arquivo libssl.so* está incluído em todos os RPMs acima. Então, com base no seu RPM existente, você provavelmente quer estes 2:

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

OBSERVAÇÃO: Lembre-se de que estou mostrando pacotes do CentOS 7.x, você está usando o AMI da Amazon, que é seu próprio pacote de marca do CentOS, então os nomes são um pouco diferentes, mas o processo que mostrei deve ser idêntico, independentemente disso.

    
por 14.07.2018 / 05:39
0

Acontece que eu tinha a biblioteca libssl em / usr / lib64, apenas com um nome de arquivo diferente daquele que o ZendDebugger espera (libssl.so.1.0.0). Então, acabei de criar um link para ele com o nome de arquivo correto:

[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

e agora funciona!

    
por 15.07.2018 / 01:48