rbenvをシステム全体で利用できるようにする

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

# Out-of-Date!!!
この記事は2023年現在、一部古い内容となっています。
[改版版](https://qiita.com/h-izumi/items/388dfa05e239ae35da27)をご覧ください。

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

### 環境
* CentOS7/8で確認しています

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

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

以下2行はお好みで。

```shell-session
$ sudo yum install -y gcc
$ cd /usr/local/rbenv && src/configure && make -C src
```

### 環境変数等設定
`/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.1.2-28-gc2cfbd1
```

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

```shell-session
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/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 2.2.4
Checking RubyGems settings: OK
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 /usr/local/rbenv/plugins/ruby-build
```

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

```shell-session:CentOS
$ sudo yum install -y gcc-6 bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
```

### CentOS8
2020/05/09時点の**Suggested build environment** *CentOS:* に従うと以下のようなエラーが出ます。

```shell-session
$ sudo yum install -y gcc-6 bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
Last metadata expiration check: 0:23:25 ago on Fri 08 May 2020 03:28:19 PM UTC.
No match for argument: gcc-6
No match for argument: libyaml-devel
Package ncurses-devel-6.1-7.20180224.el8.x86_64 is already installed.
Error: Unable to find a match: gcc-6 libyaml-devel
```

新しいRubyをビルドする上では必要なさそうですので、**gcc-6**と**libyaml-devel**を除外してしまいます。

```shell-session
$ sudo yum install -y bzip2 openssl-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
```

## 確認
例えば、`rbenv install --list`でインストール可能なRubyの一覧が出てきます。

```shell-session
$ rbenv install --list | grep ^2.7
2.7.0-dev
2.7.0-preview1
2.7.0-preview2
2.7.0-preview3
2.7.0-rc1
2.7.0-rc2
2.7.0
2.7.1
```

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

```shell-session
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/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: /usr/local/rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20200401-7-g637ddf3)
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 2.2.4
Checking RubyGems settings: OK
Auditing installed plugins: OK
```

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

```shell-session
$ rbenv install 2.7.1 -v
...
~
Installed ruby-2.7.1 to /usr/local/rbenv/versions/2.7.1
```

## インストールしたRubyをデフォルトにする
```shell-session
$ rbenv global 2.7.1
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
```

## rubygems、bundlerを最新にする
```shell-session
$ gem update --system -N
$ gem update bundler -N
```

## RubyGemsを操作した後は、rehashする習慣を!
```shell-session
$ rbenv rehash
```