[Ruby] RUBY_CONFIGURE_OPTS, readline, openssl

インストール時に指定されている例が他見される RUBY_CONFIGURE_OPTS, readline, openssl について調べてみました。

[markdown]

## きっかけ

irb (pry) で日本語が文字化けてしまったため、もろもろ確認をしました。

### インストール

以前に試したとおり、現在、インストールという意味では、特に RUBY_CONFIGURE_OPTS を指定する必要ななさそう。

> * [Homebrew + rbenv で Ruby をインストールする | deadwood](https://www.d-wood.com/blog/2013/06/30_4157.html)

インストール時の brew Formulae のバージョンによって、各ブログにあるように様々な症状がでているよう。

### 利用時の問題

上記の手順でインストールしたところ、下記を確認しました。

* irb 上で日本語が文字化ける
* SSL利用時に証明書エラーが出る(OAuth等でつかうことになる?)

本稿では、上記の解決を目指します。

## Readline, OpenSSL とは何か

そもそもReadline, OpenSSL は、Ruby のライブラリでこんな役割をしてるよう。

* [library readline](http://doc.ruby-lang.org/ja/2.0.0/library/readline.html)
* [library openssl](http://doc.ruby-lang.org/ja/2.0.0/library/openssl.html)

インストール時にも、このライブラリが使われるのかな。

## 動作確認

brew でインストールした Ruby と、rbenv でインストールしたものをと比較しながら確認します。
なお、Readline, OpenSSL の動作確認方法については、こちらを参考にさせて頂きました。

> * [noanoa 日々の日記 : Ruby 2.0.0 を Homebrew + rbenv で OS X Mountain Lion にインストール](http://blog.livedoor.jp/noanoa07/archives/1897747.html)

### rbenv – .rbenv/versions/2.0.0-p247

* irb日本語: 文字化け
* openssl: false 証明書エラー

“`
% bundle exec irb
irb(main):001:0> “\U+FFE3\U+FFE3\U+FFE3”
=> “”
irb(main):002:0> require ‘openssl’
=> false
irb(main):003:0> require ‘zlib’
=> true
irb(main):004:0> require ‘psych’
=> true
irb(main):005:0> require ‘open-uri’
=> true
irb(main):006:0> open(‘https://www.google.com/’).read
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
:
:
“`

### brew – ruby 2.0.0p247

事前に brew upgrade で最新版にしています。

“`
% ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
% rbenv version
system (set by /Users/***/.rbenv/version)
“`

“`
% brew list readline
/usr/local/Cellar/readline/6.2.4/include/readline/ (8 files)
/usr/local/Cellar/readline/6.2.4/lib/libhistory.6.2.dylib
/usr/local/Cellar/readline/6.2.4/lib/libreadline.6.2.dylib
/usr/local/Cellar/readline/6.2.4/lib/ (6 other files)
/usr/local/Cellar/readline/6.2.4/share/man/ (2 files)
/usr/local/Cellar/readline/6.2.4/share/readline/ (11 files)
% brew list openssl
/usr/local/Cellar/openssl/1.0.1e/bin/openssl
/usr/local/Cellar/openssl/1.0.1e/bin/c_rehash
/usr/local/Cellar/openssl/1.0.1e/include/openssl/ (75 files)
/usr/local/Cellar/openssl/1.0.1e/lib/libcrypto.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.1e/lib/libssl.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.1e/lib/engines/ (12 files)
/usr/local/Cellar/openssl/1.0.1e/lib/pkgconfig/ (3 files)
/usr/local/Cellar/openssl/1.0.1e/lib/ (4 other files)
/usr/local/Cellar/openssl/1.0.1e/share/man/ (1217 files)
% brew list ruby
/usr/local/Cellar/ruby/2.0.0-p247/bin/testrb
/usr/local/Cellar/ruby/2.0.0-p247/bin/ruby
/usr/local/Cellar/ruby/2.0.0-p247/bin/ri
/usr/local/Cellar/ruby/2.0.0-p247/bin/rdoc
/usr/local/Cellar/ruby/2.0.0-p247/bin/rake
/usr/local/Cellar/ruby/2.0.0-p247/bin/irb
/usr/local/Cellar/ruby/2.0.0-p247/bin/gem
/usr/local/Cellar/ruby/2.0.0-p247/bin/erb
/usr/local/Cellar/ruby/2.0.0-p247/include/ruby-2.0.0/ (25 files)
/usr/local/Cellar/ruby/2.0.0-p247/lib/libruby.2.0.0.dylib
/usr/local/Cellar/ruby/2.0.0-p247/lib/pkgconfig/ruby-2.0.pc
/usr/local/Cellar/ruby/2.0.0-p247/lib/ruby/ (832 files)
/usr/local/Cellar/ruby/2.0.0-p247/lib/ (3 other files)
/usr/local/Cellar/ruby/2.0.0-p247/share/man/ (5 files)
“`

* irb日本語: 文字化け
* openssl: true 証明書エラー

“`
% irb
irb(main):001:0> “あいう”
=> “あいう”
irb(main):002:0> require ‘openssl’
=> true
irb(main):003:0> require ‘zlib’
=> true
irb(main):004:0> require ‘psych’
=> true
irb(main):005:0> require ‘open-uri’
=> true
irb(main):006:0> open(‘https://www.google.com/’).read
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
“`

## Readline (rbenv) の irb 日本語文字化けを直す

インストール上書きで直らないかなと思い、やってみました。

“`
% rbenv install 2.0.0-p247
rbenv: /Users/***/.rbenv/versions/2.0.0-p247 already exists
continue with installation? (y/N) y
Downloading ruby-2.0.0-p247.tar.gz…
“`

動作確認

“`
% irb
irb(main):001:0> “\U+FFE3\U+FFE3\U+FFE3”
=> “”
irb(main):002:0> require ‘openssl’
=> true
“`

こちらにあるとおり、readline の指定だけは必要でした。

> * [rbenv global 2.0.0-p0 – ちなみに](http://sixeight.hatenablog.com/entry/2013/02/26/045553)

“`
% CONFIGURE_OPTS=”–with-readline-dir=`brew –prefix readline` –enable-bundled-libyaml” rbenv install 2.0.0-p247
rbenv: /Users/***/.rbenv/versions/2.0.0-p247 already exists
continue with installation? (y/N) y
Downloading ruby-2.0.0-p247.tar.gz…
“`

あらためて動作確認。

“`
% rbenv versions
* system (set by /Users/***/.rbenv/version)
1.9.3-p448
2.0.0-p247
% rbenv global 2.0.0-p247
% rbenv rehash
% irb
irb(main):001:0> “あいう”
=> “あいう”
irb(main):002:0> require ‘openssl’
=> true
“`

完了。

## OpenSSL 証明書エラーを直す

インストール時に対策している例を見る限り、他の brew Formulae の証明書を拝借するということのようです。

> * [homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応 – Qiita [キータ]](http://qiita.com/hotchpotch/items/12457815d5cee3723b97)

勉強不足なので詳しい方に教わりたいですが、とりあえずエラーが消せるか試してみます。

> * [SSL証明書のKEYファイル・CSRファイル・CRTファイルのチェック方法 – install memo](http://d.hatena.ne.jp/install-memo/20110906/1315291837)

“`
% brew install curl-ca-bundle
==> Downloading https://downloads.sourceforge.net/project/machomebrew/mirror/cur
######################################################################## 100.0%
==> Caveats
To use these certificates with OpenSSL:
export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
==> Summary
/usr/local/Cellar/curl-ca-bundle/1.87: 2 files, 252K, built in 2 seconds
% cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
“`

動作確認をして見たところ、ssl通信ができたようです。

“`
% irb
irb(main):001:0> require ‘openssl’
=> true
irb(main):002:0> require ‘zlib’
=> true
irb(main):003:0> require ‘psych’
=> true
irb(main):004:0> require ‘open-uri’
=> true
irb(main):005:0> open(‘https://www.google.com/’).read
=> “