2016-03-29 6 views
4

Ich versuche Ruby 2.2.4 oder 2.3.0 auf meiner Synology DS215j, die einen ARMv7-Prozessor hat zu installieren. Ich habe optware-ng verwendet, um gcc, make, openssl, openssl-dev und zlib zu installieren. Ich habe rbenv (Version 1.0.0-19-g29b4da7) und das Ruby-Build-Plugin nach den Anweisungen in der README installiert. Gebäude Rubin mit Rbenv und Ruby-Build schlägt mit undefined Symbol: SSLv2_method

Dies sind die Paket und ihre Versionen installiert mit Optware-ng

binutils - 2.25.1-1 
gcc - 5.3.0-6 
gconv-modules - 2.21-3 
glibc-opt - 2.21-4 
libc-dev - 2.21-1 
libgmp - 6.0.0a-1 
libmpc - 1.0.2-1 
libmpfr - 3.1.3-1 
libnsl - 2.21-3 
libstdc++ - 6.0.21-6 
make - 4.1-1 
ncurses - 5.7-4 
openssl - 1.0.2f-1 
openssl-dev - 1.0.2f-1 
readline - 6.1-2 
ruby - 2.2.0-1 
screen - 4.2.1-2 
termcap - 1.3.1-3 
zlib - 1.2.8-2 

Als ich rbenv install 2.2.4 oder rbenv install 2.3.0 in beiden Fällen laufen die Build mit der Fehlermeldung fehlschlägt „undefiniert Symbol: SSLv2_method“. Dies ist der Fehler für den Build 2.2.4:

installing bundle gems:  /var/services/homes/florian/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0 (build_info, cache, doc, extensions, gems, specifications) 
/tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require': /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/armv7l-linux-eabihf/openssl.so: undefined symbol: SSLv2_method - /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/armv7l-linux-eabihf/openssl.so (LoadError) 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/common/openssl.rb:17:in `<top (required)>' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/security.rb:11:in `<top (required)>' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/package.rb:43:in `<top (required)>' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/dependency_installer.rb:3:in `<top (required)>' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems.rb:556:in `install' 
    from ./tool/rbinstall.rb:722:in `block (2 levels) in <main>' 
    from ./tool/rbinstall.rb:721:in `each' 
    from ./tool/rbinstall.rb:721:in `block in <main>' 
    from ./tool/rbinstall.rb:757:in `call' 
    from ./tool/rbinstall.rb:757:in `block in <main>' 
    from ./tool/rbinstall.rb:754:in `each' 
    from ./tool/rbinstall.rb:754:in `<main>' 
uncommon.mk:246: recipe for target 'do-install-all' failed 
make: *** [do-install-all] Error 1 

Dies scheint mit etwas in Rubygems verwandt zu sein.

Interessanterweise ist der Grund, warum ich versuche zu bauen rubin ich ist, dass die Ruby-Version geliefert mit Synology 6 gibt einen ähnlichen Fehler, wenn ich versuche, Edelstein zu installieren:

[email protected]:~/.rbenv/plugins$ /usr/bin/gem install rails 
ERROR: Loading command: install (LoadError) 
     /usr/lib/ruby/2.3.0/armle-linux-gnu/openssl.so: undefined symbol: SSLv2_method - /usr/lib/ruby/2.3.0/armle-linux-gnu/openssl.so 
ERROR: While executing gem ... (NoMethodError) 
    undefined method `invoke_with_build_args' for nil:NilClass 

Was diese Probleme verursachen könnte und wie könnte ich sie lösen?

+0

hast du einen der Vorschläge zu anderen Posts ausprobiert, die deinen entsprechen wie [This One] (http://stackoverflow.com/questions/12759518/undefined-symbol-sslv2-method-when-running-bundle-install) oder [This One] (http://stackoverflow.com/questions/9732591/rails-loaderror-with-openssl-so-undefined-symbol-d2-ecpkparameters) scheint, dass sie alle vorschlagen, das open-ssl-dir bei der Installation explizit zu setzen mit 'rvm 'wie [SO] (http://stackoverflow.com/questions/12759767/rails-bundle-install-returns-undefined-symbol-sslv2-method) – engineersmnky

+0

Ich verwende RVM nicht und die Lösungen, die Sie hervorheben scheinen um einige OpenSSL-Bibliotheken zu nutzen, die von RVM geliefert werden. Leider schlägt RVM fehl, wenn ich versuche es zu installieren (wegen fehlender Inhalte und anderer Fehler). Ich habe nun versucht, 'RUBY_CONFIGURE_OPTS = - mit-openssl-dir =/opt/local rbenv install 2.2.4 'auszuführen und werde sehen, ob sich irgendetwas ändert. –

+0

Die Verwendung von 'RUBY_CONFIGURE_OPTS = - mit-openssl-dir =/opt/local' hat nicht geholfen. Ich erwarte, dass das Problem woanders ist. –

Antwort

5

Wenn ich rbenv 2.2 installieren laufen .4 oder rbenv install 2.3.0 in beiden Fällen schlägt der Build fehl mit der Fehlermeldung "undefined symbol: SSLv2_method" ...

Was könnte verursachen e diese Fragen ...

Das wurde SSLv2 Gang vollständig von OpenSSL März aufgrund CVE-2016-0800 (DROWN Attack) entfernt.

Ich denke, die vollständige Entfernung war ein bisschen hart wegen der Effekte, wie Sie erleben. Es hätte eine Warn- und Übergangsfrist geben müssen. Und es sollte vor 10 Jahren oder so geschehen sein.

Statt vollständiger Entfernung aufgrund DROWN, denke ich SSLv2_method, SSLv2_client_method und SSLv2_server_method sollen einen entsprechenden Fehlercode wie ERR_R_REMOVED_INSECURE gesetzt haben und zurück NULL. <openssl/opensslconf.h> sollte unbedingt auch OPENSSL_NO_SSL2 gesetzt haben.

OpenSSL erkannte, dass sie die ABI-Kompatibilität zerstört und die Symbole mit Commit 133138569f37d149 wieder zu 1.0.2 hinzugefügt haben. Das Einchecken lieferte die Symbole SSLv2_method, SSLv2_client_method und SSLv2_server_method erneut, aber sie geben NULL zurück, ohne einen Fehlercode zu setzen.Sie definieren auch nicht OPENSSL_NO_SSL2. Siehe auch [openssl.org #4398] BUG/1.0.2g breaks CURL extension.

SSLv2 ist seit 15 oder 20 Jahren unsicher. Pakete wie Ruby sollten nicht auf die Symbole verweisen. Sie sollten einen Sicherheitsbericht für Ruby einreichen, um auf das Symbol zu verweisen.


... und wie ich sie lösen könnte?

Um das Problem zu beheben, ich glaube, Sie müssen entweder (1) warten auf OpenSSL 1.0.2h, (2), manuell OpenSSL 1.0.2g patchen, oder (3) Entfernen Sie alle Verweise auf Ruby-SSLv2_method, SSLv2_client_method und SSLv2_server_method.

Hier ist der Patch, den Sie benötigen für (2), manuell OpenSSL 1.0.2g Patch:

diff --git a/ssl/s2_meth.c b/ssl/s2_meth.c 
index b312f17..d46e2f5 100644 
--- a/ssl/s2_meth.c 
+++ b/ssl/s2_meth.c 
@@ -74,8 +74,8 @@ IMPLEMENT_ssl2_meth_func(SSLv2_method, 
          ssl2_accept, ssl2_connect, ssl2_get_method) 
#else       /* !OPENSSL_NO_SSL2 */ 

-# if PEDANTIC 
-static void *dummy = &dummy; 
-# endif 
+SSL_METHOD *SSLv2_method(void) { return NULL; } 
+SSL_METHOD *SSLv2_client_method(void) { return NULL; } 
+SSL_METHOD *SSLv2_server_method(void) { return NULL; } 

#endif 

Sie sollten auch OpenSSL konfigurieren und kompilieren mit mindestens no-ssl2 no-ssl3 no-comp Flaggen, weil sie Sicherheitsprobleme bekannt sind. Die Konfigurationsoptionen definieren OPENSSL_NO_SSL2, OPENSSL_NO_SSL3 und OPENSSL_NO_COMP in <openssl/opensslconf.h>.

+0

Danke für die sehr detaillierte Antwort! So wie es im Moment funktioniert, werde ich es hier belassen. Ich werde es nochmal mit openssl 1.0.2h versuchen und hoffe, dass es bald veröffentlicht wird. –

2

Nach mehreren Versuchen und vielen Suchen fand ich diese ruby-build issue und lesen Sie die Anweisungen in der ruby-build wiki, die für andere Plattformen vorschlagen, Autoconf zu installieren. Ich installierte Autohersteller, autoconf und gdbm (die ich einige Warnungen in den ruby-bauen Protokollen fand) mit ipkg, das nicht direkt half. Erst nachdem ich rbenv mit RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt vorgesetzt hatte, funktionierte es.

als Referenz, das sind die Pakete I mit ipkg installiert haben

autoconf - 2.69-1 
automake - 1.15-3 
binutils - 2.25.1-1 
gcc - 5.3.0-6 
gconv-modules - 2.21-3 
gdbm - 1.8.3-4 
glibc-opt - 2.21-4 
libc-dev - 2.21-1 
libgmp - 6.0.0a-1 
libmpc - 1.0.2-1 
libmpfr - 3.1.3-1 
libnsl - 2.21-3 
libstdc++ - 6.0.21-6 
m4 - 1.4.17-1 
make - 4.1-1 
ncurses - 5.7-4 
openssl - 1.0.2f-1 
openssl-dev - 1.0.2f-1 
readline - 6.1-2 
ruby - 2.2.0-1 
screen - 4.2.1-2 
termcap - 1.3.1-3 
zlib - 1.2.8-2 

Dies ist der rbenv Befehl, der für mich am Ende arbeitete

RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt rbenv install 2.3.0 -v 
+0

Süß, arbeitete für mich. – Derek

Verwandte Themen