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-dev と libffi-dev らしいことも分かった。
ところが,
sudo dnf info libyaml-dev libffi-dev
としても「んなもんは無い1」と言われる。へ?
解決
その後,どうやって正解に辿り着いたのか覚えていないが,インストールすべきパッケージは libyaml-devel と libffi-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 のインストールよりも簡単だ。ぜひ。
本記事のテーマではないので具体的なことは略す。
-
この「無い」は「インストールされてない」という意味ではなく,「インストール可能なパッケージとしてそんな名前のものは無い」という意味。 ↩