とある環境でelixir_aleをインストールしようとしたらはまって解決した自分メモ

とある環境で`elixir_ale`をインストールしようとしたらエラーが出て使えなかったので解決した自分メモです。


# ざっくりまとめると
- elixir_aleがさくっとインストールできんかった
- elixir_aleをインストールするとelixir_makeもついでにインストールする
- 最新のelixir_ale1.2.0はElixir1.6以上が必要なので古いバージョンを指定してインストールする必要がある
- elixir_makeするにはmake, gcc, erlang-devが必要だった（初回のみ）


# 環境

| OS                              | Erlang | Elixir |
|---------------------------------|--------|--------|
| Debian Linux 8.9                | 20.1   | 1.5.0  |


# やったこと…

`mix`使ってプロジェクト作ってGPIO操作できるようにしようとした時に`elixir_ale`が使えるということまでは知っていたので使ってみることに。

```shell
% mix new gpio_test
% cd gpio_test
% mix test
```

ここまでは問題なし。[elixir_aleの公式ドキュメント](https://github.com/fhunleth/elixir_ale)どおりmix.exsにelixir_aleを記載。

```elixir:mix.exs
def deps do
  [{:elixir_ale, "~> 1.0"}]
end
```

んで、コマンドを実行。

```shell
% mix deps.get
% iex -S mix

Erlang/OTP 20 [erts-9.1] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

==> elixir_make
Compiling 1 file (.ex)
Generated elixir_make app
==> elixir_ale
warning: the dependency :elixir_ale requires Elixir "~> 1.6" but you are running on v1.5.0
could not compile dependency :elixir_ale, "mix compile" failed. You can recompile this dependency with "mix deps.compile elixir_ale", update it with "mix deps.update elixir_ale" or clean it with "mix deps.clean elixir_ale"
==> gpio_test
** (Mix) "make" not found in the path. If you have set the MAKE environment variable,
please make sure it is correct.
```

elixir_aleの最新バージョン1.2.0ではElixir1.6以上が必要とのことなので、elixir_aleをアンインストール後、バージョンを指定する記述をmix.exsに記載。

「(Mix) "make" not found」と言っているので、手元の環境で必要なソフトをインストールして再度確認。

```shell
mix deps.getでインストールされたパッケージをアンインストール
% mix deps.clean --all
```

```elixir:mix.exs
# elixir_aleのバージョンを指定
def deps do
  [{:elixir_ale, "== 1.0.0"}]
end
```

```shell
手元の環境で必要なソフトをインストール
% sudo apt-get install gcc make erlang-dev
```

ドキドキ…。

```shell
% mix deps.get
% iex -S mix

Erlang/OTP 20 [erts-9.1] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [kernel-poll:false]

==> elixir_ale
cc -c -I"/usr/lib/erlang/usr/include" -O2 -Wall -Wextra -Wno-unused-parameter -o src/gpio_port.o src/gpio_port.c
cc -c -I"/usr/lib/erlang/usr/include" -O2 -Wall -Wextra -Wno-unused-parameter -o src/i2c_port.o src/i2c_port.c
cc -c -I"/usr/lib/erlang/usr/include" -O2 -Wall -Wextra -Wno-unused-parameter -o src/ale_main.o src/ale_main.c
cc -c -I"/usr/lib/erlang/usr/include" -O2 -Wall -Wextra -Wno-unused-parameter -o src/erlcmd.o src/erlcmd.c
cc -c -I"/usr/lib/erlang/usr/include" -O2 -Wall -Wextra -Wno-unused-parameter -o src/spi_port.o src/spi_port.c
cc src/gpio_port.o src/i2c_port.o src/ale_main.o src/erlcmd.o src/spi_port.o -L"/usr/lib/erlang/usr/lib" -lei  -o priv/ale
Compiling 4 files (.ex)
Generated elixir_ale app
==> gpio_test
Compiling 1 file (.ex)
Generated gpio_test app
Interactive Elixir (1.5.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
```

ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!
これでGPIOのテストができる環境が整いました。


# まとめ
- Debian Linux 8.9な環境だとElixir1.5.0が利用できるが、elixir_ale最新の1.2.0は利用できず1.0.0を使う必要がある
- mix.exsのdepsに`{:elixir_ale, "== 1.0.0"}`と書くとバージョン指定してdeps.getできるようになる
  - `mix deps.get`したパッケージを削除する場合は`mix deps.clean`すればOK:hugging:
- elixir_aleはalixir_makeを利用していてmake, gcc, erlang-devのインストールが必要（初回のみ）