諸事情によりHomebrewが使えない環境のMacにRubyをソースからインストールしようとしたら地味にハマったので、手順を記録しておこうと思います。
環境
- Mac OS X 10.11.6 El Capitan
- Xcode 8.2.1
- Ruby 2.4.1
- OpenSSL 1.1.0e
- readline 7.0
手順
OpenSSLのインストール
ソースをダウンロードして展開
コマンド
$ cd
$ curl https://www.openssl.org/source/openssl-1.1.0e.tar.gz -O
$ tar -zxvf openssl-1.1.0e.tar.gz
$ cd openssl-1.1.0e
設定、ビルド、インストール
コマンド
$ ./config --prefix=$HOME/openssl
$ make
$ make test
$ make install
※prefixは任意
readlineのインストール
ソースをダウンロードして展開
コマンド
$ cd
$ curl http://git.savannah.gnu.org/cgit/readline.git/snapshot/readline-7.0.tar.gz -O
$ tar -zxvf readline-7.0.tar.gz
$ cd readline-7.0
設定、ビルド、インストール
コマンド
$ ./configure --prefix=$HOME/readline
$ make
$ make install
※prefixは任意
Rubyのインストール
ソースをダウンロードして展開
コマンド
$ cd
$ curl https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2 -O
$ tar -jxvf ruby-2.4.1.tar.bz2
$ cd ruby-2.4.1
設定、ビルド、インストール
コマンド
$ ./configure --prefix=$HOME/ruby \
--with-openssl-dir=$HOME/openssl \
--with-readline-dir=$HOME/readline \
LDFLAGS="-L$HOME/openssl/lib -L$HOME/readline/lib" \
CPPFLAGS="-I$HOME/openssl/include -I$HOME/readline/include"
$ make
$ make test
$ make install
※prefixは任意
※--with-openssl-dirなどの各ディレクトリは、前述の手順で指定したprefixに合わせる
パスを追加
コマンド
$ echo export PATH='$HOME/ruby/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
※パスはRubyのprefixに合わせる
動作確認
Rubyのバージョン確認
コマンド
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin15]
gemの更新(※1)
コマンド
$ gem update --system
gemのバージョン確認
コマンド
$ gem -v
2.6.12
irbでの日本語入力確認(※2)
コマンド
$ irb
irb(main):001:0> 'てすと'
=> "てすと"
注釈
※1
Rubyのインストール時にOpenSSLを正しく指定していないと、gem update --system
実行時に以下のエラーになります。
コマンド
$ gem update --system
ERROR: While executing gem ... (Gem::Exception)
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
# 以下略
暫定策としては、gemのsourceをhttpサーバに変更する方法もあります。
コマンド
$ gem source --add http://rubygems.org/
$ gem source --remove https://rubygems.org/
※2
Rubyのインストール時にreadlineを正しく指定していないと、日本語の入力ができません。
コマンド
$ irb
irb(main):001:0> '\U+FFE3\U+FFA6\U+FFE3\U+FFE3\U+FFA8' # <= 'てすと'と入力できない
=> ""
以上です。