使用 rvm 在 ubuntu 22.04 上安装 ruby 时出现问题,因为它会给出以下错误
Error running '__rvm_make -j8',
please read /usr/share/rvm/log/1655413907_ruby-2.5.0/make.log
There has been an error while running make. Halting the installation.
如果我尝试安装 ruby 2.7.0、2.7.1,也会出现同样的错误。 2.7.2 及更高版本。
我在here找到了使用以下步骤的建议
rvm pkg 安装 openssl
rvm 删除 x.x.x
rvm install x.x.x -C --with-openssl-dir=$HOME/.rvm/usr
这使得安装成功,但一些库(如 pg、rails 或 puma)无法与以这种方式安装的 ruby 版本一起使用。例如,在捆绑安装之后,如果运行命令“rails db:migrate”,它将给您来自 pg gem 的另一个错误 - Segmentation failure
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:113: [BUG] Segmentation fault at 0x00007f03df83e140
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0011 p:0009 s:0055 e:000053 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:53
c:0010 p:0014 s:0047 e:000046 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:18
c:0009 p:0039 s:0042 e:000041 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:100
c:0008 p:0070 s:0034 e:000033 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:68
c:0007 p:0009 s:0028 e:000027 BLOCK /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76
c:0006 p:0017 s:0025 e:000024 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:103
c:0005 p:0008 s:0018 e:000017 BLOCK /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76 [FINISH]
c:0004 p:---- s:0014 e:000013 CFUNC :each
c:0003 p:0011 s:0010 e:000009 BLOCK /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:75 [FINISH]
c:0002 p:0007 s:0006 e:000005 BLOCK /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/internals/thread_pool.rb:6 [FINISH]
c:0001 p:---- s:0003 e:000002 (none) [FINISH]
-- Ruby level backtrace information ----------------------------------------
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/internals/thread_pool.rb:6:in `block in add'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:75:in `block in start'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:75:in `each'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76:in `block (2 levels) in start'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:103:in `_timed'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/adapter/base.rb:76:in `block (3 levels) in start'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:67:in `build'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:102:in `_fast_build_dir'
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:18:in `children'
-- Machine register context ------------------------------------------------
RIP: 0x00007f03df83e140 RBP: 0x000055e2c1faa3e8 RSP: 0x00007ffcb2ab4718
RAX: 0x0000000000000000 RBX: 0x00007f03df8412c0 RCX: 0x0000000000000000
RDX: 0x000055e2bc30f010 RDI: 0x000055e2c1faa6c0 RSI: 0x000055e2c260c540
R8: 0x0000000000000000 R9: 0x0000000000000000 R10: 0x00007f03dff62630
R11: 0x00007f03e0076890 R12: 0x000055e2c1faa3e0 R13: 0x00007f03dfd83b10
R14: 0x0000000000000000 R15: 0x000055e2c2670fd0 EFL: 0x0000000000010202
-- C level backtrace information -------------------------------------------
Unexpected size of .debug_line in /usr/share/rvm/rubies/ruby-2.5.0/bin/ruby
/usr/share/rvm/rubies/ruby-2.5.0/lib/libruby.so.2.5(rb_vm_bugreport+0x4ae) [0x7f03e16b18ce]
/usr/share/rvm/rubies/ruby-2.5.0/lib/libruby.so.2.5(0xaafbd) [0x7f03e152ffbd]
/usr/share/rvm/rubies/ruby-2.5.0/lib/libruby.so.2.5(0x19e2e6) [0x7f03e16232e6]
/lib/x86_64-linux-gnu/libc.so.6(0x7f03e128e520) [0x7f03e128e520]
/lib/x86_64-linux-gnu/libssl.so.3(0x7f03df83e140) [0x7f03df83e140]
根据这篇文章在此处输入链接描述 pg gem 的这个问题也与 openssl 版本有关
所以这两个问题都与 ubuntu 22.04 附带的 OpenSSL 版本有关,但我找不到任何指南来解释如何逐步修复它或如何使用旧版 OpenSSL 版本进行 ruby 安装,无需所有这些即可工作错误。
那么在 Ubuntu 22.04 上安装 ruby 的正确步骤是什么呢?
对我来说最有效的是跑步
rvm pkg install openssl
然后
rvm install ruby-2.7.3 --with-openssl-dir=$HOME/.rvm/usr
大多数从 Google 来到这里的人可能会运行以下命令:
rvm install ruby
在撰写本文时,这将安装 ruby
3.0.0
,这将在 Ubuntu 22.04 上给你一个构建错误。
大多数人可能想安装最新的
3.1.0
,运行时不会显示rvm list known
。
要安装最新版本(当前为
3.1.0
),请运行:
rvm install ruby-3.1.0
最新版本可以在 Ubuntu 22.04 上正常安装。
我也遇到了同样的问题,最好的解决方案是使用
rbenv
而不是 rvm
。
您不需要降级 Ubuntu 22.04 的 openssl 版本,因为 rbenv 已经下载并使用适合您的 ruby 版本的 openssl 1.1.1。
安装rbenv https://github.com/rbenv/rbenv 使用 ruby-build 作为插件 https://github.com/rbenv/ruby-build
在遵循了您的大部分操作之后,我正在考虑降级整个系统。幸运的是,我找到了这篇文章
https://deanpcmad.com/2022/installing-older-ruby-versions-on-ubuntu-22-04/
并决定给它最后一次机会。作者正在使用名为
asdf
的工具,但有一个注释,相同的配置应该适用于 rbenv。我运行 rvm implode
,安装了 rbenv,安装了 gems 并启动了 Rails 服务器。
它成功了!不确定 rvm 出了什么问题,枯萎是它的错误或 OpenSSL 不匹配,但目前我想专注于编码,仅此而已。
希望这能帮助人们进行进一步的研究。
我已经找到了解决这个问题的方法。要修复它,您需要安装 libssl1.0-dev 并删除当前版本的 libssl-dev。因此,如果您需要安装 ruby 2.7.1,则必须执行这两个命令
sudo apt purge libssl-dev && sudo apt install libssl1.0-dev
rvm install 2.7.1