ぼくの技術日誌

日誌って銘打っていますが、更新頻度が…

rbenvとruby-buildによるRuby環境構築

はじめに

久しぶりにRubyに関する記事を書きます。
rbenvでRubyを導入・更新する方法をよく忘れるのですが、そのたび調べているのがばからしくなってきたので、自分のための忘備録として作業手順をまとめておきたいと思います。

この記事はUbuntu 14.04.2 LTSにrbenv公式のインストール手順に沿って行った操作を記録したものです。

rbenvとruby-buildによるRubyのインストール

rbenvとruby-buildを使うとRubyのバージョンを切り替えて使うことができて便利だということでインストールします。

githubからrbenvとruby-buildを取得します。

yosuke@fusion:~$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
yosuke@fusion:~$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

bashの設定ファイル.bashrcにrbenvのパスを登録し、bash設定をsourceコマンドで再び読み込みます。
コマンド情報を表示するtypeコマンドを使ってインストールができたかを確認するように手順に書いてあったので、typeを実行していますがTabキーの補完が効いたらインストールできているはず。

yosuke@fusion:~$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
yosuke@fusion:~$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
yosuke@fusion:~$ source .bashrc
yosuke@fusion:~$ type rbenv
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
}
yosuke@fusion:~$

ちなみに見つからなかった場合(パスが通っていない場合)は以下のように表示されます。

yosuke@fusion:~$ type rbenv
bash: type: rbenv: 見つかりません


インストール可能なRubyの一覧を表示します。

yosuke@fusion:~$ 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
  1.8.7-p357
  1.8.7-p358
  1.8.7-p370
  1.8.7-p371
  1.8.7-p374
  1.8.7-p375
  1.9.1-p378
  1.9.1-p430
  1.9.2-p0
  1.9.2-p180
  1.9.2-p290
  1.9.2-p318
  1.9.2-p320
  1.9.2-p326
  1.9.2-p330
  1.9.3-dev
  1.9.3-preview1
  1.9.3-rc1
  1.9.3-p0
  1.9.3-p125
  1.9.3-p194
  1.9.3-p286
  1.9.3-p327
  1.9.3-p362
  1.9.3-p374
  1.9.3-p385
  1.9.3-p392
  1.9.3-p429
  1.9.3-p448
  1.9.3-p484
  1.9.3-p545
  1.9.3-p547
  1.9.3-p550
  1.9.3-p551
  2.0.0-dev
  2.0.0-preview1
  2.0.0-preview2
  2.0.0-rc1
  2.0.0-rc2
  2.0.0-p0
  2.0.0-p195
  2.0.0-p247
  2.0.0-p353
  2.0.0-p451
  2.0.0-p481
  2.0.0-p576
  2.0.0-p594
  2.0.0-p598
  2.0.0-p643
  2.0.0-p645
  2.1.0-dev
  2.1.0-preview1
  2.1.0-preview2
  2.1.0-rc1
  2.1.0
  2.1.1
  2.1.2
  2.1.3
  2.1.4
  2.1.5
  2.1.6
  2.2.0-dev
  2.2.0-preview1
  2.2.0-preview2
  2.2.0-rc1
  2.2.0
  2.2.1
  2.2.2
  2.3.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
  jruby-1.6.5
  jruby-1.6.5.1
  jruby-1.6.6
  jruby-1.6.7
  jruby-1.6.7.2
  jruby-1.6.8
  jruby-1.7.0-preview1
  jruby-1.7.0-preview2
  jruby-1.7.0-rc1
  jruby-1.7.0-rc2
  jruby-1.7.0
  jruby-1.7.1
  jruby-1.7.2
  jruby-1.7.3
  jruby-1.7.4
  jruby-1.7.5
  jruby-1.7.6
  jruby-1.7.7
  jruby-1.7.8
  jruby-1.7.9
  jruby-1.7.10
  jruby-1.7.11
  jruby-1.7.12
  jruby-1.7.13
  jruby-1.7.14
  jruby-1.7.15
  jruby-1.7.16
  jruby-1.7.16.1
  jruby-1.7.16.2
  jruby-1.7.17
  jruby-1.7.18
  jruby-1.7.19
  jruby-9.0.0.0-dev
  jruby-9.0.0.0+graal-dev
  jruby-9.0.0.0.pre1
  jruby-9.0.0.0.pre2
  maglev-1.0.0
  maglev-1.1.0-dev
  maglev-2.0.0-dev
  mruby-dev
  mruby-1.0.0
  mruby-1.1.0
  rbx-1.2.4
  rbx-2.0.0-dev
  rbx-2.0.0-rc1
  rbx-2.0.0
  rbx-2.1.0
  rbx-2.1.1
  rbx-2.2.0
  rbx-2.2.1
  rbx-2.2.2
  rbx-2.2.3
  rbx-2.2.4
  rbx-2.2.5
  rbx-2.2.6
  rbx-2.2.7
  rbx-2.2.9
  rbx-2.2.10
  rbx-2.3.0
  rbx-2.4.0
  rbx-2.4.1
  rbx-2.5.0
  rbx-2.5.1
  rbx-2.5.2
  ree-1.8.6-2009.06
  ree-1.8.7-2009.09
  ree-1.8.7-2009.10
  ree-1.8.7-2010.01
  ree-1.8.7-2010.02
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev
yosuke@fusion:~$ rbenv install 2.2.2

インストール時最新のRubyである2.2.2をインストールすることにします。

yosuke@yosuke-vm:~/.rbenv$ rbenv install 2.2.2
Downloading ruby-2.2.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44
Installing ruby-2.2.2...

BUILD FAILED (Ubuntu 14.04 using ruby-build 20150413-7-ge9d25d0)

Inspect or clean up the working tree at /tmp/ruby-build.20150420201210.2795
Results logged to /tmp/ruby-build.20150420201210.2795.log

Last 10 log lines:
                              rake 10.4.2
                              rdoc 4.2.0
skip installing bundle gems because of lacking zlib
installing rdoc:              /home/yosuke/.rbenv/versions/2.2.2/share/ri/2.2.0/system
installing capi-docs:         /home/yosuke/.rbenv/versions/2.2.2/share/doc/ruby
The Ruby openssl extension was not compiled. Missing the OpenSSL lib?
Configure options used:
  --prefix=/home/yosuke/.rbenv/versions/2.2.2
  LDFLAGS=-L/home/yosuke/.rbenv/versions/2.2.2/lib 
  CPPFLAGS=-I/home/yosuke/.rbenv/versions/2.2.2/include 
yosuke@yosuke-vm:~/.rbenv$

しかし、インストール途中で「OpenSSLが無い」というエラーが出てインストールに失敗します。

調べると、linssl-devが足りない場合にこのようなエラーが起こるようです。
libssl-devをインストールすると今度は成功します。

yosuke@yosuke-vm:~/.rbenv$ rbenv install 2.2.2
Downloading ruby-2.2.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44
Installing ruby-2.2.2...
Installed ruby-2.2.2 to /home/yosuke/.rbenv/versions/2.2.2

yosuke@yosuke-vm:~/.rbenv$ 

使用するRubyのバージョンを設定します。

yosuke@fusion:~$ rbenv global 2.2.2
yosuke@fusion:~$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
yosuke@fusion:~$ 

バージョンを設定しないとRubyは使えないので以下のように表示されます。

yosuke@fusion:~$ ruby -v
rbenv: version `system' is not installed

以上でインストールは完了です。

スーパーユーザー権限でRubyを使用する設定

上記インストールのままだとスーパーユーザー権限でrubyが起動できず、以下のようなエラーが表示されます。

yosuke@fusion:~$ sudo rbenv 
sudo: rbenv: command not found
yosuke@fusion:~$ 
yosuke@fusion:~$ sudo rbenv 
sudo: rbenv: command not found
yosuke@fusion:~$ 

調べると、sudoのパス設定が記述された/etc/sudoersを編集してsudo実行ユーザーのパスを引き継ぐ方法が見つかったので実施しました。
他にも方法があるかもしれません。

visudoコマンドを実行すると/etc/sudoersをnanoエディタで開かれます。

yosuke@fusion:~$ sudo visudo

設定ファイルを以下の内容に変更します(secure_pathの行をコメントアウトし、env_keepの行を追記します)。

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
Defaults        env_keep += "PATH"

# Host alias specification

# User alias specification

# Cmnd alias specification