🤩

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

2 min read

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

概要

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
    • RHEL8 で JIT 版をビルドするには GCC Toolset 10 Toolchain が必要になる。

OpenSSL

Erlang/OTP 24.1 はまだ OpenSSL 3.0.0 に対応していません

curl -LO https://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar xvfz openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config --prefix=/opt/openssl/1.1.1l
make -j
make install_sw
export LD_LIBRARY_PATH=/opt/openssl/1.1.1l/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
ldconfig

Erlang/OTP

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

arm64 で JIT を利用する

arm64 で JIT を利用したい場合は master を利用してビルドする必要があります。

git clone https://github.com/erlang/otp
cd otp
./configure --prefix=/opt/erlang/master-$(date "+%Y%m%d") \
            --enable-kernel-poll \
            --enable-dirty-schedulers \
            --enable-jit \
            --disable-sctp \
            --disable-dynamic-ssl-lib \
            --disable-sharing-preserving \
            --disable-native-libs \
            --with-ssl=/opt/openssl/1.1.1l \
            --without-javac \
            --without-odbc
make -j
make install

あとは動かしてみてください。

$ sysctl -n machdep.cpu.brand_string
Apple M1
$ /opt/erlang/arm64-jit/bin/erl
Erlang/OTP 25 [DEVELOPMENT] [erts-12.0] [source-6dbab60b39] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

M1 で JIT が有効になっています。

メモ

  • AWS Graviton2 ではビルドできず
  • Ampere Altra ではビルドできず

Discussion

ログインするとコメントできます