概要
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 をインストールする.
- Xcode を App Store からインストールし, 起動
- Xcode メニューから Open Developer Tool, More Developer Tools を選択
- ブラウザに Apple Developer のログイン画面が表示された後, ログイン
- Downloads for Apple Developers の画面が表示された後, Command Line Tools(OS X 10.10) for Xcode 6.3 を選択し, ダウンロード
- ダウンロード後, インストール
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 のオプションを指定する.
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().