mac - Símbolo no definido: SSLv3_method-.../openssl.so con Ruby y ArchLinux
rbenv reinstall ruby (1)
Una actualización reciente de OpenSSL en ArchLinux rompió a Ruby porque esta última depende de que SSLv3 cuente con el soporte de la primera. El código de Ruby que usa OpenSSL revelará el problema cuando termine con un error como el siguiente:
openssl.so: undefined symbol: SSLv3_method - .../openssl.so (LoadError)
Utilizo varias versiones de Ruby con RVM y el problema se aplica a todas ellas.
La versión de OpenSSL con la que tengo el problema es 1.0.2h
pero creo que se introdujo con 1.0.2g
. La versión 1.0.2f
funciona bien.
¿Cómo se puede superar este problema de compatibilidad ( sin downgradng OpenSSL )?
El problema está causado por el paquete ArchLinux OpenSSL que se está construyendo sin compatibilidad con SSLv3, a partir de este compromiso . Creo que algo similar se ha hecho en otras distribuciones como Ubuntu.
La solución en un entorno RVM es reinstalar tus Rubies que los reconstruirán (también puedes actualizar al último rvm):
$ rvm get head # optional, if you want to!
$ rvm reinstall all # or a specifc ruby version instead of ''all''
Sin embargo, los rubíes más antiguos seguirán fallando con un error de compilación como este:
Error running ''__rvm_make -j1''
ossl_ssl.c:143:27: error: ‘SSLv3_client_method’ undeclared here (not in a function)
Esto se ha discutido con el equipo RVM que sugirió instalar este parche Ruby que permite la construcción de rubíes más antiguos:
$ curl https://github.com/ruby/ruby/commit/801e1fe46d83c856844ba18ae4751478c59af0d1.diff > openssl.patch
$ rvm install --patch ./openssl.patch 1.9.3-p194
Construí ruby-1.9.3-p194
, ruby-2.0.0-p247
y ruby-2.2.1
con éxito con este parche.