search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

macOS / Homebrew での exenv / erlenv を用いた Elixir / Erlang のソースコードインストール

ZACKYこと山崎進です。

ついでなんで macOS での Elixir / Erlang のソースコードインストールの手順も押さえておきたいと思います。exenv / erlenv を使うことで,バージョンを切り替えられるようにしました。

Linux (Ubuntu 16.04) での exenv / erlenv を用いた Elixir / Erlang のソースコードインストールはこちら

前準備

Homebrew をインストールします。Homebrew の新規インストールには最新版の1つ前以上のmacOSが必要です。2018年10月3日現在だと macOS Mojave (バージョン 10.14) もしくは High Sierra (バージョン10.13)である必要があります。それ以前のバージョンの場合には OS のアップデートをしてください。

次に Xcode をインストールします。その後,コマンドラインツールをインストールします。これらのインストール方法は割愛します。

Homebrew のインストールの仕方はこちらを参照ください。

すでに Homebrew をインストールしていた人は下記のコマンドを実行してください。

$ brew update

Homebrew をインストールした後,どのソフトウェアをインストールしたらいいかは,残念ながら完全には覚えていません。Erlang のインストールのためには少なくとも下記をインストールする必要があります。

$ brew install openssl

このとき表示されるメッセージに注意してください。 初めてインストールしていた場合は次の brew upgrade で注意する必要はありません。

次のように「すでにインストールされている」と表示される時には,次の手順で brew upgrade した時のメッセージに気をつけてください。

次のコマンドを実行します。

brew upgrade

このときに次のように表示された時に気をつけましょう。(@ありのものとなしのものが複数表示されることがあります。)

==> Upgrading openssl@...
==> Downloading ...
==> Pouring openssl@...
==> Caveats
A CA file has been bootstrapped ,,,,

...

If you need to have openssl@... 
  echo 'export PATH="/usr/local/opt/openssl@.../bin:$PATH"' >> ~/.bash_profile

For compilers to find openssl@... you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl@.../lib"
  export CPPFILAGS="-I/usr/local/opt/openssl@.../include"

For pkg-config to find openssl@... you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/openssl@.../lib/pkgconfig"

==> Summary
...

実際には ... には何かメッセージが表示されており,とくに @... には @1.1 のようにバージョン番号が入ります。

このときには,OpenSSL の古いバージョンと新しいバージョンが混在しています。以下の OpenSSL の設定のところで @ で指定された新しいバージョンを指定した方が賢明です。

次のコマンドを実行して OpenSSL の設定をします。1行目のコマンドはあってもなくてもいいですが, .bashrc の設定を見直す時に役立つコメントになります

注意点としては '>>' を間違えて '>' としないようにしてください。.bash_profile という重要な設定ファイルが上書きされてしまいます。心配な人は後で紹介するバックアップの方法を使ってください。

$ echo '# for OpenSSL' >> ~/.bash_profile
$ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

@ で指定された新しいバージョンを設定する場合は次のようにします。

$ echo '# for OpenSSL' >> ~/.bash_profile
$ echo 'export PATH="/usr/local/opt/openssl@(バージョン番号)/bin:$PATH"' >> ~/.bash_profile

なお(バージョン番号)には 'brew upgrade' で表示されたバージョンを指定します。

.bash_profile のバックアップの取り方は下記の通りです。書き換え前に実行しましょう。

$ cp ~/.bash_profile ~/.bash_profile.bak

新しいターミナルを起動して確かめましょう。エラーなく表示されませんか?

次に新しいターミナルで次のコマンドを実行しましょう。

$ which openssl

次のように表示されればOKです。

/usr/local/opt/openssl/bin/openssl

@付きで指定した場合は次のように表示されればOKです。

/usr/local/opt/openssl@(バージョン番号)/bin/openssl

もしターミナルを起動した時にエラーが表示されるか,which openssl で意図した通りの結果が得られなかった時には,.bash_profile を戻してやり直してください。

戻し方ですが,バックアップを取っていた場合には次のようにします。

$ cp ~/.bash_profile.bak ~/.bash_profile

以後,新しいターミナルで実行しましょう。

もし古いターミナルで以後のコマンドを実行したい場合には次のように実行します。

$ source ~/.bash_profile

以下では .bash_profile の変更の仕方については詳述しません。

erlenv の取得と設定

次に,下記コマンドを入力して,erlenv を取得します。

$ git clone https://github.com/talentdeficit/erlenv.git $HOME/.erlenv

次に下記のように .bash_profile に追記します。

$ echo '# for erlenv' >> ~/.bash_profile
$ echo 'export PATH="$HOME/.erlenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(erlenv init -)"' >> ~/.bash_profile

次に設定を反映させましょう。

$ source ~/.bash_profile

確認のため次のコマンドを実行してください。

$ which erlenv

次のように表示されればOKです。

/Users/(あなたのアカウント名)/.erlenv/bin/erlenv

Erlang のビルドとインストール

Erlang はソースコードからインストールします。まずErlang のダウンロードページを見て,ダウンロードすべきバージョンを見定めます。2018年10月3日現在の最新版はOTP21.1です。あえて古いバージョンをダウンロードしても構いません。

ダウンロードは次のように行います。今回はOTP21.1を対象として説明します。もし他のバージョンにしたい場合は,コマンド中の 21.1 を適宜変更してください。

$ curl -O http://erlang.org/download/otp_src_21.1.tar.gz

それなりに時間がかかります。

ダウンロードが終わったら次のコマンドで展開します。

$ tar xzf otp_src_21.1.tar.gz

展開が終わったらソースコードのディレクトリに移動します。

$ cd otp_src_21.1

次にErlangのビルドオプションを設定するのですが,実に多彩なオプションがあります。下記コマンドでオプションを概観することができます。(が,初心者の人は見なくていいです)

$ ./configure --help

21.1 の場合の私のおすすめ設定は下記の通りです。間違わないように入力してくださいね。

$ ./configure --prefix=$HOME/.erlenv/releases/21.1 --enable-smp-support --enable-threads --enable-darwin-64bit --enable-kernel-poll --enable-hipe --without-javac --enable-dirty-schedulers --enable-sharing-preserving --enable-lock-counter --disable-sctp --with-ssl=/usr/local/opt/openssl --without-obdc 

--with-ssl=/usr/local/opt/openssl のところは,もし @(バージョン番号) つきだった場合には,--with-ssl="/usr/local/opt/openssl@(バージョン番号)" というように変えてください。二重引用符に注意。

性能上,特に重要なオプションは --enable-smp-support--enable-threads --enable-hipe --enable-dirty-schedulers です。これらを忘れると Elixir や Erlang がせっかくの高いパフォーマンスを十分に発揮できなくなるので,注意してください。(いくつかのオプションは,古いバージョンだと存在しないかもしれません)

また --enable-darwin-64bit は macOS 固有の設定です。

configure コマンドを実行するとまあまあ時間がかかります。

無事終了したら,次のように入力します。

$ touch lib/wx/SKIP lib/odbc/SKIP

これらは,wx と odbc を無効にするという意味です。touchコマンド自体は,現在の時刻でファイルを作成するというものです。

次にいよいよビルドです。次のコマンドを入力して,かなり待ちます。

$ make

エラーがなく無事終わったら,次のコマンドでインストールしましょう。

$ make install

これで,Erlang がインストールできたのですが,あとは今インストールしたバージョンを有効にする必要があります。次の2つのコマンドを続けて入力します。

$ erlenv global 21.1
$ erlenv rehash

次のコマンドを入力してバージョン等を確認しましょう。

$ erl

次のように表示されます。

Erlang/OTP 21 [erts-10.1] [source] [64-bit] [smp:36:36] [ds:36:36:10] [async-threads:1] [hipe] [sharing-preserving]
Eshell V10.1 (abort with ^G)
1> 
  • 21 はOTPのバージョンの整数部分です。
  • もし64ビットマシン/OSだった時には[64-bit]になるはずですが,もし[32-bit]になるようならば設定を見直す必要があります。
  • [smp:36:36] のような表示は,マルチコアでの実行を有効にします。数字は論理コア数です。ハイパースレッディングが有効ならばコア数の倍,無効ならばコア数と同じになります。この表示が出ていない場合は,configure コマンドの実行で --enable-smp-support を忘れています。
  • [hipe]という文字がありますか? HiPE は High Performance Erlang の略で,ネイティブコードにコンパイルして実行します。これが表示されない場合は,configure コマンドの実行で --enable-hipe を忘れています。

コマンドプロンプトが Eshell に取られているので,終了します。終了するには,コントロールキー+C (^C) を押して,a を押します。

最後に cd コマンドでホームディレクトリに戻っておきましょう。

$ cd

exenv のインストール

erlenv と同じ要領で次のようなコマンドを順に入力して行きます。注意点は erlenv と同様ですので,コマンドのみ羅列します。

$ git clone https://github.com/mururu/exenv.git $HOME/.exenv
$ git clone https://github.com/mururu/elixir-build.git $HOME/.exenv/plugins/elixir-build
$ echo '# for exenv' >> ~/.bash_profile
$ echo 'export PATH="$HOME/.exenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(exenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

次のコマンドで動作を確かめます。

$ which exenv

次のように表示されればOKです。

/home/(あなたのアカウント)/.exenv/bin/exenv

Elixir のインストール

Elixir のインストールは Erlang に比べたらはるかに楽です。

まず,インストール可能なバージョンを下記のコマンドで確認します。

$ exenv install -list

2018年10月3日現在の最新版は 1.7.3 です。以下,1.7.3 の場合について説明します。他のバージョンを入れる場合にはバージョン番号を適宜修正してください。

インストールは次のように行います。

$ exenv install 1.7.3
$ exenv global 1.7.3

成功したら次のように確認します。

$ elixir -v

次のような表示が出ればOKです。

$ elixir -v
Erlang/OTP 21 [erts-10.1] [source] [64-bit] [smp:36:36] [ds:36:36:10] [async-threads:1] [hipe] [sharing-preserving]

Elixir 1.7.3 (compiled with Erlang/OTP 21)
$

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?