この記事は#NervesJP Advent Calendar 2019の1日目です.れっつじょいなす!
はじめに
どうもこんにちわ
Nervesとは,関数型言語ElixirにてIoTシステム開発を実現するフレームワークです.
『ElixirでIoT』の世界に革新をもたらします!
詳細な解説はIoT ALGYANで実施したWebinarのこちらの資料もご笑覧ください.
さぁ皆さん!今すぐにでもNervesやりたくなってきたでしょ!??
Nervesを使うには,まずは環境構築だっ!となるわけですが,幾つか注意点(a.k.a ハマりどころ)があったりします.2019年には全国各地でNerves Trainingを開催しましたが,その折に皆さんにも準備いただいた際に多くのTIPSが溜まってきました.
ということで本記事は,これらのTIPSの集約も兼ねて,Nervesの開発環境の準備方法を紹介します.
なお本記事は,#NervesJP Advent Calendar 2019の記念すべき1日目!の記事でもあります.
Nervesの開発は日進月歩でアップデートが続いています.なるべく最新版に合うように本記事を随時更新していますが,公式のInstallation Docsページも参照してください.
OS環境ごとの準備
まずは開発母艦となるPCを用意します.
要件としてはroot権限,ssh接続機能,USBポート1口,microSD/SDポート(別付でもOK)が必要です.
使用されるOS環境ごとに異なる準備内容を示します.
なおNervesの開発チーム的にはmacOSを基本としているようです.Linuxの場合はどのDistributionでもいけるそうですが,Ubuntuが推奨らしいです.
なおWindowsは(ry
→ この状況,なんとかしたいですねぇ,,, WSL2でどうにかなるでしょうか?
→ どうにかなりました!コチラどうぞ!!
また,クロスコンパイラを使う兼ね合いから,ホストPCはx64のものを用意してください.arm64は対応していません.
つまりラズパイでラズパイ開発しようぜっ!ってのは(ry
→ Nerves co-authorのJustin曰く,できるよっ!と言っていました.Raspberry Pi 3でexperimentalに整えているようです.機会を伺って詳細を調べてみます.
macOSの場合
筆者はmacOS Catalina (10.14.6)で試行しています.
まずはXcode command-line toolsをインストールします.
Catalinaの場合,Erlang 22.2系との兼ね合いで注意が必要なことがあります.こちらの記事にまとめてありますので,合わせてご一読ください. → 22.3系がサポートされるようになったので大丈夫です!
$ xcode-select --install
パッケージやライブラリのインストールにはHomeBrewを使います.下記で導入してください.
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Nervesのためのパッケージを入れていきます.
$ brew install squashfs coreutils xz pkg-config
Nervesファームウェア書き込みのツールであるfwupをインストールします.
$ brew install fwup
[NT] 後述しますが,Erlangビルドにasdf
を使うことを推奨しています.
Erlangのソースビルド中でOpenJDK等のJava Compilerを使用します(これが無くてもjinterface : No Java compiler found
の警告が表示されるだけでビルドは可能です)
これを導入されていない方は,手っ取り早くbrewで下記にてインストールします.
$ brew cask install adoptopenjdk
さらにErlangビルドのための様々なパッケージを入れていきます.各種オプションや追加モジュールのためなので,Erlangの標準機能のインストールだけであれば無くても構いません.
$ brew install automake autoconf openssl \
libyaml readline libtool wxmac glfw3 glew unixodbc fop
Linuxの場合
Ubuntuの例となります.他Distributionは適宜で読み替えてください.
Nervesのためのパッケージを入れていきます.
$ sudo apt install build-essential automake autoconf \
git squashfs-tools ssh-askpass pkg-config curl
[NT] Erlangビルドのためのasdf
やScenicのために,様々なパッケージを入れていきます.
(Ubuntu18環境ではcurl
がデフォルトで入っていないそうです. @piacerex さんに多謝!
(Ubuntu16環境では,libglew2.0がないのでlibglew1.13
で代用して問題ありません.@bleach31さんに多謝!)
$ sudo apt install git 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
Ubuntu18環境でのErlang on asdfビルド時に出力される * jinterface : No Java compiler found
および * odbc : ODBC library - link check failed
のそれぞれの警告メッセージを回避するには, default-jdk
および unixodbc-dev
もインストールする必要があります(警告なので無くてもErlangビルドは完了できます)
$ sudo apt install default-jdk unixodbc-dev
Ubuntu18環境では下記もインストールしておくと,asdfを用いたErlang導入時に,javaのインタフェース部分の作成とドキュメント生成に失敗しないようになるようです(@ykominamiさんに多謝!
$ sudo apt install fop xsltproc libxml2-utils
Nervesファームウェア書き込みのツールであるfwupをインストールします.
apt pkgとしては登録されていませんが,GitHubにて各distribution用のパッケージが配布されていますので,それを使ってインストールします.
ArchベースのLinuxの場合
ArchLinuxなどの場合は,下記のコマンドでビルド環境を用意できるそうです.
筆者は手持ちの環境が無いので,お試しされた方がいましたらお知らせください!!
$ yay -S base-devel ncurses5-compat-libs openssh-askpass git squashfs-tools curl
$ yay -S wxgtk2 fop jdk-openjdk unzip
Windowsの場合
ゴメンナサイWindowsはWSL込みで非推奨なのです,,,
SDカード書込みやデバイス接続など,いろいろ乗り越えるべき問題があります.
国内では@nabinnoさんがWSL対応にトライされていますので,成果を待ちたいところです^^;
ということでここはおとなしく,VirtualBoxでUbuntu 18.04をインストールしてくださいm(_ _)m
WindowsユーザでもWSL 2でNerves開発ができるようになりました!!(2020年5月時点)
WSL 2でUbuntu 18.04を用意いただき,Windowsネイティブと両方でfwup
をインストールしてやります.
あるいは,Docker&VSCode連携でモダンに開発環境を整えることもできます!
@matsujirushi さんの素敵な記事を参照!
Erlang & Elixirのインストール
いよいよErlangとElixirをインストールします.
Nerves公式にはasdf
でのツールバージョン管理を推奨しています.
asdfでの管理方法についてはKochi.exな@nishiuchikazumaのこちらの記事も参考になります.
TIPS
ShozFさんのご指摘を反映して,.asdf
の設定先を.bashrc
に変更しました!Ubuntuでは.bash_profileが無視されます.
Anaconda3がインストールされているとerlangビルドがうまくいかないそうです.# clangのパスは/usr/bin/clang
であること必要がありますが,Anacond3のclangが呼び出されてしまうためです.
Anaconda3をパスから外してからビルドを実行してください(@ykominamiさんに多謝!
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.0
# 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' >> ~/.bashrc
$ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc # optional
$ source ~/.bashrc
$ asdf plugin-add erlang
$ asdf plugin-add elixir
# Note #1:
# If on Debian or Ubuntu, you'll want to install wx before running the next
# line: sudo apt install libwxgtk3.0-dev
# for arch based systems run the next line:
# yay -S wxgtk2 fop jdk-openjdk unzip
# Note #2:
# It's possible to use different Erlang and Elixir versions with Nerves. The
# latest official Nerves systems are compatible with the versions below. In
# general, differences in patch releases are harmless. Nerves detects
# configurations that might not work at compile time.
$ asdf install erlang 23.1.4
$ asdf install elixir 1.11.2-otp-23
$ asdf global erlang 23.1.4
$ asdf global elixir 1.12.2-otp-23
きちんとインストールされているかは,下記で確認できます.
$ iex
Erlang/OTP 23 [erts-11.0.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
Interactive Elixir (1.10.4) - 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の参加談)をご参照ください.多謝!!
先日の「Nervesトレーニング in福岡」
— myasu🍊8/12 C96[月-南リ08b] (@etcinitd) 2019年7月9日
Erlangのコンパイルが出来ず、やむを得ずパッケージで入れ直したり、VirtualBoxからNervesデバイスが見え無かったり・・・等、当日ハマったところの処置についてまとめてみました。https://t.co/4yAmS7xMqB
Hexライブラリ・アーカイブのインストール
Elixirのライブラリやアーカイブをインストールしていきます.
すでにAlchemistな方も,最新版にアップデートするために下記コマンドを実行しておいてください.
hex, rebar
HexはElixir/Erlangのパッケージ管理ツール,rebarはErlangのビルドツールです.
$ mix local.hex
$ mix local.rebar
とうとうNerves開発環境をインストールします!!
Nerves archive
$ mix archive.install hex nerves_bootstrap
SSH公開鍵の作成
$ ls ~/.ssh
$ ls ~/.ssh/id_rsa
としてNo such file or directory
と言われる場合は,下記を実行しておきましょう.
$ mkdir ~/.ssh
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
構築完了!
正しく環境構築できていれば,下記のようになっているはずです.
(それぞれのアップデートに応じてバージョン番号は異なるかもしれません)
$ ls ~/.asdf/installs/elixir/1.10.4-otp-23/.mix/*
/Users/takase/.asdf/installs/elixir/1.10.4-otp-23/.mix/rebar*
/Users/takase/.asdf/installs/elixir/1.10.4-otp-23/.mix/rebar3*
/Users/takase/.asdf/installs/elixir/1.10.4-otp-23/.mix/archives:
hex-0.20.5/ nerves_bootstrap-1.9.0/
おわりに
本記事ではNervesの開発環境の準備方法を解説しました.
はてさてじゃあ使ってみよう!!は,また後日に執筆したいと思います^^;
主な編集履歴
- 2020/11/30:
- Elixir 1.11.2-otp-23に対応!
- 2020/10/13:
- Nerves 1.7.0 Released! に対応.
- この欄が長くなってきたので,末尾に移動^^;
- 2020/09/25:
- Nerves 1.6.5 Released! に対応.特にLinuxのArch based systemについて追記しました.
- 2020/07/10:
- 本家のInstallation.mdの更新に合わせてErlang/OTP 23にアップデート
- @matsujirushi さんのWSL2+Docker+VSCodeな記事をリンク!
-
picocom
等のシリアル通信を使うシチュエーションが無くなってきた(ssh通信が安定してきた!)ので,インストール手順から削除.
- 2020/05/06:
- 朗報!WindowsユーザでもWSL 2でNerves開発がネイティブにできるようになりました!!
- 2020/05/05:
- Linux向けのErlangインストール時の警告表示
* odbc : ODBC library - link check failed
の抑止のためにsudo apt install unixodbc-dev
を追加
- Linux向けのErlangインストール時の警告表示
- 2020/04/28:
- 公式のNerves Installationにに合わせてErlang/ OTP 22.3.2にアップデート
- 2020/04/20:
- Nerves 1.6 Released!に対応
- Nerves 1.6.1に合わせてElixir 1.10.2 / Erlang/OTP 22.2.8にアップデート
- 2020/02/23:
- Ubuntu18の環境準備に
default-jdk
を追加
- Ubuntu18の環境準備に
- 2020/02/04:
- macOSの試行バージョン(Mojave)を明記
- macOS向けのErlangインストール時の警告表示をなるべく除去できるようにした
-
jinterface : No Java compiler found
のためにbrew cask install adoptopenjdk
を追加 -
* odbc : ODBC library - header check failed
のためにbrew install odbc
を追加 -
fop is missing
のためにbrew install fop
を追加
-
- Catalinaでの注意点と @torifukukaiou さんへの記事リンクを追加
- 2019/12/01:
- 2019/09/03:
- Anaconda3導入時のTIPS追加(@ykominamiさんに多謝!)
- Ubuntu16でのTIPS追加(@ykominamiさんと@bleach31さんに多謝!)
- 2019/08/27: Nerves 1.5.1のリリースに合わせてElixir 1.9.1 / OTP 22にアップデート
- 2019/07/19:
asdf
の設定先を.bashrcに変更(ShozFさんに多謝! - 2019/07/18: Nerves 1.5.0 Released!に対応
- Elixir 1.9.0 / OTP 22にサポートしています!
- 2019/07/10: fukuoka.exにmyasuさんのTIPS共有なブログ記事を掲載(深々と多謝!
- 2019/06/16:
asdf
がうまく動かずソースビルドな時の方法を紹介(@u3pakaさんに多謝!