ElixirでIoT#4.1:Nerves開発環境の準備(2019年6月版)


はじめに

どうもこんにちわ

Erlang & Elixir Fest 2019にてこんな発表をしたモノです

thumbnail

Nervesとは,関数型言語ElixirにてIoTシステム開発を実現するフレームワークです.

『ElxirでIoT』の世界に革新をもたらします!解説は#2.1記事もご笑覧ください.

さぁ皆さん!今すぐにでもNervesやりたくなってきたでしょ!??

ということで本記事では,Nervesの開発環境の準備方法を解説します.

Nerves開発は日進月歩でアップデートが続いていますので,公式のInstallationのページも参照してください.

なお本記事は,末尾でご紹介するNerves Trainingの準備を兼ねています.Training独自に必要な項目は [NT] の注釈を付けておきます.


OS環境ごとの準備

まずは開発母艦となるPCを用意します.

要件としてはroot実行権限,ssh接続機能,USBポート1口が必要です.

使用されるOS環境ごとに異なる準備内容を示します.

なおNervesの開発チーム的にはmacOSを基本としているようです.Linuxの場合はどのDistributionでもいけるそうですが,Ubuntuが推奨らしいです.

なおWindowsは(ry

また,クロスコンパイラを使う兼ね合いから,ホストPCはx64のものを用意してください.arm64は対応していません.

つまりラズパイでラズパイ開発しようぜっ!ってのは(ry


macOSの場合

まずはXcodeをApp Storeからインストールします.話しはそれからです.

そしてターミナルを立ち上げて,Xcodeのcommand-line toolsをインストールしていきます.

$ xcode-select --install

パッケージやライブラリのインストールにはHomeBrewを使います.下記で導入してください.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Nervesのためのパッケージを入れていきます.

$ brew install squashfs coreutils xz

Nervesファームウェア書き込みのツールであるfwupをインストールします.

$ brew install fwup

[NT] 後述しますが,Erlangビルドにasdfを使うことを推奨しています.そのための様々なパッケージを入れていきます.

$ brew install automake autoconf openssl libyaml readline libtool wxmac glfw3 glew pkg-config

シリアル通信のためにpicocomも入れておくとよいです.screenでも構いません.

$ brew install picocom


Linuxの場合

Ubuntuの例となります.他Distributionは適宜で読み替えてください.

まずはシリアル通信のためのpicocomをインストールします.やっぱscreenでも構いません.

$ sudo apt install picocom

Nervesのためのパッケージを入れていきます.

$ sudo apt install build-essential automake autoconf git squashfs-tools ssh-askpass

[NT] ErlangビルドのためのasdfやScenicのために,様々なパッケージを入れていきます.

(Ubuntu18環境ではcurlがデフォルトで入っていないそうです. @piacerex さんに多謝!

$ sudo apt install git curl libssl-dev libncurses5-dev \

bc m4 make unzip cmake python autoconf \
libwxgtk3.0-dev libgl1-mesa-dev libglu1-mesa-dev \
libglfw3 libglfw3-dev libglew2.0 libglew-dev

Nervesファームウェア書き込みのツールであるfwupをインストールします.

apt pkgとしては登録されていませんが,GitHubにて各distribution用のパッケージが配布されていますので,それを使ってインストールします.


Windowsの場合

ゴメンナサイWindowsはWSL込みで非推奨なのです,,,

SDカード書込みやデバイス接続など,いろいろ乗り越えるべき問題があります.

国内では@nabinnoさんがWSL対応にトライされていますので,成果を待ちたいところです^^;

ということでここはおとなしく,VirtualBoxでUbuntu 18.04をインストールしてくださいm(_ _)m


Erlang & Elixirのインストール

いよいよErlangとElixirをインストールします.

現在のNervesの推奨バージョンは,Erlang OTPは21系,Elixirは1.8.1となります.Erlang OTPの最新版22系はNervesではまだサポートされていません.ご注意を!!

Nerves公式にはasdfでのツールバージョン管理を推奨しています.

asdfでの管理方法についてはKochi.exな@nishiuchikazumaこちらの記事も参考になります.

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

# The following steps are for bash. If you’re using something else, do the
# equivalent for your shell.
$ echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile
$ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile # optional
$ source ~/.bash_profile

$ asdf plugin-add erlang
$ asdf plugin-add elixir

# If on Debian or Ubuntu, you'll want to install wx before running the next
# line: sudo apt install libwxgtk3.0-dev
$ asdf install erlang 21.3.6 # Any OTP 21 version should work. This takes a while.
$ asdf install elixir 1.8.1-otp-21
$ asdf global erlang 21.3.6
$ asdf global elixir 1.8.1-otp-21

きちんとインストールされているかは,下記で確認できます.

$ iex

Erlang/OTP 21 [erts-10.3.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

Interactive Elixir (1.8.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :observer.start
:ok


うまくいかないときは?

arm64環境だとasdfがうまく動かないことがあるようです(詳細未調査)

その場合はソースビルドになります.@u3pakaさんのこちらの記事が参考になります!(ただしこのままやるとOTP 22になってしまうので注意してください)

→ただしarm64だとそもそもNervesのホスト環境として対応していないのでご注意を!

07/10追記:

asdfではソースビルドをすることになりますが,特にWindowsのVirtualBox環境ではメモリ不足でコケることがあるそうです.そうなるとパッケージビルドの方法が良いのですが,普通にやるとOTP 22系がインストールされています.

パッケージからElixir 1.8.1 / OTP 21をインストールする方法についてはmyasuさんがまとめてくださった下記の記事(Nerves Training in fukuoka.exの参加談)をご参照ください.多謝!!


Hexライブラリ・アーカイブのインストール

Elixirのライブラリやアーカイブをインストールしていきます.

Nerves Trainingに参加予定ですでにAlchemistな方も,最新版にアップデートするために下記コマンドを実行しておいてください.


hex, rebar

$ mix local.hex

$ mix local.rebar


Nerves archive

$ mix archive.install hex nerves_bootstrap


Phoenix [NT]

ご存知Phoenix,Nerves Trainingでも大活躍します!

$ mix archive.install hex phx_new

すでにPhoenixインストール済みの方は,下記のみでアップデート可能です.

$ mix local.phx


Scenic [NT]

ScenicはUIフレームワークです.これもTrainingで大活躍(予定)!!

$ mix archive.install hex scenic_new


TIPS: SSH公開鍵の作成

$ ls ~/.ssh

$ ls ~/.ssh/id_rsa

としてNo such file or directoryと言われる場合は,下記を実行しておきましょう.

$ mkdir ~/.ssh

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa


おわりに

本記事ではNervesの開発環境の準備方法を解説しました.

はてさてじゃあ使ってみよう!!は,また後日に執筆したいと思います^^;


お知らせ:Nerves Training開催中!

いや今すぐ使いたいんじゃー!という方へ!!

Nervesの使い方を実際に学べるNerves Trainingを全国各地で開催中です!!

 |> Elixir.Circutisによる外部デバイスの制御

 |> NervesによるIoT開発の基礎

 |> NervesHubによるデプロイ

 |> Scenic連携によるUI操作

 |> Phoenix Channels連携によるゲーム開発

今決まっているスケジュールと案内はコチラ

 |> kochi.ex @ 05/28 [終了]

 |> kyoto.ex @ 06/16 [終了]

 |> fukuoka.ex @ 07/06 [終了]

 |> tokyo.ex/beam-lang.tokyo @ 07/21

本記事はNerves Trainingの準備を兼ねていたりしますが,本当に実際に面白いところはTrainingでのお楽しみですよ^^;

ぜひおらが町でも!チャンスを逃したからもう1回!!という要望ありましたら,Twitter@takasehidekiまでお知らせください〜