'RSA_SSLV23_PADDING' 未声明(在此函数中首次使用);您的意思是“RSA_NO_PADDING”吗?使用 asdf 编译 ruby​​-2.7.1 时

Rah*_*put 13 c ruby openssl asdf

我在使用 asdf 或 rvm 编译 ruby​​-2.7.1 时遇到此问题。

\n

它甚至还会导致 erlang 安装出现问题。

\n

错误可能是

\n
generating x86_64-linux-fake.rb\nx86_64-linux-fake.rb updated\n./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems -r./x86_64-linux-fake ./tool/rbinstall.rb --make="make" --dest-dir="" --extout=".ext" --mflags="" --make-flags="" --data-mode=0644 --prog-mode=0755 --installed-list .installed.list --mantype="doc" --rdoc-output=".ext/rdoc" --html-output=".ext/html"\n/tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require': libssl.so.1.1: cannot open shared object file: No such file or directory - /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/.ext/x86_64-linux/openssl.so (LoadError)\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/.ext/common/openssl.rb:13:in `<top (required)>'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/security.rb:12:in `<top (required)>'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/package.rb:44:in `<top (required)>'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/installer.rb:11:in `<top (required)>'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from /tmp/ruby-build.20220515222647.5893.R2e2fF/ruby-2.7.1/lib/rubygems/core_ext/kernel_require.rb:92:in `require'\n    from ./tool/rbinstall.rb:713:in `<module:RbInstall>'\n    from ./tool/rbinstall.rb:649:in `<main>'\nmake: *** [uncommon.mk:373: do-install-all] Error 1\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
ossl_pkey_rsa.c:877:58: error: \xe2\x80\x98RSA_SSLV23_PADDING\xe2\x80\x99 undeclared (first use in this function); did you mean \xe2\x80\x98RSA_NO_PADDING\xe2\x80\x99?\n  877 | #define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))\n      |                                                          ^~~~\n../.././include/ruby/ruby.h:262:33: note: in definition of macro \xe2\x80\x98RB_INT2FIX\xe2\x80\x99\n  262 | #define RB_INT2FIX(i) (((VALUE)(i))<<1 | RUBY_FIXNUM_FLAG)\n      |                                 ^\n../.././include/ruby/ruby.h:1609:20: note: in expansion of macro \xe2\x80\x98RB_INT2NUM\xe2\x80\x99\n 1609 | #define INT2NUM(x) RB_INT2NUM(x)\n      |                    ^~~~~~~~~~\nossl_pkey_rsa.c:877:50: note: in expansion of macro \xe2\x80\x98INT2NUM\xe2\x80\x99\n  877 | #define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))\n      |                                                  ^~~~~~~\nossl_pkey_rsa.c:942:5: note: in expansion of macro \xe2\x80\x98DefRSAConst\xe2\x80\x99\n  942 |     DefRSAConst(SSLV23_PADDING);\n      |     ^~~~~~~~~~~\nossl_pkey_rsa.c:877:58: note: each undeclared identifier is reported only once for each function it appears in\n  877 | #define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))\n      |                                                          ^~~~\n../.././include/ruby/ruby.h:262:33: note: in definition of macro \xe2\x80\x98RB_INT2FIX\xe2\x80\x99\n  262 | #define RB_INT2FIX(i) (((VALUE)(i))<<1 | RUBY_FIXNUM_FLAG)\n      |                                 ^\n../.././include/ruby/ruby.h:1609:20: note: in expansion of macro \xe2\x80\x98RB_INT2NUM\xe2\x80\x99\n 1609 | #define INT2NUM(x) RB_INT2NUM(x)\n      |                    ^~~~~~~~~~\nossl_pkey_rsa.c:877:50: note: in expansion of macro \xe2\x80\x98INT2NUM\xe2\x80\x99\n  877 | #define DefRSAConst(x) rb_define_const(cRSA, #x, INT2NUM(RSA_##x))\n      |                                                  ^~~~~~~\nossl_pkey_rsa.c:942:5: note: in expansion of macro \xe2\x80\x98DefRSAConst\xe2\x80\x99\n  942 |     DefRSAConst(SSLV23_PADDING);\n      |     ^~~~~~~~~~~\nossl_pkey.c: At top level\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试使用 apt-get 安装 openssl 版本 1.1,但它不起作用。

\n

Jon*_*ins 11

当我在编译 Ruby 时遇到 openssl 问题时,我通常会使用这样的解决方案。如果可以的话,我不想弄乱操作系统的安装版本,而且我不使用 RVM 之类的东西。

  1. 下载 Open SSL 的最新版本 ~1.1:
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
Run Code Online (Sandbox Code Playgroud)
  1. 解压并配置以安装在系统上的某个位置,然后编译并安装。就我而言,它位于我的主目录中,因为我进行了大量 Ruby 开发,并且 Ruby 也位于我的主目录中。
tar xvzf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
mkdir -p $HOME/lib/openssl
./config --prefix=$HOME/lib/openssl
make
make install
Run Code Online (Sandbox Code Playgroud)
  1. 确保您的 openssl 文件夹具有正确的证书。
cp /etc/ssl/certs/* $HOME/lib/openssl/ssl/certs
Run Code Online (Sandbox Code Playgroud)
  1. 像这样编译 ruby​​。请记住,这是特定于我自己的主目录的,您可以像安装系统范围的 ruby​​ 一样轻松地安装它。
tar xvzf ruby-2.7.1.tar.gz
cd ruby-2.7.1
./configure --prefix=$HOME/.rubies/ruby-2.7.1 --with-openssl-dir=$HOME/lib/openssl
make
make install
Run Code Online (Sandbox Code Playgroud)


Rah*_*put 5

Openssl 最近删除了对CVE-2021-23839RSA_SSLV23_PADDING之后的支持

最好的选择是安装最新版本的 ruby​​,它应该支持此功能,但我必须安装这个特定版本的 ruby​​。以下是对我有帮助的事情。

这个答案确实对我有帮助。 https://askubuntu.com/questions/1126893/how-to-install-openssl-1-1-1-and-libssl-package

最后,我必须将此 openssl.so.1.1 文件(编译后生成)复制到 lib 文件夹。

sudo cp openssl.so.1.1 /usr/local/lib/

或者

sudo cp openssl.so.1.1 /usr/local/lib64/

然后export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64sudo ldconfig

现在尝试运行asdf install ruby-2.7.1

它应该可以工作。