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