Posted at

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

More than 3 years have 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().