この記事は、Elixir Advent Calendar 2022 10の2日目です
昨日は、 @RyoWakabayashi さんで「Elixir Explorer 0.4.0 で追加された Query を使うと、データ分析が更に捗る」でした
ElixirImp/fukuoka.ex/kokura.exとLiveView JPの piacere です、ご覧いただいてありがとございます
Erlang/OTP 25がaptでインストール可能なUbuntu 20.04で、Elixir/Phoenixを導入し、DB(PostgreSQL)とNxも使えるにするための最短手順をメモします
Elixir Advent Calendar 総勢13本、熱い冬ヽ(=´▽`=)ノ
例年に無い盛り上がりを見せています … 応援/購読よろしくお願いします
https://qiita.com/advent-calendar/2022/elixir
本コラムの検証環境
本コラムは、以下環境で検証しています
環境①:実機
- Ubuntu 20.04
環境②:WSL2上
- Windows 10+WSL2+Ubuntu 20.04
(Windowsのみ)WSL2のインストール前(要再起動)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
(Windowsのみ)WSL2とUbuntu 20.04のインストール
下記をダウンロードして、WSL2をインストールします
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ
なお、ココのインストールを忘れがちで、入れないとUbuntuインストール時に下記エラーが出るので、ご注意ください
WSLのバージョンを「2」に設定します
wsl --set-default-version 2
下記で「入手」ボタンをクリックして、Ubuntu 20.04をインストールします
Ubuntu 20.04 LTS(Windows Store)
Ubuntuが立ち上がったら、下記のようにアカウント作成を行い、Ubuntuのインストールを完了させてください
Enter new UNIX username: hoge
Enter new UNIX password: *********
Retype new UNIX password: *********
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
hoge@XXXXXXXXXXXXXXX:~$
なお、再度Ubuntuを入れ直したときは、下記のようなエラーが出ることがあります(もしくは、Windows Storeで「サーバー側に問題が発生しました」というエラーが出て、Ubuntuインストールが止まることがあります)
その際は、下記コマンドを実行してから、Ubuntuを開き直せば回復します
wslconfig /u Ubuntu-20.04
wsreset
ElixirとPhoenixのインストール
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt update -y
sudo apt install erlang -y
sudo apt install inotify-tools -y
sudo apt install erlang-xmerl -y
sudo apt install erlang-os-mon -y
sudo apt install elixir -y
mix archive.install hex phx_new 1.6.15
下記でElixirとPhoenixが入ったことを確認してください
$ elixir --version
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]
Elixir 1.13.4 (compiled with Erlang/OTP 25)
$ mix archive
* hex-2.0.0
* phx_new-1.6.15
Archives installed at: /home/hogehoge/.mix/archives
PostgreSQL(DB)のインストール
sudo apt update
sudo apt install postgresql -y
sudo service postgresql start
sudo su - postgres -c psql
postgres=# alter role postgres with password 'postgres';
postgres=# \q
なお、PostgreSQLの「認証キー認証」を使う場合は、下記を先に実行してください
sudo apt install curl ca-certificates gnupg -y
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
DB付きPhoenix PJを動かす
mix phx.new basic
cd basic
mix ecto.create
iex -S mix phx.server
ブラウザで、http://localhost:4000
を見て、下記のようなページが表示されるのを確認してください
Elixirを最新版(2023年9月現在は1.15.5)に上げる
PreCompiledパッケージを使えば、Elixirの最新版もカンタンに入ります
PreCompiledパッケージのURLは、下記で拾えます
https://elixir-lang.org/install.html#precompiled-package
sudo apt install unzip -y
sudo apt remove elixir -y
wget https://github.com/elixir-lang/elixir/releases/download/v1.15.5/elixir-otp-25.zip
unzip elixir-otp-25.zip -d elixir-1.15.5
sudo cp -a elixir-1.15.5/bin/ /usr/local/
sudo cp -a elixir-1.15.5/lib/ /usr/local/
Ubuntuターミナルを立ち上げ直し、下記で最新版に上がったことを確認してください
elixir --version
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]
Elixir 1.14.3 (compiled with Erlang/OTP 25)
Phoenixを最新版に上げる
Elixir最新版が入っていれば、Phoenixも最新版が入れられるので、下記でインストールしてください
mix archive.install hex phx_new
インストール後にPhoenix PJを mix phx.new
で作る(手順は上記)と、Phoenix 1.7でPJ作成され、下記のような見た目に変わります
Livebookの最新版をインストールする
Phoenix最新版が入っていれば、Livebook最新版もインストールできます … 下記コラムをご覧ください
Nxをインストール/テスト
Nxを動かすためのElixir PJを作ります
mix new basic
cd basic
mix.exsのdepsにnxを追記します
…
defp deps do
[
{:nx, "~> 0.4"},
…
下記でNxをインストールして、iexで実行すると、Nxによる行列処理が上手く動きました
mix deps.get
iex -S mix
iex> t = Nx.tensor([[1, 2], [3, 4]])
#Nx.Tensor<
s64[2][2]
[
[1, 2],
[3, 4]
]
>
iex> Nx.divide(Nx.exp(t), Nx.sum(Nx.exp(t)))
#Nx.Tensor<
f32[2][2]
[
[0.032058604061603546, 0.08714432269334793],
[0.23688282072544098, 0.6439142227172852]
]
>
EXLAでNx実行をスピードアップ
EXLAをビルドできるよう、build-essentialをインストールします
sudo apt install build-essential -y
mix.exsのdepsにexlaを追記します
…
defp deps do
[
{:nx, "~> 0.4"},
{:exla, "~> 0.4"},
…
下記でEXLAをインストールして、iexで実行すると、先ほどと同じNx行列処理が、EXLA.Backendで動いていることが確認できました
mix deps.get
iex -S mix
iex> Nx.global_default_backend(EXLA.Backend)
iex> t = Nx.tensor([[1, 2], [3, 4]])
#Nx.Tensor<
s64[2][2]
EXLA.Backend<host:0, 0.1397726458.238157846.32579>
[
[1, 2],
[3, 4]
]
>
iex> Nx.divide(Nx.exp(t), Nx.sum(Nx.exp(t)))
#Nx.Tensor<
f32[2][2]
EXLA.Backend<host:0, 0.1397726458.238157840.32275>
[
[0.032058604061603546, 0.08714432269334793],
[0.23688282072544098, 0.6439142227172852]
]
>
(Windowsのみ)Ubuntuを次回起動する際
以下コマンドでWSL2のUbuntu 20.04が起動でき、Elixir/Phoenixが利用できます
ubuntu2004
なお、VisualStudio Codeをお使いの方であれば、「Remote - WSL」というエクステンションを入れておくと、ターミナルで、上記でセットアップしたWSL2が使えて便利です
p.s.このコラムが、面白かったり、役に立ったら…
主催/運営しているElixirコミュニティ紹介
4. LiveView JP : A place to mob-program in LiveView, LiveBook+Nx+Axon, and elixir-desktop
5. Neos.ex : A place to connecting Elixir and NeosVR to create a new world
Elixir生誕10周年を一緒にお祝いしませんか?
12/21(水)19:30~21:00、「過去LTいただいた方々への感謝祭」をテーマに、リモート忘年会を開催
「Elixir生誕10周年」に対するコメントや、今/昔のElixirの進化を聞けるチャンスですので、お見逃し無くッ
※カンパイスタートの会ですので、お酒 or ソフトドリンク、お菓子 or ご飯をお忘れなく
※Zoom接続できれば、本人でも、2Dアバター/3D(VR)アバターでも、お好きな姿でご参加OK