rbenvでOSのユーザごとにRubyのversionを分ける

rbenvはユーザごとにinstallし、Rubyもユーザごとにinstallするのが想定されている使用方法だが、Rubyのinstallをユーザに任せずシステム管理者がinstallする場合、rbenvをただ一つsystem wideにinstallして、どのユーザでもrbenvを使えるようにしたい。

rbenvを/usr/localにrootでinstallし、rootのみがrbenvに書き込み権限をもつ状態であれば、各ユーザのinstall / uninstall、global versionなどを制限したうえで、Rubyを使えるようになる。
rbenvの読み込み自体は/etc/profile.d以下で読み込めるようにし、さらにユーザ単位でRubyのversionを指定する。Rubyのversionをrbenvで指定する方法はrbenv global 2.4.2rbenv local 2.4.2だが、今回はsystem wideにrbenvをinstallし、どのユーザでも同一のrbenvを使うことになるので、globalのversionを変更されると他のユーザのversionに影響がでるし、localで指定するとディレクトリ単位での指定となってしまうのでユーザ全体へのversion指定ができない。そのためrbenvで一時的にversionを指定することができるRBENV_VERSION環境変数を/etc/profile.dで使うことで、ログイン期間だけそのユーザのRubyのversionを変更できるようにした。
RBENV_VERSION変数に直接値をセットするのではなく、rbenv shell 2.4.2のようにrbenv shellを使ってもいい。

rbenvの導入は以下の通りとなる。以下の例だと、user1とuser2というOSユーザのみRubyのversionを2.4.2とし、それ以外のユーザはsystem versionのままとなる。

Rubyのinstallを行うためにruby-buildも導入する。

一般ユーザでは勝手にRubyやgemのinstall、またglobal versionの変更ができなくなる。

他のサイトでは、以下のように特定グループに対して権限を与えていた。これだとグループに属しているユーザであればRubyのinstall等が行えるが、全ユーザに勝手にglobal versionを変えないように依頼したりするのは、自分の環境では非現実的と考え、システム管理者だけがinstallやversion変更をできるようにした。各ユーザが勝手にversionを変えたりできるのであれば、rbenvの一般的な使い方通り、各ユーザがrbenvをそれぞれinstallするべきで、system wideにinstallすべきではないと考えた。

参考
rbenv を system-wide にインストールする際の傾向と対策
rbenv + ruby-build を system-wide にインストールする
rbenvでsystem wideに入れるときに気をつけたいこと
rbenv で Ruby の version を一時的に切り替え

-Ruby