17
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2022

Day 14

OPTO22 groovEPIC 向けにasdfでErlangとElixirをインストールする方法

Last updated at Posted at 2022-05-29

OPTO22 の groovEPICでErlangとElixirを動作させることに成功しましたので報告します。

追記 20220601: 詳細な手順を記述しました。
追記 20220623: OpenSSLとErlangの最新版に追従しました.
追記 20220708: OpenSSLを最新版に追従しました.
追記 20221102: OpenSSL, Elixir, Erlangを最新版に追従しました.
追記 20221113: Elixirを最新版に追従しました.
追記 20230209: OpenSSL, Elixir, Erlangを最新版に追従しました.
追記 20230330: Erlang/OTP 25.1以降ではOpenSSL3.0系列を用いるように修正しました.
追記 20230612: OpenSSL, Elixir, Erlangを最新版に追従しました.
追記 20230701: Elixir, Erlangを最新版に追従しました.
追記 20230930: Elixir, Erlang, OpenSSL, asdfを最新版に追従しました.
追記 20231022: Elixir, Erlangを最新版に追従しました.
追記 20231026: OpenSSLを最新版に追従しました.
追記 20231127: OpenSSLを最新版に追従しました.
追記 20231221: Erlangを最新版に追従しました.
追記 20231223: Elixirを最新版に追従しました.
追記 20240203: OpenSSLとasdfを最新版に追従しました.

groovEPIC

$ elixir -v
Erlang/OTP 26 [erts-14.2.1] [source] [32-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Elixir 1.16.0 (compiled with Erlang/OTP 26)
$ uname -a
Linux opto-04-88-28 4.1.15-rt18-nxtio-2.1.0+g28bea2e #2 SMP PREEMPT RT Thu Sep 1 18:49:10 PDT 2022 armv7l GNU/Linux

手順

  1. SSH使用のライセンスを申請し,設定します
  2. apt-getncurses-devをインストールします
  3. OpenJDKのjarのシンボリックリンクを/usr/binに作ります
  4. OpenSSLをソースコードからビルドし,インストールします。
  5. 環境変数KERL_CONFIGURE_OPTIONS--with-ssl=(OpenSSLをインストールしたディレクトリ)を指定します。
  6. GitHubからasdfをインストールします
  7. ErlangとElixirのasdfプラグインをインストールします
  8. asdf install erlang (インストールしたいバージョン) とします。最新版の時には asdf install erlang latestとします
  9. asdf install elixir (インストールしたいバージョン) とします。最新版の時には asdf install elixir latestとします
  10. asdf global erlang (インストールしたバージョン) asdf global elixir (インストールしたバージョン)として,ErlangとElixirを選択する

後で詳しい手順を書きます。

1. SSH使用のライセンスを申請し,設定します

詳しくはマニュアルを参照ください。

2. apt-getncurses-devをインストールします

sudo apt-get update
sudo apt-get install ncurses-dev

3. OpenJDKのjarのシンボリックリンクを/usr/binに作ります.なお,インストールされているopenjdkのバージョンの確認をする必要があります.

sudo ln -s /usr/lib/jvm/zulu-openjdk-8.0.332/bin/jar /usr/bin/jar

4. OpenSSLをソースコードからビルドし,インストールします。

たとえば /usr/local/src にソースコードを配置し, /usr/local/opensslにインストールするとします。

Erlang/OTP 25.0系列以前ではOpenSSL 1.1系列が推奨でしたが,OpenSSL 1.1系列は2023年9月にサポート外となったので,Erlang/OTP 25.0系列以前の使用を推奨されません.

Erlang/OTP 25.1系列以降では OpenSSL 3系列が推奨です.

OpenSSL 3系列をインストールする場合(Erlang/OTP 25.1系列以降の推奨)

2024年2月時点での OpenSSL 3系列の最新版はOpenSSL 3.2.1です.ソースコードはhttps://www.openssl.org/source/openssl-3.2.1.tar.gzにあります.

sudo mkdir /usr/local/src
sudo su
cd /usr/local/src
curl -OL https://www.openssl.org/source/openssl-3.2.1.tar.gz
tar xvzf openssl-3.2.1.tar.gz
cd openssl-3.2.1
./config -fPIC shared --prefix=/usr/local/openssl
make
make install_sw
exit

5. 環境変数KERL_CONFIGURE_OPTIONS--with-ssl=(OpenSSLをインストールしたディレクトリ)を指定します。

前述のように設定した場合,次のように設定します

export KERL_CONFIGURE_OPTIONS="--with-ssl=/usr/local/openssl"

6. GitHubからasdfをインストールします

2024年2月時点でのasdfの最新版はv0.14.0です。適宜指定します。

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0

~/.bashrc に下記を追記します。

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

その後,source ~/.bashrcを実行しておきます。

7. ErlangとElixirのasdfプラグインをインストールします

asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git

8. asdf install erlang (インストールしたいバージョン) とします。最新版の時には asdf install erlang latestとします

最新版をインストールする時には次のようにします。

asdf install erlang latest

インストール可能なバージョンを知るには次のようにします。

asdf list-all erlang

例えば26.2.1をインストールするには次のようにします。

asdf install erlang 26.2.1

9. asdf install elixir (インストールしたいバージョン) とします。最新版の時には asdf install elixir latestとします

最新版をインストールする時には次のようにします。

asdf install elixir latest

インストール可能なバージョンを知るには次のようにします。

asdf list-all elixir

例えば1.16.0-otp-26をインストールするには次のようにします。

asdf install elixir 1.16.0-otp-26

10. asdf global erlang (インストールしたバージョン) asdf global elixir (インストールしたバージョン)として,ErlangとElixirを選択する

苦労したところ

groovEPICにインストールされているOpenSSLでは,libcrypto.soがなぜか入っていません。libcrypt.soならあるのですけど。これを指定するようにしてErlangをビルドすると,一見動くかのように見えるのですが,Elixirでmix deps.getすると,OpenSSLを正常にリンクできないエラーで異常終了します。

ソースコードからOpenSSLをビルドすることで,この問題を解決することができました。その代わりOpenSSLのビルドには,Erlangのビルド以上に時間がかかります。

謝辞

本研究成果は北九州産業学術推進機構(FAIS)の旭興産グループ研究支援プログラムの助成をいただき,実施しました。ありがとうございます。

17
3
0

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
  3. You can use dark theme
What you can do with signing up
17
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?