rbenv を system-wide にインストールする際の傾向と対策

  • 41
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

rbenv install とか gem install とか,どんな権限で実行すればいいのかわかんなかったのでたしかめました。

rbenv install とか利用できるユーザを限定する場合

rbenv ディレクトリの group (たとえば staff) を設定して chmod g+ws とかする方法。
たぶん rbenv GitHub Wiki の Shared install of rbenv というページが元になってるんだろうけど,この Wiki ページは今やもう存在しないのでよくわかりません。

インストール手順

Qiita にもいくつかあるし,kyanny さんの記事もあるので,方法は割愛します。

rbenv install の際

インストールできる権限 (例だと staff 所属) のユーザが,

$ rbenv install 2.0.0-p0

などのようにする。

で,自分の環境だと chmod g+s しててもインストールしたユーザの user ID と primary group ID で versions 下に 0755 (drwxr-xr-x) でインストールされました (umask にもよるとは思いますが)。

ということは,結局アンインストールとか gem install とかは,そのバージョンの Ruby をインストールしたユーザーが行う必要がありそうです。

違っていたらすみません。

gem install の際

インストールできる権限 (例だと staff 所属) のユーザが,

$ gem install bundler

などのようにする。

んだけど,結局前項で書いたように,そのバージョンの Ruby をインストールしたユーザが system wide な gem install をする必要があり (そう) です。

rbenv install とかしていいのは root 権限だけ (の場合)

(どうしても rbenv を system-wide にインストールしたい場合は) 個人的にはこちらのほうがおすすめ。

インストール手順

適当ですが,/usr/local/rbenv /usr/lib/rbenv にインストールする場合。
要するに chown とか chmod とかしてないだけです。

$ git clone https://github.com/sstephenson/rbenv.git
$ cd rbenv
$ mkdir versions
$ mkdir shims

$ mkdir plugins && cd plugins
$ git clone https://github.com/sstephenson/ruby-build.git

  (ほか rbenv-gemset とか rbenv-default-gems とか rbenv-vars とかお好みで)

$ cd ../..
$ sudo cp -R rbenv /usr/local/

ruby-buildinstall.sh は実行していません。ruby-build コマンドを使わない (つねに rbenv install 等で実行する) のであれば,必要ないと思います。

あとは /etc/profile.d/rbenv.sh とか /etc/skel/.bash_profile とかに必要事項を書く。

# cat > /etc/profile.d/rbenv.sh

export RBENV_ROOT="/usr/local/rbenv"

export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

CTRL+D

sudo の設定

以下のインストール等を (su -sudo -Hi 等で) root shell でおこなうならやる必要のないことですが, sudo でおこなうなら,sudo 先から rbenvruby 等が見えるようにする必要があります。
(root shell だと,個人ユーザの rbenv version と違ってくるので,sudo 使うほうがおすすめではあります)

  • Defaultsenv_keepPATH, RBENV_ROOT, RBENV_VERSION を追加する
  • Defaultssecure_path を設定しない (か,secure_path$RBENV_ROOT/shims, $RBENV_ROOT/bin を追加する)

rbenv install の際

root 権限で実行する。たとえば sudo 経由の場合,

$ sudo rbenv install 2.0.0-p0

などのようにする。

gem install の際

root 権限で実行する。たとえば sudo 経由の場合,

$ sudo gem install bundler

などのようにする。

もちろん,root 権限は使わずに個人ディレクトリに

$ gem install --user-install bundler

のようにしてインストールすることもできますが,個人ディレクトリの gem 用 bin ディレクトリに普通 PATH は通していないので

WARNING:  You don't have /home/dayflower/.gem/ruby/2.0.0/bin in your PATH,
          gem executables will not run.

みたくおこられます。もちろん個人用に PATH 通してもいいんだけど,そうすると rbenv 使う意味がないですね。

Gem を system wide にインストールしたくないなら bundler 使えってことで。

ちょっと困ること

rbenv rehash すると

rbenv: cannot rehash: /usr/local/rbenv/shims isn't writable`

みたく怒られてしまいます。
個人的には実害ほぼないのでいいんですけど。