3 votes

Installation Erlang et "/usr/local/ssl/lib/libcrypto.a : could not read symbols : Bad value"

J'essaie d'installer RabbitMQ (3.6.1) sur une machine linux Red Hat Enterprise Linux Server version 6.6. Pour installer RabbitMQ, j'ai d'abord installé la version R16B03 d'Erlang à partir des sources (otp_src_R16B03) et j'ai suivi les commandes suivantes

wget http://www.erlang.org/download/otp_src_R16B03.tar.gz
tar xvfz /usr/tmp/otp_src_R16B03.tar
cd otp_src_R16B03
LANG=C; export LANG
./configure --with-ssl=/usr/bin

Je reçois le message ci-dessous :

*********************************************************************
**********************  APPLICATIONS DISABLED  **********************
*********************************************************************

crypto         : OpenSSL is configured for kerberos but no krb5.h found
jinterface     : No Java compiler found
odbc           : ODBC library - link check failed
orber          : No C++ compiler found
ssh            : OpenSSL is configured for kerberos but no krb5.h found
ssl            : OpenSSL is configured for kerberos but no krb5.h found

*********************************************************************
*********************************************************************
**********************  APPLICATIONS INFORMATION  *******************
*********************************************************************

wx             : wxWidgets not found, wx will NOT be usable
*********************************************************************

J'ai pourtant continué avec make & make install mais en démarrant le serveur Rabbitmq j'obtiens l'erreur suivante

sbin/rabbitmq-server

Obtenir un message

BOOT FAILED
===========

Error description:
   {error,{missing_dependencies,[crypto,ssl],[mochiweb,cowlib,cowboy]}}

Log files (may contain more information):
   /usr/tmp/rabbitmq_server-3.6.1/var/log/rabbitmq/rabbit.log
   /usr/tmp/rabbitmq_server-3.6.1/var/log/rabbitmq/rabbit-sasl.log

Stack trace:
   [{rabbit_plugins,ensure_dependencies,1,
                    [{file,"src/rabbit_plugins.erl"},{line,179}]},
    {rabbit_plugins,prepare_plugins,1,
                    [{file,"src/rabbit_plugins.erl"},{line,198}]},
    {rabbit,broker_start,0,[{file,"src/rabbit.erl"},{line,284}]},
    {rabbit,start_it,1,[{file,"src/rabbit.erl"},{line,303}]},
    {init,start_it,1,[]},
    {init,start_em,1,[]}]

{"init terminating in do_boot",{error,{missing_dependencies,[crypto,ssl],[mochiweb,cowlib,cowboy]}}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

Après avoir exploré de multiples solutions, j'ai compris que je devais installer la dernière version d'openssl et fournir le chemin d'accès à openssl nouvellement installé.

J'ai installé Openssl à partir de la source et installé avec -fPIC

wget https://www.openssl.org/source/openssl-1.0.2.tar.gz
tar xvfz /usr/tmp/openssl-1.0.2.tar.gz
cd /usr/tmp/openssl-1.0.2
./config -fPIC
make 
make install 

Maintenant le nouvel openssl est installé dans l'emplacement bin/local/ssl et j'ai réinstallé l'Erlang avec la configuration suivante

export PATH="/usr/local/ssl/bin:$PATH”
export CFLAGS=-fPIC
cd /usr/tmp/otp_src_RB1603
LANG=C; export LANG
./configure --with-ssl=/usr/local/bin
make
make install

Je reçois maintenant l'erreur

/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(rsaz_exp.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad value**
collect2: ld returned 1 exit status
make[6]: *** [../priv/lib/x86_64-unknown-linux-gnu/crypto.so] Error 1
make[6]: Leaving directory `/var/tmp/otp_src_R16B03/lib/crypto/c_src'
make[5]: *** [release_spec] Error 2
make[5]: Leaving directory `/var/tmp/otp_src_R16B03/lib/crypto/c_src'
make[4]: *** [release] Error 2
make[4]: Leaving directory `/var/tmp/otp_src_R16B03/lib/crypto/c_src'
make[3]: *** [release] Error 2
make[3]: Leaving directory `/var/tmp/otp_src_R16B03/lib/crypto/c_src'
make[2]: *** [release] Error 2
make[2]: Leaving directory `/var/tmp/otp_src_R16B03/lib/crypto'
make[1]: *** [release] Error 2
make[1]: Leaving directory `/var/tmp/otp_src_R16B03/lib'
make: *** [install.libs] Error 2

Je n'ai pas pu résoudre cette erreur, une suggestion Veuillez noter que j'utilise la machine d'accès en tant qu'utilisateur racine.

0voto

jww Points 9514
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(rsaz_exp.o): relocation R_X86_64_32 against `.rodata'
can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad value**
collect2: ld returned 1 exit status

Vous devez compiler OpenSSL avec l'option shared option. Peut-être quelque chose comme ce qui suit pour une machine Intel 64 bits.

wget https://www.openssl.org/source/openssl-1.1.0b.tar.gz
tar xzf openssl-1.1.0b.tar.gz
cd openssl-1.1.0b

./Configure no-ssl2 no-ssl3 shared enable-ec_nistp_64_gcc_128
...
make -j 8
...
make test
...
suod make install

enable-ec_nistp_64_gcc_128 rend EC Diffie-Hellman 2x à 4x plus rapide, mais il a quelques limitations. Vous pouvez l'utiliser sur une machine Intel 64 bits. Voir aussi Compilation et installation | Configurer les options sur le wiki OpenSSL.


Veillez également à make dclean pour OpenSSL 1.0.2 et inférieur ; ou make distclean pour OpenSSL 1.1.0 et plus. Sinon, une partie de l'ancienne configuration persiste même après avoir modifié l'option.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X