Help us understand the problem. What is going on with this article?

Linuxでkerlを使用して複数バーションのErlang/OTPを導入する

More than 3 years have passed since last update.

GNU/LinuxでのErlang/OTPの導入手段はいくつかあるが、ここでは kerl を使う方法を採用する。以下のような利点がある。

  1. 簡単に導入できるbuildinstall コマンドを実行するだけ)
  2. 最新版のErlang/OTPが使える (erlang.orgで配布されているソースコードからビルドするのでリリース直後から使える)
  3. 複数バージョンのErlang/OTPを導入・管理できる

特に3はErlangで複数のシステムを開発・保守する際に重宝する。Erlangの異なるバージョンだけでなく、同じバージョンでビルドオプションを変えたもの(HiPEのあり/なし、最小構成のアプリケーションのみなど)をいくつでも導入して、切り替えながら使える。

準備

Erlangのビルドに必要なパッケージを導入する。

Fedora、RHEL、CentOSの場合

$ sudo yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf
$ sudo yum install curl git

Debian、Ubuntuの場合

$ sudo apt-get install build-essential libncurses5-dev openssl libssl-dev
$ sudo apt-get install curl git-core

Arch Linuxの場合

$ sudo pacman -S gcc glibc make ncurses openssh autoconf
$ sudo pacman -S curl git

kerlスクリプトの導入

kerlスクリプトをGitHubからダウンロードし、実行できるようにする。

$ curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
$ chmod a+x kerl

スクリプトは PATH の通った場所に置く。

例: ~/bin に置く場合

$ mkdir -p ~/bin
$ mv kerl ~/bin/
$ echo "export PATH=$PATH:~/bin" >> ~/.bashrc
$ source ~/.bashrc

デフォルトのErlang configオプションの指定

Erlangのビルドに使うデフォルトのconfigオプションを ~/.kerlrc に書いておく。

$ echo 'KERL_CONFIGURE_OPTIONS="--disable-hipe --enable-smp-support --enable-threads --enable-kernel-poll" ' > ~/.kerlrc

Erlang/OTPの導入

Erlangをソースコードからビルドして導入しよう。まず、導入可能なErlangバージョンの一覧を表示する。

$ kerl list releases
Getting the available releases from erlang.org...
R10B-0 R10B-10 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 R15B R15B01 R15B02 R15B03-1 R15B03
Run "kerl update releases" to update this list from erlang.org

なお、この一覧は自動では更新されない。新しいバージョンのErlangがリリースされたら、以下のコマンドで更新する。

$ kerl update releases

ソースコードからビルド

お好みのバージョンをビルドする。 R15B03-1 が導入したいバージョン、 r15b03-1 がビルドにつける任意の名前となる。

$ kerl build R15B03-1 r15b03-1
Downloading otp_src_R15B03-1.tar.gz to .kerl/archives
(中略)
Getting the checksum file from erlang.org...
(中略)
Verifying archive checksum...
Checksum verified (eccd1e6dda6132993555e088005019f2)
Extracting source code
Building Erlang/OTP R15B03-1 (r15b03-1), please wait...
Erlang/OTP R15B03-1 (r15b03-1) has been successfully built

ビルドオプションを変える時は、別の名前(例 r15b03-1_hipe )を付ければ、他のビルドと共存できる。

$ KERL_CONFIGURE_OPTIONS="--enable-hipe" kerl build R15B03-1 r15b03-1_hipe

ビルドの一覧を表示する。

$ kerl list builds
R15B03-1,r15b03-1
R15B03-1,r15b03-1_hipe

インストール

ビルドできたらインストールする。 ~/erlang/r15b03-1 はインストール先のディレクトリ。

$ kerl install r15b03-1 ~/erlang/r15b03-1
Installing Erlang/OTP R15B03-1 (r15b03-1) in ~/erlang...
You can activate this installation running the following command:
. ~/erlang/r15b03-1/activate
Later on, you can leave the installation typing:
kerl_deactivate

インストール済みのビルドを一覧表示する。

$ kerl list installations
r15b03-1 ~/erlang/r15b03-1

アクティベート(有効化)

インストール済みビルドの1つをアクティベート(有効化)する。アクティベートでは $PATH を変更することで指定したインストール済みビルドの bin/ 配下にあるコマンドが使われるようにしているので、アクティベートを実行したシェルセッション内でのみ有効となる。シェルを終了したり kerl_deactivate を実行すると無効化される。

$ . ~/erlang/r15b03-1/activate

$ erl
Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:8:8] [async-threads:0] [kernel-poll:false]

Eshell V5.9.3.1  (abort with ^G)
1> 

試しに別のビルドに切り替えてみる。

$ kerl install r15b03-1_hipe ~/erlang/r15b03-1_hipe
$ . ~/erlang/r15b03-1_hipe/activate
$ erl
Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.3.1  (abort with ^G)
1> 

[hipe] と表示されたことから、HiPEが有効になっていることがわかる。

その他の便利コマンド

いまアクティブになっているビルドを表示する。

$ kerl active
The current active installation is:
~/erlang/r15b03-1

コマンドでkerlの状態のオーバービューを表示する。

$ kerl status
Available builds:
R15B03-1,r15b03-1
R15B03-1,r15b03-1_hipe
----------
Available installations:
r15b03-1 ~/erlang/r15b03-1
----------
The current active installation is:
~/erlang/r15b03-1

もし使わなくなったビルドがあれば削除しておこう。

$ kerl delete build r15b03-1
$ kerl delete installation ~/erlang/r15b03-1

sshやrsyncでアクセス可能な他のマシンにインストールすることもできる。

$ kerl deploy anotherhost /path/to/install/dir

参考にしたページ

tatsuya6502
Erlang/OTPやRustで分散DBを開発してます。プログラミングは中学生の頃から、30年ほど独学でやってきてます。大学はアメリカ東海岸にある美大でした。現在は上海在住
https://blog.rust-jp.rs/tatsuya6502/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした