如何在Ubuntu 22.04上正确安装Ruby?

10
在使用rvm在ubuntu 22.04上安装ruby时存在问题,会出现以下错误enter image description here
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 install openssl
rvm remove x.x.x
rvm install x.x.x -C --with-openssl-dir=$HOME/.rvm/usr 这样安装成功了,但是一些库(如pg、rails或puma)不能与以这种方式安装的Ruby版本一起使用。例如,在bundle install之后,如果运行“rails db:migrate”命令,它将从pg gem给出另一个错误-Segmentation fault。
/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 的正确步骤是什么?

你说得对,几周前我也遇到了与 OpenSSL 相关的问题。我不得不将 Ubuntu 降级到 20.04 版本。 - fsi
我在这里完全同意,老实说,目前降级看起来并不是一个坏选择。 - Max
5个回答

7

大多数通过 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上安装成功。


2
感谢您针对rvm的具体回答! - wwahammy
1
会尝试一下,谢谢!其他方法都失败了,因为即使Ruby安装成功,Rails应用程序也会进入segfault,因为MySQL使用较新的SSL库。 - Gabor Garami

7

对我有用的方法是运行

rvm pkg install openssl

然后运行

rvm install ruby-2.7.3 --with-openssl-dir=$HOME/.rvm/usr

希望能对你有所帮助!


2
警告:即使Ruby编译通过,某些宝石也无法正常工作!特别是MySQL宝石,它与OpenSSL 3编译且与RVM自己的OpenSSL 1.0不兼容。 - Gabor Garami
1
@marco8757,谢谢,这对我在Ubuntu 22.04上安装Ruby版本很有帮助。 - MD Shahid Khan

4

在基本按照您的经历尝试后,我开始考虑降级整个系统。幸运的是,我找到了这篇文章:

https://deanpcmad.com/2022/installing-older-ruby-versions-on-ubuntu-22-04/

于是我决定给它最后一次机会。作者使用了一个叫做asdf的工具,但是有一条注释说相同的配置应该适用于rbenv。我运行了rvm implode,安装了rbenv和gem,并启动了Rails服务器。

问题得以解决!不确定rvm出了什么问题,可能是它的问题,也可能是OpenSSL不匹配的问题,但目前我想专注于编码就可以了。

希望这能帮助其他人开展进一步的研究。


非常感谢。我在这个问题上一直打转。他使用asdf。当使用rbenv时,我必须在安装行中添加引号,如下所示:RUBY_CONFIGURE_OPTS="--with-openssl-dir=$HOME/.openssl/openssl-1.1.1g" rbenv install 3.0.3。 - Slayer6

4
我曾经遇到同样的问题,最好的解决方法是使用 rbenv 代替 rvm。 您不需要降级 Ubuntu 22.04 的 openssl 版本,因为 rbenv 已经下载并使用了适用于您的 Ruby 版本的 openssl 1.1.1。
安装 rbenv 和 ruby-build 插件 https://github.com/rbenv/rbenv https://github.com/rbenv/ruby-build 我的版本号 (Openssl, Ruby 和 Rbenv) enter image description here

0

我已经找到了解决这个问题的方法。要修复它,您需要安装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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接