Arch LinuxでNervesのファームウエアを公式ソースコードからビルドしてみようと思います。
Elixir(えりくさ)言語
Elixirは耐障害性、高い並列性能で長年実績のあるErlangの上に実装されたプログラミング言語で、世界中のメッセージアプリ、チャットアプリ等でも使用されており、その性能に改めて注目が集まっていると聞きます。Elixirを使ってサーバーの費用を $2 Million/年 節約できたという話もあります。
Nerves(なあぶす)フレームワーク
Nerves(なあぶす)という IoT フレームワークを使うと、Elixirの強力な性能をラズパイ等の手のひらサイズのコンピュータの上で活用し、堅牢な IoT システムの構築が比較的簡単にできてしまいます。すごいです!
Nerves について詳しくは@takasehideki さんの「Slideshare:Elixir で IoT!?ナウでヤングで cool な Nerves フレームワーク」がわかりやすいです。
Nervesにはいろんな概念や構成要素が含まれているので、「Nervesとはなにか」を考えるときに混乱することがあるかと思います。
nerves パッケージ
Nervesへの入り口であり、コアツールとドキュメントをNervesユーザーに提供。
Buildroot
Nervesが内部で使用する、クロスコンパイルで組み込み Linux システムを生成するためのツール。
Nervesがナイスな形で隠蔽してくれているので、通常はNervesユーザーが直接Buildrootを触ることはありません。
nerves_system_br パッケージ
組み込み Erlang、Elixir、Lisp Flavored Erlang (LFE) プロジェクト用の開発プラットフォーム。Buildrootを使用してNervesを構築するための共通ロジックを提供します。通常は直接触ることは無いです。
nerves_system_xxx パッケージ
nerves_system_brパッケージによって提供される共通ロジックにNerves Targetデバイス専用の設定を加えてできたアダプターのようなもの。別の言葉でいうとNervesチームが提供してくれているおすすめの設定です。カスタマイズすることも可能です。
nerves_system_xxx
のxxx
の部分はお手元のデバイスに対応するNerves Targetに読み替えてください。Nerves公式サポートのNerves Target以外にもコミュニティによって制作されたカスタムシステムも多数あります。
例として挙げると、Raspberry Pi 5に対応するNerves Targetはrpi5
になります。
環境
- ホスト OS: Arch Linux x86_64
- ホストマシン: MacBookAir6,2 1.0
やること
Arch Linuxのマシンが手元にあるという前提です。
- asdf をインストール
- Erlang をインストール
- Elixir をインストール
- Nervesをソースからビルドするのに必要なパッケージをインストール
- Nerves Systems Builderをダウンロード
- Nerves Systems Builderの README に従う
asdf Erlang Elixir をインストール
もちろん他のLinuxディストリビューションでもできます!
比較的簡単にインストールできるので、Arch Linux以外をお使いの方もぜひとも挑戦してみてください。
万一、戸惑うことがあれば、お気軽にコミュニティに顔を出してみてください。みんなで助け合いながら楽しく一歩ずつ前へ進んでます。
Nerves をファームウエアを開発するのに最低限必要なパッケージをインストール
Nervesドキュメントに紹介されているインストール方法は、Arch Linux公式の pacman パッケージマネージャを使用していません。Arch User Repository (AUR) を利用するための非公式ヘルパーコマンド yayを使ってます。ひょっとしたらドキュメントを執筆当時は公式のArch リポジトリに存在しなかったパッケージがあったのかもしれません。
2023 年 12 月現在では pacman パッケージマネージャでインストールできるのでそれで行きます。
sudo pacman -S --needed \
base-devel \
ncurses \
lxqt-openssh-askpass \
git \
squashfs-tools \
curl
Nerves Systems Builder を利用するのに必要なパッケージをインストール
Nerves Systems Builderという Nerves コアチームが使っているツールが公開されています。
一つ問題は、Nerves コアチームが Debian 系 OS しか使っていないため、他の OS で必要なパッケージの検証はされていません。
Arch Linuxで使えるパッケージをひとつひとつ探していくしかありません。
結果、以下のパッケージで同じことをArch Linuxでもできることがわかりました。
sudo pacman -S --needed \
base-devel \
bc \
cmake \
cpio \
curl \
cvs \
gawk \
git \
jq \
mercurial \
ncurses \
lxqt-openssh-askpass \
python \
python-aiohttp \
python-ijson \
python-nose2 \
python-pexpect \
python-pip \
python-requests \
rsync \
squashfs-tools \
subversion \
unzip \
wget
Nerves Systems Builder をダウンロード
git clone git@github.com:nerves-project/nerves_systems.git
cd nerves_systems
Nerves Systems Builder の README に従う
あとは Nerves Systems Builder の README にある手順に従うだけで、比較的簡単にファームウエアをソースファイルからビルドできます。
比較的簡単とはいえ、まだNervesをやったことのない方が、いきなりファームウエアを公式ソースコードからビルドするというのは大変だと思います。
まずはNerves Livebookをお試しになればと思います。楽しいですよ。
Nerves Livebook
ビルド済みNerves Livebookファームウェアを使用すると、何も構築せずに実際のハードウェアで Nerves プロジェクトを試すことができます。 数分以内に、Raspberry Pi や BeagleBone で Nerves を実行できるようになります。 Livebook でコードを実行し、ブラウザーで快適に Nerves チュートリアルを進めることができます。
有志の方々が Nerves Livebook のセットアップ方法ついてのビデオを制作してくださっています。ありがとうございます。
Nerves Livebook の中に ネットワーク関連のノートブックが含まれており、ブラウザ上で Wi-Fi の設定ができてしまいます。
さいごに
これでArch Linuxをお使いの方もElixirやNervesを楽しめます。