3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてNerves(14) Zenohd を入れてみる

3
Posted at

これは #NervesJP Advent Calendar 2025 の23日目です。

はじめに

このところ Pub/Sub のプラットフォーム Zenoh に注目しております。Zenoh の Elixir API である Zenohex の超入門も書いてみました1 。これは Nerves で使う場合も難しくなくそのまま導入できます。

上でご紹介した導入の方法は Zenoh を client というモードで使うもので、全部のノードが同一LAN内にある場合にはこれだけで使えます。これが間にNAPTが入ってるWiFiルータ越しにとか、インターネットを使って広域分散でとか、ちょっとネットワークが複雑になるともうひとひねり必要になります。これに対応するためのモードには peer モードとか router モードがあって、これを使うには zenohd という deamon (unix process) を用意します。

zenohd は作るのもいごかすのもそんなに難しくないです。何かと Elixir するときには Nerves でいごかしてしまう自分に取っては Nerves で zenohd がいごけば何かと楽ちんです。そこで今回 Nerves にも組み込んでみたのでご紹介します…
…と記事を書こうとしたんですが、いごかねぇ。どうにもいごかねぇ。τゎぃぇ、記事を落としたままにするのも忍びないので、目次の残骸は残しておいて、冬休みの宿題にします。

zenohd を使わない場合

Zenoh client として Nerves を使う場合は zenohd がなくても良いです。
mix.exs ファイルに依存関係を書いて mix deps.get して、あとは Elixir プログラミングをお楽しみください。

mix.exs
defp deps do
   [
+     {:zenohex, "~> 0.7.1"}
     # {:dep_from_hexpm, "~> 0.3.0"},
     # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
   ]
end

zenohd を使わずにネットワークを複雑にする

ネットワークが複雑になる場合、ルータを越えたりするための技がいくつかあります。その一つに zenohd を使うという手があります。ただし zenohd は全部のノードに存在する必要はないです。のであえて Nerves に実装しなくても、同一LAN内に Nerves ではない Elixir マシンがあって、それが zenohd を喋るのでも構いません。むしろこの方が設計としては普通かもです。

Nerves に zenohd を入れる

  • zenohd のバイナリを用意する
    • gnu/musl
    • download/cargo
  • それらしいディレクトリにそれを置く
    • rootfs overlay
    • priv
  • 起動の方法を考える
    • 手動
    • rc.local
    • muontrap

zenohd のバイナリをダウンロードして使う

gnu 版

musl 版

zenohd をコンパイルして使う

gnu 版

musl 版

まとめ

参考文献

  1. はじめてな Elixir(36) Zenohex (v0.5.1) で Pub/Sub する

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?