Software Collections(SCL)のメリット

rbenvでinstallしたRubyへsymlinkを貼り、cron等から使えるようにするrbenvでOSのユーザごとにRubyのversionを分けるでサーバ用途でRubyのバージョンを固定して使うことを想定し、rbenvをシステムワイドにinstallする方法などについて記載したが、CentOS/RHELへのRubyのインストールについてはSoftware Collections(SCL)が新しいバージョンのRubyについても提供してくれているため、yumでinstallする方がいい。

rbenvのほうが劣る点として、大きく以下2点があげられる。

  • rbenvでinstallするとパーミッションやPATHの問題で扱いづらい
  • ruby-buildによるRubyのinstallにはコンパイル時間がかかる

これらはyum installで解消する。

さらにrbenvのメリットのひとつである複数バージョンのinstallができる点も、Software Collections(SCL)から複数のRubyバージョンをinstallできるため、rbenvを推す理由にはならない。

Software Collections(SCL)の設定

まずSoftware Collections(SCL)を使えるようにする必要がある。CentOSのデフォルトのリポジトリではないし、Rubyのinstallくらいでしか使わないのであれば、enabled=0にしておいたほうがいい。

環境: CentOS 7.4

$ sudo yum install centos-release-scl --enablerepo=extras
$ sudo sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
$ sudo sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/CentOS-SCLo-scl.repo

Rubyのinstall

install方法とPATHの通し方

rh-rubyバージョンでinstallできる。SCLでは/opt/rh配下にinstallされ、PATHが通っていないので、/etc/profile.dでログイン時にPATHが通るようにする必要がある。

$ sudo yum install rh-ruby25 --enablerepo=centos-sclo-rh
$ cat << 'EOF' | sudo tee /etc/profile.d/rh-ruby.sh
#!/bin/bash
source scl_source enable rh-ruby25
EOF
# 再ログインする
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

/opt/rh/rh-ruby25/enableが環境変数を設定してくれるスクリプトになっており、source /opt/rh/rh-ruby25/enableだけでもPATHが通る。そのため以下の通りenableへのsymlinkを張るだけでもPATHが通る。

$ sudo ln -s /opt/rh/rh-ruby25/enable /etc/profile.d/rh-ruby.sh

しかしSCLを使うときはsource scl_source enable rh-ruby25とするのが通例となっている。

複数バージョンをinstallする

複数バージョン入れて、特定ユーザーだけそのバージョンを使うこともできる。

$ sudo yum install rh-ruby24 --enablerepo=centos-sclo-rh
$ cat << 'EOF' | sudo tee /etc/profile.d/rh-ruby.sh
#!/bin/bash
if [ $(whoami) == "特定ユーザー" ]; then
  source scl_source enable rh-ruby24
else
  source scl_source enable rh-ruby25
fi
EOF
# 再ログインする
$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]
$ sudo ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

あるいは.bashrcでPATHにruby 2.4のPATHも追加するでもよい。単純だが、PATHに2.4と2.5が両方入ることに加えて、PATHの設定が箇所分散してしまうため、/etc/profile.d/rh-ruby.shを設定できるパーミッションさえ持っているのであれば/etc/profile.d/rh-ruby.shで一元管理したほうがいいのでないかと思う。

$ echo 'source scl_source enable rh-ruby24' >> ~/.bashrc