rbenvをシステム全体で利用できるようにする + Ruby 3をruby-buildでビルド on AlmaLinux 9

rbenvをユーザー毎ではなく、システム全体で共有して利用できるようにします。

* この記事は[旧記事](https://qiita.com/h-izumi/items/ca2c417fc09c092eb084)の改版です

# 前提
* 事前にgitを使用可能にしておく
* rbenv関連の書き込み権限を持つグループとして`rbnev`グループを作成、必要なユーザーを所属させる

### 環境
* AlmaLinux 9で確認しています

# rbenvインストール

## rbenvを操作できるグループを追加
```shell-session
$ sudo groupadd rbenv
```

### 追加したグループにユーザを追加
```shell-session
$ sudo gpasswd -a USERNAME rbenv
```

## rbenv用のディレクトリを作成

```shell-session
$ sudo mkdir /usr/local/rbenv
```

### ディレクトリの所有者(グループ)を変更
```shell-session
$ sudo chown .rbenv /usr/local/rbenv
```

### ディレクトリにパーミッションを設定
```shell-session
$ sudo chmod 2775 /usr/local/rbenv
```

## rbenvをインストール
[Basic Git Checkout](https://github.com/rbenv/rbenv#basic-git-checkout)を参考に。
以降、前述の`rbenv`グループにユーザーが属していることを前提にしています。
`id`コマンドで表示されるgroupsにrbenvが含まれない場合、再ログインする等してから実行します。

```shell-session
$ git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv
```

### 環境変数等設定
`/etc/profile.d`下に`rbenv.sh`等の名前のファイルに以下を記述して保存、`rbenv`コマンドを利用できるようにします。

```/etc/profile.d/rbenv.sh
export RBENV_ROOT="/usr/local/rbenv"
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init --no-rehash -)"
```

`source`コマンドでこのファイルを読み込み、初期化します。

```shell
$ source /etc/profile.d/rbenv.sh
```

### sudoで使用可能にする
`env_keep`、`secure_path`に設定を追記します。

```shell
$ sudo visudo
```

```bash
# 既存の Defaults env_keep の下に追加
Defaults    env_keep += "RBENV_ROOT"

# 既存の Defaults secure_path の末尾に :/usr/local/rbenv/bin:/usr/local/rbenv/shims を追記
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims
```

### 確認
一度ログアウト、ログインしコマンドを利用できることを確認します。

```shell-session
$ rbenv --version
rbenv 1.2.0-52-g61747c0
```

#### rbenv-doctor
更に念を押して確認するには、[rbenv-doctor](https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor)を利用します。

```shell-session
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /usr/local/rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: not found
Unless you plan to add Ruby versions manually, you should install ruby-build.
Please refer to https://github.com/rbenv/ruby-build#installation

Counting installed Ruby versions: none
  There aren't any Ruby versions installed under `/usr/local/rbenv/versions'.
  You can install Ruby versions like so: rbenv install <version>
Auditing installed plugins: OK
```

この時点では`ruby-build`を導入していないため、当該箇所は`not found`となっています。


# [ruby-build](https://github.com/rbenv/ruby-build/)インストール
## 本体
gitでcloneします。

```shell-session
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
```

## Rubyビルド用パッケージ
[Suggested build environment](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment)を参考に、必要なパッケージをインストールします。

```shell-session:AlmaLinux 9
$ sudo dnf config-manager --set-enabled crb
$ sudo dnf install -y epel-release
$ sudo dnf install gcc patch bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel rust
```

## 確認
例えば、`rbenv install --list`でインストール可能なRuby(のうち、各実装毎の最新)一覧が出てきます。

```shell-session
$ rbenv install --list
2.7.7
3.0.5
3.1.3
3.2.0
jruby-9.4.0.0
mruby-3.1.0
picoruby-3.0.0
truffleruby-22.3.1
truffleruby+graalvm-22.3.1

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
```

### rbenv-doctor
[rbenv-doctor](https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor)も利用できます。

```shell-session
$ curl -fsChecking for `rbenv' in PATH: /usr/local/rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /usr/local/rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20230202)
Counting installed Ruby versions: none
  There aren't any Ruby versions installed under `/usr/local/rbenv/versions'.
  You can install Ruby versions like so: rbenv install 3.2.0
Auditing installed plugins: OK
SL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
```

# Rubyインストール
`RUBY_CONFIGURE_OPTS`、進捗が見える`-v`オプションはお好みで。

```shell-session
$ RUBY_CONFIGURE_OPTS="--disable-install-doc --disable-install-rdoc" rbenv install 3.2.0 -v
$ rbenv install 3.2.0 -v
...
~
Installed ruby-3.2.0 to /usr/local/rbenv/versions/3.2.0
```

## インストールしたRubyをデフォルトにする
```shell-session
$ rbenv global 3.2.0
$ ruby -v
ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-linux]
```

## rubygems、bundlerを最新にする
`-N`オプションはお好みで。
```shell-session
$ gem update --system -N
$ gem update bundler -N
```
全部最新にして良いのであれば以下を実行します。
```shell-session
$ gem update -N
```

## RubyGemsを操作した後は、rehashする習慣を!
**環境変数等設定**時に`--no-rehash`を追記しているため、エラー発生の原因になります。
```shell-session
$ rbenv rehash
```