Erlangランタイムシステムのビルド

この記事は英語の原文を日本語に翻訳したものです。原文: https://blog.stenmans.org/theBeamBook/#AP-BuildingERTS

翻訳元: happi/theBeamBook 7998e22e78417dbe20e5136b9aee862a1ecaa404(コミット 7998e22

本章では、要件に合わせてErlang/OTPを設定・ビルドするさまざまな方法を見ていきます。 例のほとんどはUbuntu Linuxを使って進めます。 別のOSを使っている場合は、ソースコード内のドキュメント(HOWTO/INSTALL.md)や、Web上のINSTALL.htmlに、そのOS向けの詳しい手順が載っています。

ランタイムシステムをビルドする方法は基本的に2通りあります。 autoconf、configure、makeを使う伝統的な方法と、kerlを使う方法です。

まずは伝統的な方法を試すことをお勧めします。 ビルド時に何が起きていて、どの設定を変更できるかをより深く理解できるからです。 そのあとで、日常的な設定とビルドの管理にはkerlを使うようにするとよいでしょう。

最初のビルド

はじめの一歩として、システムをゼロからビルドする手順を順を追って見ていきます。 そのあとで、目的に応じてシステムを設定する方法を見ていきます。

この手順は、最近のUbuntu環境を前提としています。 OS XとWindowsでのビルド方法は、本章の後半で扱います。

前提条件

ソースコードを取得し、展開し、ビルドするには、いくつかのツールが必要です。 もっとも重要なものはHOWTO/INSTALL.mdにまとまっています。

最近のUbuntu環境から始めるのであれば、sed、tar、perlといったツールはすでにインストール済みのはずです。 一方でgit、make、gcc、m4、ncursesなどは、あらためてインストールする必要があるでしょう。

最近のUbuntu環境であれば、次のコマンドで必要なツールの大半を入手できます。

> sudo apt-get install build-essential git autoconf m4 \
>   zlib1g-dev ncurses-dev libssl-dev

wxWidgetsのサポート付きでビルドしたい場合は、wxライブラリも追加でインストールする必要があります。

> sudo apt-get install libwxgtk3.2-dev wx3.2-i18n \
>   wx3.2-examples wx3.2-doc

WXでWebViewをサポートしたい場合は、次もオプションでインストールします。

> sudo apt-get install libwxgtk-webview3.2-1t64

Erlang/OTPのドキュメントもビルドできるようにしたい場合は、もう少しツールが必要です。

> sudo apt-get install xsltproc libxml2-utils

ソースの取得

ソースコードを取得する主な方法は2つあります。 erlang.orgからtarballをダウンロードする方法と、Githubから直接ソースコードをチェックアウトする方法です。

安定版のソースコードを手早くダウンロードしたい場合は、次のようにします。

> cd ~/otp
> wget http://erlang.org/download/otp_src_27.0.tar.gz
> tar -xzf otp_src_27.0.tar.gz
> cd otp_src_27.0

最新の開発版に手軽に追従したい場合や、コミュニティに修正を還元したい場合は、gitでソースコードをチェックアウトします。

> git clone https://github.com/erlang/otp.git
> cd otp

古いバージョンのErlangをビルドする場合は、autoconfの実行が必要になることがあります。

> ./otp_build autoconf

設定とビルド

これでErlangをビルド・インストールする準備が整いました。 システム全体のインストールに影響を与えないように、インストール先のプレフィックスを自分専用のディレクトリに設定するとよいでしょう。

> ./configure --prefix=$HOME/.local
> make
> make install
> export PATH="$HOME/.local/bin:$PATH"

代替のBeamエミュレータビルド

現在、エミュレータのビルドには主に2つのフレーバーがあります。 JITを有効にしたjit(対応プラットフォームではこちらがデフォルト)と、JITを使わないemuです。 smpという名前を見かけることもありますが、これは単に現在のプラットフォームのデフォルトフレーバーを指すエイリアスです。

> make TYPE=emu

あるいはJIT有効フレーバーのデバッグ版としては次のようにします。

> make TYPE=debug

(当然ながら、--disable-jitを指定して設定していたり、プラットフォームがJITに対応していなかったりする場合は、jitフレーバーのビルドを指定しても実際にはビルドされません。)

ビルドタイプを指定することで、計測用の機能を組み込んだ別のバリアントのエミュレータをビルドすることもできます。 実行時にerlang:system_info(build_type)を呼び出すと、いま動いているエミュレータがどのようにビルドされたかがわかります。 標準のビルドはoptと呼ばれます。

代替のエミュレータタイプをビルドするには、TYPE変数を設定します。 これはFLAVOR変数と組み合わせることもできます。

> make
> make TYPE=debug
> make FLAVOR=emu TYPE=lcnt

debugのほかにも、valgrindなど計測機能を組み込んだいくつかのバリアントをビルドできます。 ビルドツリーの外から(ソースコードのトップディレクトリから)これらを直接実行するには、専用の起動スクリプトbin/cerlを使って計測付きエミュレータを起動できます。

> bin/cerl -debug

cerlスクリプトは、たとえばvalgrind計測版エミュレータを実行したときに生成される追加の出力ファイルの扱いも助けてくれます。 詳しくはHOWTO/INSTALL.mdHOWTO/DEVELOPMENT.mdを参照してください。

make installにデフォルトのビルドだけでなくこれらのバリアントビルドも含めたい場合は、組み合わせごとに個別に実行する必要があります。

> make install
> make install TYPE=debug
> make install FLAVOR=emu TYPE=lcnt

こうすることで、ユーザーは-emu_flavorフラグと-emu_typeフラグを使って、実行したいバリアントを選択できるようになります。

> erl -emu_flavor emu -emu_type lcnt

Kerlを使ったビルド

とくに実験用にいくつも異なるビルドを用意しておきたい場合、より手軽にビルドする方法がKerlを使うことです。