前回の記事では直接rubyの最新版をインストールしてしまいました。
大きく問題がある訳ではないのですが、
今後のバージョン管理が煩雑になるのでrbenvを導入します。
##1.rbenvを取得
rbenvとruby-buildの取得
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
gitリポジトリからのクローン
[https://github.com/sstephenson/rbenv]
rbenvはRuby environmentの略みたいですね。linuxのenvコマンドと同じ意味か。
##2.rbenvのPATHを設定
bashシェルの設定
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL
やってることは、CentOSの~/.bash_profile、PATHを通してるってことです。
1行目はechoコマンドで表示した文字列'export PATH="$HOME/.rbenv/bin:$PATH"'を「~/.bash_profile」にリダイレクト(直接書き込み)する。
2行目はechoコマンドで表示した文字列'eval "$(rbenv init -)"'を「~/.bash_profile」にリダイレクト(直接書き込み)する。
3行目はシェルの再起動。
この3行で行われる事は、
bashシェル用の環境設定ファイルにrbenv用のPATHを記述して、
その環境設定ファイルの内容を反映した状態にするという事です。
bashシェルって何かって?今あなたがコマンド打ち込んでるものです。
ちゃんと書けているかはviを使ってみてみましょう。
# .bash_profile
~ 省略
export PATH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
~
ありましたね。OK問題ありません。
下のコマンドを実行すると正常にインストールしてるか確認出来ます。
$ rbenv
(結果)rbenv 0.4.0-129-g7e0e85b
ちなみにrbenvコマンドの正体ですが、
rbenv関数を動かしているみたいですね。[$type rbenv]でみれます。
$ type rbenv
rbenv ()
{
local command;
command="$1";
if [ "$#" -gt 0 ]; then
shift;
fi;
case "$command" in
rehash | shell)
eval "`rbenv "sh-$command" "$@"`"
;;
*)
command rbenv "$command" "$@"
;;
esac
}
##3.rubyのインストール
rubyのインストール
インストール可能なrubyのバージョンをみてみましょう。
$ rbenv install -l
Available versions:
1.8.6-p383
1.8.6-p420
1.8.7-p249
1.8.7-p302
1.8.7-p334
1.8.7-p352
(つづく)
rbenv installコマンドが使えるのは「ruby-build」を導入しているからです。
また、パラメータの「ーl」は「--list」でも代用可です。
僕はlinuxコマンドを覚える為に、「--list」を使っています。
$ rbenv install 2.2.0
Downloading ruby-2.2.0.tar.gz...
正常に・・・終わらず。あれ?
BUILD FAILED (CentOS Linux 7 using ruby-build 20141225-3-g1c0509a)って出てしまいました。
こういうときは、焦らずログを確認する。
$ cat /tmp/ruby-build.201412XXXXXXX.XXXXX.log
調べてみると、
./libffi-3.2.1/.libs/libffi.a: シンボルを読み込めませんでした: 不正な値です。
となっていました。
同じような事象を解決している方が居られたので参考にしました。
Ruby 2.2.0をrbenvとruby-buildでインストール
[http://qiita.com/MorimotoYasunori@github/items/fb81946fc088b18d6a3a]
つまり、libffiってパッケージがないってことなのか。なるほど。
$ sudo yum install libffi
パッケージ libffi-3.0.13-11.el7.x86_64 はインストール済みか最新バージョンです
何もしません
あれ。探してみよう。
$ sudo yum search libffi-dev
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: ftp.tsukuba.wide.ad.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
=========================== N/S matched: libffi-dev ============================
ghc-libffi-devel.x86_64 : Haskell libffi library development files
libffi-devel.i686 : Development files for libffi
libffi-devel.x86_64 : Development files for libffi
この中だと、libffi-devel.x86_64なのかな…
$ sudo yum install libffi-devel.x86_64
(インストール後)
$ rbenv install 2.2.0
...
Installed ruby-2.2.0 to /home/XXX/.rbenv/versions/2.2.0
あ、完了しました。
ただ、よくよく考えたらリンクが正しく設定されてないだけだったのかもしれない。
インストール済ってなってましたし。
$ rbenv versions
* system (set by /home/XXX/.rbenv/version)
2.2.0
インストールしたrubyバージョンを使用するように設定
$ rbenv global 2.2.0
$ ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
とりあえず、rubyの設定は完了しました。
でも、なんだか腑に落ちないけど、これでいいのかな。