[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
=> “