全ユーザーで共通のrbenv+ruby-buildを使用する環境を構築する
複数人が利用する開発環境のサーバにRubyを入れる場合、rbenvを使ってバージョン管理する時のまとめ。環境はCentOSですが、Debian系でも同じですね。
rbenv, ruby-build インストール
rbenv, ruby-build を /usr/local にインストールします。
$ cd /usr/local $ git clone git://github.com/sstephenson/rbenv.git rbenv $ mkdir rbenv/shims rbenv/versions $ chgrp -R groupname rbenv $ chmod -R g+rwxXs rbenv $ git clone git://github.com/sstephenson/ruby-build.git ruby-build $ cd ruby-build $ ./install.sh $ rbenv install # これでインストールできるrubyのバージョン一覧が出ます $ rbenv install 1.9.2-p290 # rubyをインストール $ rbenv global 1.9.2-p290 # 標準で使用するrubyのバージョンを指定
環境変数の設定
以下の環境変数を設定するわけですが、問題はどこでやるか。
export RBENV_ROOT="/usr/local/rbenv" export PATH="/usr/local/rbenv/bin:$PATH" eval "$(rbenv init -)"
Shared install of rbenvではユーザー毎にシェルの初期化ファイル内で設定することを奨励していますが、これは状況次第だと思います。以下の2パターンから選ぶといいのではないでしょうか。
1. サーバ自体を構築し始める時
/etc/skel 配下の各ファイルに設定しておけば、ユーザー追加時にコピーされるのであとは開発者個人がそのまま使うか消すかすればいい感じ。メンバー全員Rubyに詳しければこれでいいかも。
2. 既にユーザーが存在する時
/etc/profile に書いてしまうかrbenv + ruby-build を system-wide にインストールするのように /etc/profile.d 配下にrbenv.shを作るなどすれば良いと思います。メンバーにRubyのコードは書けるけど、環境面はサッパリな人がいたりする場合はこっちかなと。
おまけ(CentOS)
rbenvも入れたのでgodでプロセス監視しようかなーと思い立ち、gem installした時のこと。
% sudo gem install god /usr/local/rbenv/shims/gem: line 4: exec: rbenv: not found
あれなんで?
$ sudo env TERM=xterm-256color MAIL=/var/spool/mail/hogehoge HOSTNAME=hogehoge.com HISTSIZE=1000 INPUTRC=/etc/inputrc LS_COLORS= LANG=en_US.UTF-8 HOME=/home/spacyz SHELL=/bin/zsh LOGNAME=root USER=root USERNAME=root PATH=/usr/bin:/bin # PATHが通ってねえ! SUDO_COMMAND=/bin/env SUDO_USER=spacyz SUDO_UID=500 SUDO_GID=508
PATH通ってねえ!
・・・どうやらCentOSではsudoした時にデフォルトではPATHが引き継がれないようです。毎回オプションで指定するのも面倒なので、/etc/sudoers を編集します。
# ここにPATHを追記すればよかった Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \ _XKB_CHARSET XAUTHORITY"
# こういうこと Defaults env_keep = "PATH COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \ _XKB_CHARSET XAUTHORITY"
これでオプション指定無しで引き継いでくれる。しかしCentOSは色々とやらないと使い勝手が悪いイメージがあるな。
追記
id:a666666さんにコメ欄で突っ込まれたので、rbenv globalとか追記。確かに書いておかないとハマる人いるかも・・。あとsudoのオプションで環境変数引き継げるのは知ってますが、それが面倒と書いてます。