CentOS 6.3 にrbenv + ruby をインストール

参考サイト：[OS X で rbenv を使って ruby 1.9.3 の環境を作る](http://qiita.com/items/9dd797f42e7bea674705)
参考サイト：[make install したソフトを Paco で削除する](http://foma-zakki.cocolog-nifty.com/zakki/2009/11/linux-make-inst.html)
参考サイト：[rbenvの導入](https://yamamoto.heroku.com/introducing_rbenv)

#概要(インストールする前に)
このページは自分が自分のruby環境構築のために、ちょっと他では書かれていないことをやっております。
一般論とは外れています。ご了承お願いします。

あと、このサーバはインターネットに直接繋げない環境ですので、
tarボールとかダウンロードしてきたのをサーバにアップしています。

## ruby
rubyのバージョンを変更して使っていくために、rbenvの管理下に置くようにする。
こうしておくことで、脆弱性の修正パッチとかあてることになっても
ゆっくりインストールした後で、コマンドで切り替えるだけなので停止時間を
可能な限り短くしておくことができる。

あと、アンインストール時のことを考えて Pacoを使ってファイルを管理しておくようにする。
checkinstallを使ってruby をrpm管理する方法もあるが、以下の欠点があって見送った。
- ruby本体がrpmに含まれない
- 依存関係までは簡単に面倒見てくれない。
- rubyとは関係ないが、phpインストール時に、httpd.confもrpmに含まれために、ファイル競合エラーが発生しインストール不可となった。

## rbenv
### rbenvって何？
rubyのバージョンをいつでも任意に切り替えるツール。
bashでできているため、他のソフトにも応用は可能。
SamStephenson（37signals)氏が作成した。
### インストールの方針 
- rubyアカウントを作成し、rbenvもrubyも該アカウントで管理する。
- ホームディレクトリを/opt/rubyとする。
- .rbenvディレクトリの作成場所も/opt/ruby配下。
- rubyの本体もここで管理していく
- rbenv-buildは使用しない（インターネットに繋がっていないので、ruby本体はmake installでインストールする）

rubyアカウントを作成する理由
　　rbenvのインストール先及びruby本体のインストール先が~/.rbenv 配下となっている。
　　何も考えずにインストールしてしまうと、いつも使っているユーザがruby本体を消してもよい権限すらもらっていることになる。
　　あと、各ユーザが各ホームディレクトリの配下に同一バージョンのrubyを持つことになってしまう。
　　気持ち悪いのでrubyアカウントで管理していく方針にしました。
　　セキュリティの基本事項「最小権限の原則」に反するので、特別にrubyを管理できるユーザを作る。システムメンテナンスの部類にはいる
    と思うのでrootグループ配下にする。

# インストール手順

システムアカウントの作成(以降、全てrootユーザで実施。)

```bash:rubyアカウントの作成
useradd -r -g root -d /opt/ruby -s /sbin/nologin ruby
```

## rbenvインストール
[rbenv-master.zip](https://github.com/sstephenson/rbenv/) を/opt/rubyに配置する。
その後、gitの展開

```bash:zipの解凍から配置まで。
cd /opt/ruby
unzip rbenv-master.zip
mv rbenv-master ./.rbenv
rm rbenv-master.zip
mkdir /opt/ruby/.rbenv/versions/
echo "system" > /opt/ruby/.rbenv/version
```

誰でもrubyを切り替えることが出来るように権限を開放する。

```bash:必要最小限の権限開放
chmod a+w /opt/ruby/.rbenv
chmod a+w /opt/ruby/.rbenv/versions
```

全員ログイン時にrbenvの環境を使えるようにする。

```bash:環境変数の編集（新規ファイル。自動で読み込んでくれるはず）
vi /etc/profile.d/rbenv.sh
```

```bash:環境変数の編集内容
export RBENV_ROOT=/opt/ruby/.rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
```

## rubyインストール

まずはローカルリポジトリから必要なパッケージをインストール

```bash:パッケージ準備
yum install readline-devel openssl-devel zlib-devel
yum install libffi-devel gdbm-devel 
yum install tk tk-devel tcl tcl-devel
```

ruby-build使っている人は必要無いが、make install で導入する場合はyamlを手作業で
バージョン毎にインストールする必要がある。

```bash:yamlインストール
tar zxf yaml-0.1.4.tar.gz
cd yaml-0.1.4
./configure --prefix=/opt/ruby/.rbenv/versions/1.9.3-p374
make
paco -D make install
```

脇道にそれるが、yamlをインストールしていなかった場合、ruby実行時に以下のメッセージが出る。

```text:エラーメッセージ
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
```

ruby本体をインストールする。

```bash:ruby本体の解凍
tar xfz ruby-1.9.3-p374.tar.gz
cd ruby-1.9.3-p374
```

ここでインストール先をrbenvに沿って変更しておくこと。

```bash:ruby本体のコンパイル設定
./configure --prefix=/opt/ruby/.rbenv/versions/1.9.3-p327 --enable-debug-env
```

```bash:ruby本体のコンパイル
make
  # （※ここでFailedの行が出力されないようにすること。）
  # （出力例：Failed to configure -test-/win32/dln. It will not be installed.）
  # （出力例：Failed to configure dl/win32. It will not be installed.）
  # （出力例：Failed to configure curses. It will not be installed.）
  # （出力例：Failed to configure dbm. It will not be installed.）
  # （出力例：Failed to configure fiddle. It will not be installed.）
  # （出力例：Failed to configure gdbm. It will not be installed.）
  # （出力例：Failed to configure openssl. It will not be installed.）
  # （出力例：Failed to configure readline. It will not be installed.）
  # （出力例：Failed to configure tk. It will not be installed.）
  # （出力例：Failed to configure tk/tkutil. It will not be installed.）
  # （出力例：Failed to configure win32ole. It will not be installed.）
  # （出力例：Failed to configure zlib. It will not be installed.）
  #  (出力された場合、パッケージが不足している可能性があるため検討すること）


  #  (以下のエラーが出力された場合は、ソースのドキュメント生成に失敗しているっぽく、doxygenをインストールすると解消するはず。)
  #  Generating RDoc documentation
  #  Parsing sources...
  #  lib/irb/inspector.rb:36:36: Couldn't find INSPECTORS. Assuming it's a module
  #  lib/mkmf.rb:1117:29: Couldn't find STRING_OR_FAILED_FORMAT. Assuming it's a module
  #  Enclosing class/module 'mDigest' for class MD5 not known
  #  Enclosing class/module 'mDigest' for class RMD160 not known
  #  Enclosing class/module 'mDigest' for class SHA1 not known
  #  Enclosing class/module "cASN1ObjectId" for alias short_name sn not known
  #  Enclosing class/module "cASN1ObjectId" for alias long_name ln not known
  #  (RDoc生成時のエラーのよう。"RDoc"・・・Ruby で書かれたソースコードから ドキュメントを自動生成する）
```

```bash:ruby本体のインストール
paco -D make install
```

インストールを完了したらrbenvを使えるようにする。

```bash:rbenv有効化
source /etc/profile.d/rbenv.sh
```

有効化したら必ず以下も実施する。この操作で初めてコマンドが使えるようになる。

```bash:rbenvお約束
rbenv rehash
rbenv global 1.9.3-p374
```

あとはインストールできたか確認する。

```bash:起動確認
ruby -v
gem -v
gem list
```