LoginSignup
26
4

Ubuntu 20.04でElixirの最短手順(Nx+EXLA/Phoenix+PostgreSQLのインストール、Elixir最新版へのアップグレード、WSL2対応のオマケ付き)

Last updated at Posted at 2022-11-18

この記事は、Elixir Advent Calendar 2022 10の2日目です

昨日は、 @RyoWakabayashi さんで「Elixir Explorer 0.4.0 で追加された Query を使うと、データ分析が更に捗る」でした


ElixirImp/fukuoka.ex/kokura.exLiveView JPpiacere です、ご覧いただいてありがとございます :bow:

Erlang/OTP 25がaptでインストール可能なUbuntu 20.04で、Elixir/Phoenixを導入し、DB(PostgreSQL)とNxも使えるにするための最短手順をメモします

:ocean::ocean::ocean: Elixir Advent Calendar 総勢13本、熱い冬ヽ(=´▽`=)ノ :ocean::ocean::ocean:

例年に無い盛り上がりを見せています … 応援/購読よろしくお願いします :bow:

https://qiita.com/advent-calendar/2022/elixir
image.png

本コラムの検証環境

本コラムは、以下環境で検証しています

環境①:実機

  • 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インストール時に下記エラーが出るので、ご注意ください
image.png

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インストールが止まることがあります)
image.png

その際は、下記コマンドを実行してから、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 を見て、下記のようなページが表示されるのを確認してください
image.png

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作成され、下記のような見た目に変わります
image.png

Livebookの最新版をインストールする

Phoenix最新版が入っていれば、Livebook最新版もインストールできます … 下記コラムをご覧ください

Nxをインストール/テスト

Nxを動かすためのElixir PJを作ります

mix new basic
cd basic

mix.exsのdepsにnxを追記します

mix.exs

  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を追記します

mix.exs

  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が使えて便利です
image.png

p.s.このコラムが、面白かったり、役に立ったら…

image.pngimage.png にて、どうぞ応援よろしくお願いします:bow:

主催/運営しているElixirコミュニティ紹介

1. ElixirImp : A place to LOVE the buds in Elixir (Elixir実装の芽を愛でる場)
2. fukuoka.ex : Fukuoka local Elixir Community (福岡Elixirコミュニティ)
3. kokura.ex : Kokura local Elixir Community (小倉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


:ocean::ocean::ocean: Elixir生誕10周年を一緒にお祝いしませんか? :ocean::ocean::ocean:

12/21(水)19:30~21:00、「過去LTいただいた方々への感謝祭」をテーマに、リモート忘年会を開催

「Elixir生誕10周年」に対するコメントや、今/昔のElixirの進化を聞けるチャンスですので、お見逃し無くッ

※カンパイスタートの会ですので、お酒 or ソフトドリンク、お菓子 or ご飯をお忘れなく

※Zoom接続できれば、本人でも、2Dアバター/3D(VR)アバターでも、お好きな姿でご参加OK


明日も私で「Elixir生誕10周年祭■第1弾:Elixir/Phoenixで会員制サイト構築は瞬殺」です

26
4
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
26
4