nerves-<4 digit serial#>.local (Elixir/Nerves)


はじめに

ところで

  • mix nerves.newしたときに、はじめからできている
config/target.exs
config :mdns_lite,
  # The `host` key specifies what hostnames mdns_lite advertises.  `:hostname`
  # advertises the device's hostname.local. For the official Nerves systems, this
  # is "nerves-<4 digit serial#>.local".  mdns_lite also advertises
  # "nerves.local" for convenience. If more than one Nerves device is on the
  # network, delete "nerves" from the list.

  host: [:hostname, "nerves"],
  ttl: 120,
  • って書いてあって、nerves.localはconvenienceであって、nerves-<4 digit serial#>.localなるものがあるとのこと!
  • で、次の疑問は<4 digit serial#>って何ですか? という疑問です

答え

  • シリアル番号の下4桁です
  • まずNervesIExを使えるようにします
    • a. ディスプレイとキーボードを接続する
    • b. ssh nerves.localする (1台目の電源ON時はこれでいける)

@mnishiguchi さんコメント

iex> Nerves.Runtime.serial_number
c3ba

iex> (
File.read!("/proc/cpuinfo")
|> String.split("\n")
|> Enum.find(&String.starts_with? &1, "Serial")
|> String.slice(-4..-1)
)
c3ba

@torifukukaiou オリジナル

  • 私はもともとこういうコードを載せていましたところ、@mnishiguchiさんがもっと短くすむコードをコメントで教えてくださいました

iex> (
File.read!("/proc/cpuinfo")
|> String.split("\n")
|> Enum.map(&(String.split(&1, ":")))
|> Enum.reject(&(Enum.count(&1) == 1))
|> Enum.map(fn [k, v] -> {String.trim(k), v} end)
|> Enum.map(fn {k, v} -> {String.to_atom(k), v} end)
|> Keyword.get(:Serial)
|> String.slice(-4..-1)
)
cccc
  • 上記では、nerves-cccc.localになります
  • (この値って変わることはないのかなあ?)
  • (私の家のRaspberry Pi 2ではこの4桁でうまくいったけど本当にそれでいいのかなあ?)

参考

Wrapping Up

  • シリアル番号の下4桁で合っていますですかね
    • ちょっと自信がありませんが、自信のある方が正してくださるでしょう
    • Yes! Yes! Yes!
    • @takasehideki 先生から回答をコメントでいただきました!
    • ありがとうございます!
  • Enjoy Elixir
  • Nervesに興味を持っていただけましたらぜひ、Nerves JP Slackへご参加ください
    • 愉快なfolksたちが大歓迎です