備忘録: WSL2 Ubuntuに Nervesの開発環境をセットアップしてみる
5月に WSL2 - Windows Subsystem for Linux 2 が正式リリースされたそうだ。
どの程度使えるモノだろうかと、ちょっと Nervesの開発環境をセットアップしてみることにした。その備忘録
1.前準備
Windows10はアップデート済みで、WSL2のセッティングも終わっているとする。
WSL2にインストールする Linuxディストリビューションはポピュラーな Ubuntuにする。Microsoft Storeを開き、キーワード「WSL」で検索すると、下図のようにバージョン付きとバージョン無しの合わせて3つの Ubuntuが見つかった。バージョン無しの Ubuntuはその時点での最新のバージョンだそうなので、今回はコレを選んでみた - 実体は 20.04 LTSか
WSL2 Ubuntuのターミナルと Windowsのコマンドプロンプト/PowerShellを行き来する作業では、Windows Terminalが便利なのでコレもインストールしておく。
念のために、Ubuntuの WSLバージョンが "2"となっていることを確認しておこう。
…OKだ
PS C:\Users\shozo> wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
2.Nervesのセットアップ
WSL2上では Linux-Ubuntu 20.04が動いているので、Nervesの開発環境のセットアップ手順は Ubuntuのそれとなんら変わらない。違いは、作成した NervesファームウェアをSDカードに書き込む時に Windows版 fwupが必要になることぐらいかな。どうやら WSL2からは SDドライブに直接アクセス出来ないようだ。
以下、Nerves ProjectのHPに掲載されているNerves installationに沿ってセットアップを進める。
2.1.debパッケージのインストール
まず、Erlang/Elixirをビルドする為に必要な debパッケージをインストールする。
sudo apt update -y
sudo apt install build-essential automake autoconf git squashfs-tools ssh-askpass pkg-config curl
sudo apt install libssl-dev libncurses5-dev bc m4 unzip cmake python
Nervesを利用するだけなら上のパッケージのインストールだけで十分。
後述する Erlangのビルドの際中に、「いくつかライブラリが足りないとぞ」とワーニングが出るが、気にする必要はないようだ。
しかし、Nervesとは別に Erlang単体のフル活用も考えているならば、下記のパッケージをインストールしてワーニングを消しておこう。今回は、Erlangで wxWidgetsをちょっと触ってみたかったので、これらのパッケージもインストールした。
sudo apt install openjdk-8-jdk unixodbc-dev libwxgtk3.0-gtk3-dev xsltproc fop libxml2-utils
次にfwupをインストールする。先にも触れた通り、UbuntuとWindowsの両方で行う。
wget https://github.com/fhunleth/fwup/releases/download/v1.8.0/fwup_1.8.0_amd64.deb
sudo apt install ./fwup_1.8.0_amd64.deb
choco install fwup /y
2.2.Erlang/Elixirのビルド
Nervesの開発では、プリ・ビルドされたバイナリ(nerves_system_rpi3など)を使用しているため、Erlang/Elixirのバージョンとの依存関係が発生する。そこで、Erlang/Elixirのバージョンを管理するために asdf version managerが利用されている。
ということで asdfのインストールから始める。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.7.1
echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc # optional
source ~/.bashrc
次に Erlang/Elixirのプラグインを取得し、Erlang/Elixirそれぞれをビルド&インストールする。
先に触れた通り、ODBCやwxWidgetsの debパッケージをインストールしていない場合は、Erlangのビルドでワーニングが出るが気にする必要はないようだ。
注)nerves_system_rpi3 v1.12.0からは Erlang/OTP 23に依存するので、erlang 23.0.2を選択しよう。
asdf plugin-add erlang
asdf plugin-add elixir
asdf install erlang 23.0.2
asdf install elixir 1.10.3-otp-23
asdf global erlang 23.0.2
asdf global elixir 1.10.3-otp-23
最後に、mix回りのセットアップと sshの鍵を作成する。これで Nerves開発環境のセットアップは一通り終わりだ。
mix local.hex
mix local.rebar
mix archive.install hex nerves_bootstrap
ssh-keygen
3.試しにBlinkyをビルドしてみる
さて、WSL2 Ubuntu上の Nerves開発環境がちゃんと使えるか試してみよう。
そうだなぁ、ターゲット・アプリは nerves_examplsの blinkyを使おう。
git clone https://github.com/nerves-project/nerves_examples.git
cd nerves_examples/blinky
export MIX_TARGET=rpi
mix deps.get
mix firmware
ビルドは、依存モジュールやアーカイブのダウンロードを含め、ネイティブな Ubuntu上と変わらずにすんなりと通った。
では、SDカードへの書き込みは?
mix burn
Windows側で、管理者承認のダイアログがポップアップして一瞬ドキッとしたが、すべて「はい」で応えれば「とっとっとっとっとっ」と無事SDカードへの書き込みが出来た。まぁ、難点は SDドライブの名称が、"\.\PhysicalDrive1"と物理ディスク名で表示されるところかな
4.まとめ
WSL2 Ubuntuで Nervesしてみたら、驚いたことにネイティブな Ubuntu上での操作性と殆ど変わらなかった。さらに、VS code & Remote WSL拡張で WSL2に接続すれば、ファイルの編集はもちろんターミナルで mixを叩くこともでき超快適であった。これまで Windows派は Nervesをしたくても蚊帳の外だったが、WSL2で道が拓けたんじゃなかろうかと思う。
感無量
PS. おっと、upload.shによるネットワークファームウェアアップデートは試してなかった(汗)
Author And Source
この問題について(備忘録: WSL2 Ubuntuに Nervesの開発環境をセットアップしてみる), 我々は、より多くの情報をここで見つけました https://qiita.com/ShozF/items/9c4fab87811abea65c62著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .