要約
- Macに標準で入っているOpenSSLはバージョンが古くて新しいErlangに対応していない
- OpenSSLはHomebrewで1系、1.1系を入れることが可能
- Erlangで使うOpenSSLのパスは、configureでオプション指定すれば変更可能
- ローカルマシンでは複数のErlangのバージョンを使いたいので、anyenv, erlenvを使って管理することにした
MacのOpenSSL
今までOTP19をローカル環境で使っていたんだけど、OTP20でのアプリケーションの動作検証をすることになった。
が、自分のMacに最初から入っているOpenSSLのバージョンが、OTP20.1に対応していなかった。
*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
crypto : No usable OpenSSL found
odbc : ODBC library - header check failed
ssh : No usable OpenSSL found
ssl : No usable OpenSSL found
$ /usr/bin/openssl version
OpenSSL 0.9.8zh 14 Jan 2016
Homebrewを使うと1系、1.1系のOpenSSLを入れることができるので、 Homebrewで入れたOpenSSLの場所を、Erlangをビルドするときに指定する。
HomebrewでOpenSSLをインストール
$ brew install openssl
$ brew info openssl
For compilers to find this software you may need to set:
LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
For pkg-config to find this software you may need to set:
PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig
これで1系のopensslが /usr/local/opt/openssl
以下に入る。
新しいバージョンのErlangをインストールする際は、後述するconfigureのオプションにこのパスを指定する。
anyenvをインストール
複数のErlangのバージョンはanyenv, erlenvで管理することにした。
まずはanyenvをインストールする。
https://github.com/riywo/anyenv
anyenvでerlenvをインストールする。
anyenv install erlenv
erlenvで任意のErlangをインストール
https://github.com/talentdeficit/erlenv
erlenvにはリリースのビルド機能はないので、自分で$HOME/.anyenv/envs/erlenv/releases/
以下に任意のバージョンでビルドしてインストールする必要がある。
HomebrewでインストールしたOpenSSLライブラリを指定してビルドする
前述したOpenSSLをconfigureにオプション指定してビルドする。
configure.inを見るとOpenSSLの場所を指定するオプションがある。(※ 以下のリンクは20.1のもの。他のバージョンだとconfigureのオプションが違うかもしれないので要確認)
https://github.com/erlang/otp/blob/OTP-20.1/configure.in#L262-L265
$ git clone https://github.com/erlang/otp.git
$ cd otp
$ git fetch --all --tags
# タグ等で任意のバージョンにチェックアウト
$ git checkout tags/OTP-20.1
$ ./otp_build autoconf
$ ./configure --prefix=$HOME/.anyenv/envs/erlenv/releases/OTP-20.1 --with-ssl=/usr/local/opt/openssl
$ make
$ make install
※ opensslのディレクトリは以下のコマンドで確認可能
$ openssl version -d
※:このとき、odbc, fopという依存ソフトウェアがインストールされていないときは、homebrewでインストールする。
*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
odbc : ODBC library - header check failed
*********************************************************************
*********************************************************************
********************** DOCUMENTATION INFORMATION ******************
*********************************************************************
documentation :
fop is missing.
Using fakefop to generate placeholder PDF files.
*********************************************************************
$ brew install unixodbc fop
erlコマンドを使う
$ erlenv global OTP-20.1
$ erlenv rehash
$ which erl
/Users/user/.anyenv/envs/erlenv/shims/erl