OSX 10.10 に kerl で Erlang 17.5 をインストールし, crypto:start/0 を成功させる

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

概要

Mac を新調し kerl で Erlang をインストールしたところ, R16B03-1 では crtpto:start/0 の評価に成功するが, 17.5 では評価に失敗する.

crypto:start/0 の評価に失敗すると, Elixir のインストールどころか rebar の実行にも支障が出る. そこで, 正しいインストール方法を備忘録として残す.

環境

  • OSX 10.10.3
  • Xcode 6.3
  • OpenSSL 1.0.2a
  • Erlang 17.5

Command Line Tools for Xcode をインストール

gcc などの開発用コマンドを有効にするため, Command Line Tools for Xcode をインストールする.

  1. Xcode を App Store からインストールし, 起動
  2. Xcode メニューから Open Developer Tool, More Developer Tools を選択
  3. ブラウザに Apple Developer のログイン画面が表示された後, ログイン
  4. Downloads for Apple Developers の画面が表示された後, Command Line Tools(OS X 10.10) for Xcode 6.3 を選択し, ダウンロード
  5. ダウンロード後, インストール

gcc のバージョンを確認しておく.

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)

OpenSSL をインストール

OSX 10.10.3 に標準で含まれている OpenSSL は 0.9.8zd であるため, Homebrew や MacPorts で 1.0.2a をインストールする.

MacPorts でインストールする例は次の通り.

$ sudo port install openssl

Homebrew でインストールする例は次の通り.

$ sudo brew install openssl

OpenSSL のバージョンを確認しておく.

$ openssl version
OpenSSL 1.0.2a 19 Mar 2015

kerl をインストール

Erlang の複数の異なるコンパイルオプションやバージョンを試すため, kerl をインストールする.

$ cd /path/to/bin
$ curl -O https://raw.githubusercontent.com/spawngrid/kerl/master/kerl
$ chmod a+x ./kerl

リリースされている Erlang の一覧を確認しておく.

$ kerl list releases
17.0-rc1 17.0-rc2 17.0 17.1 17.3 17.4 17.5 R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A R13B R13B01 R13B02-1 R13B02 R13B03 R13B04 R14A R14B R14B01 R14B02 R14B03 R14B04 R14B_erts-5.8.1.1 R15B R15B01 R15B02 R15B02_with_MSVCR100_installer_fix R15B03-1 R15B03 R16A_RELEASE_CANDIDATE R16B R16B01 R16B02 R16B03-1 R16B03
Run "/Users/masahito.ikuta/bin/kerl update releases" to update this list from erlang.org

出力されている通り, kerl update releases で一覧を更新可能.

Erlang コンパイル時の configure のオプションを指定する.

~/.kerlrc
KERL_CONFIGURE_OPTIONS="--enable-kernel-poll --enable-threads --enable-dynamic-ssl-lib --enable-smp-support --enable-darwin-64bit --disable-hipe --disable-native-libs --disable-sctp --without-javac --without-odbc --without-wx --with-ssl=/opt/local"

指定オプションの意図

OSX 10.10 関連

  • --enable-kernel-poll
  • --enable-threads
  • --enable-smp-support
  • --enable-darwin-64bit
  • --disable-hipe

OpenSSL 関連

ここを誤ると, crypto:start/0 が失敗する.

  • --enable-dynamic-ssl-lib
  • --with-ssl=/opt/local

Homebrew で OpenSSL をインストールした場合, --with-ssl=/usr/local/opt/openssl とする.

不要な機能

ここは, 好みや用途に合わせる.

  • --disable-native-libs
  • --disable-sctp
  • --without-javac
  • --without-odbc
  • --without-wx

Erlang をインストール

ここまでの手順で, 全ての準備が整ったため, Erlang 17.5 をインストールする.

kerl list releases に含まれる 17.5 をビルドする.

$ kerl build 17.5 17.5

kerl list builds に含まれる 17.5 をインストールする.

$ mkdir -p /path/to/erlang
$ kerl kerl install 17.5 /path/to/erlang/17.5

インストールされたか確認する.

$ kerl list installations
17.5 /path/to/erlang/17.5

crypto.so がリンクしているライブラリを確認する.

$ otool -L /path/to/erlang/17.5/lib/crypto-3.5/priv/lib/crypto.so
/path/to/erlang/17.5/lib/crypto-3.5/priv/lib/crypto.so:
        /opt/local/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

ここで, OSX 10.10 に標準で含まれている /usr/lib/libcrypto.0.9.8.dylib がリンクされていると crypto:start/0 は失敗する.

最後に, application:start/1 経由で crypto:start/0 を確認する.

$ . /path/to/erlang/17.5/activate
$ erl +Ktrue
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:true]

Eshell V6.4  (abort with ^G)
1> application:start(crypto).
ok
2> q().