3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CentOS Stream/AlmaLinux に Ruby 3.2 をインストール

Last updated at Posted at 2022-12-26

CentOS Stream 8 に Ruby 3.2 を rbenv でインストールしようとしたらちょっとつまづいた。その解決の記。

完全には理解せずに書いているので,何かご指摘があれば歓迎します。

(追記 2023-01-29)AlmaLinux 8.7 でもだいたい同様だったので,タイトルに「AlmaLinux」を付け加えた。

失敗

いつものように

sudo rbenv install 3.2.0

とすると,エラーが出てインストールできなかった。

メッセージを見ると,libyaml と libffi がナンチャラとか書いてある。
(エラーメッセージ保存しとくの忘れた,すまぬ)

調査

Ruby 3.2 では libyaml と libffi が同梱されなくなったため,インストールするにはそれが必要,ということはいろいろなところに書いてあった。

しかし,

sudo dnf info libyaml libffi

と打つと,これらは既にちゃんとインストールされていることが分かった。へ?

さらにウェブ検索していると,パッケージとして必要なのは libyaml と libffi じゃなくて,libyaml-devlibffi-dev らしいことも分かった。

ところが,

sudo dnf info libyaml-dev libffi-dev

としても「んなもんは無い1」と言われる。へ?

解決

その後,どうやって正解に辿り着いたのか覚えていないが,インストールすべきパッケージは libyaml-devellibffi-devel であることが分かった。
要するに,OS によって -dev だったり -devel だったりする,ということらしい。

そこでこれらをインストールすることにした。

libffi-devel のほうは

sudo dnf install libffi-devel

で OK だったが,libyaml-devel は

sudo dnf install libyaml-devel

だとインストールできなかった。ええと,なんかエラーが出たんだっけか。ちゃんと記録してなかったので忘れた(すまぬ)。

なんだかよく分からないが,

sudo dnf --enablerepo=powertools install libyaml-devel

とやったらインストールできた。

この状態で

sudo rbenv install 3.2.0

とやったら Ruby 3.2.0 が無事にインストールできた。

付記

Ruby 3.2.0 では YJIT が本格導入された。手元のベンチマークテストでは,良い成績を上げるケースがいくつかあったので,YJIT が使える状態でインストールするのが良い。

Rust がインストールされた状態で Ruby 3.2.0 をインストールすると YJIT アリでインストールされる。

Rust のインストールは(私の経験の範囲では)Ruby のインストールよりも簡単だ。ぜひ。

本記事のテーマではないので具体的なことは略す。

  1. この「無い」は「インストールされてない」という意味ではなく,「インストール可能なパッケージとしてそんな名前のものは無い」という意味。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?