Erlang/OTP ソースコードインストールのススメ

公開:2020/11/23
更新:2020/12/16
2 min読了の目安(約2600字TECH技術記事

この資料は定期的に更新される

概要

Erlang/OTP を GitHub にあるソースコードからビルドして利用する方法についてまとめている。

前提

  • 株式会社時雨堂 の商用製品向けのビルド設定
  • パッケージングに利用する Erlang/OTP は OpenSSL を dynamic link しない
  • OpenSSL 最新版を自前ビルドする
  • GitHub から clone してきてビルドする

Linux

古いカーネルは利用しないほうがいい

  • Ubuntu 20.04 x86_64
    • apt install build-essential libncurses5-dev autoconf
  • Ubuntu 18.04 x86_64
    • apt install build-essential libncurses5-dev autoconf
  • Red Hat Enterprise Linux 8 x86_64
    • dnf install autoconf gcc glibc-devel make ncurses-devel

OpenSSL

curl -LO https://www.openssl.org/source/openssl-1.1.1i.tar.gz
tar xvfz openssl-1.1.1i.tar.gz
cd openssl-1.1.1i
./config --prefix=/opt/openssl/1.1.1i
make -j
make install

Erlang/OTP

git clone https://github.com/erlang/otp
cd otp
git checkout OTP-23.2
./otp_build autoconf
./configure --prefix=/opt/erlang/23.2 \
            --enable-kernel-poll \
            --enable-dirty-schedulers \
            --disable-sctp \
            --disable-dynamic-ssl-lib \
            --disable-sharing-preserving \
            --disable-hipe \
            --disable-native-libs \
            --with-ssl=/opt/openssl/1.1.1i \
            --without-javac \
            --without-odbc
make -j
make install

JIT を有効にする

現時点では master でしか利用できないので、master をビルドする。

  • --jit を有効にしている
  • hipe は master で削除されたので消している
git clone https://github.com/erlang/otp
cd otp
git checkout master
./otp_build autoconf
./configure --prefix=/opt/erlang/master-$(date "+%Y%m%d") \
            --enable-kernel-poll \
            --enable-dirty-schedulers \
            --enable-jit \
            --disable-sharing-preserving \
            --disable-sctp \
            --disable-dynamic-ssl-lib \
            --with-ssl=/opt/openssl/1.1.1i \
            --without-javac \
            --without-odbc
make -j
make install

macOS Big Sur (Apple M1) でビルドする

OpenSSL

パッチを当ててビルドする必要あり

ビルドオプションは Linux と同様。

Erlang/OTP

  • 2020 年 11 月現在 macOS Big Sur では master でしかビルドできない
  • JIT は arm64 にまだ対応していないので外す
git clone https://github.com/erlang/otp
cd otp
git checkout master
./otp_build autoconf
./configure --prefix=/opt/erlang/master-$(date "+%Y%m%d") \
            --enable-kernel-poll \
            --enable-dirty-schedulers \
            --disable-sharing-preserving \
            --disable-sctp \
            --disable-dynamic-ssl-lib \
            --with-ssl=/opt/openssl/1.1.1i \
            --without-javac \
            --without-odbc
make -j
make install