[Ruby] RUBY_CONFIGURE_OPTS, readline, openssl
インストール時に指定されている例が他見される RUBY_CONFIGURE_OPTS, readline, openssl について調べてみました。
きっかけ
irb (pry) で日本語が文字化けてしまったため、もろもろ確認をしました。
インストール
以前に試したとおり、現在、インストールという意味では、特に RUBY_CONFIGURE_OPTS を指定する必要ななさそう。
インストール時の brew Formulae のバージョンによって、各ブログにあるように様々な症状がでているよう。
利用時の問題
上記の手順でインストールしたところ、下記を確認しました。
- irb 上で日本語が文字化ける
- SSL利用時に証明書エラーが出る(OAuth等でつかうことになる?)
本稿では、上記の解決を目指します。
Readline, OpenSSL とは何か
そもそもReadline, OpenSSL は、Ruby のライブラリでこんな役割をしてるよう。
インストール時にも、このライブラリが使われるのかな。
動作確認
brew でインストールした Ruby と、rbenv でインストールしたものをと比較しながら確認します。
なお、Readline, OpenSSL の動作確認方法については、こちらを参考にさせて頂きました。
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 の指定だけは必要でした。
% 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 の証明書を拝借するということのようです。
勉強不足なので詳しい方に教わりたいですが、とりあえずエラーが消せるか試してみます。
% 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
=> "<!doctype html><html itemscope=\"itemscope\" itemtype=\"http://schema.org/WebPage
そのままだとなんとなく気持ち悪いので、とりあえず消しておきます。
% rm /usr/local/etc/openssl/cert.pem
remove /usr/local/etc/openssl/cert.pem? y
% brew uninstall curl-ca-bundle
Uninstalling /usr/local/Cellar/curl-ca-bundle/1.87...
結論
irb で日本語を使うならば、下記でインストール。
CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --enable-bundled-libyaml" rbenv install 2.0.0-p247