そろそろNerves同士を接続したくなってきたので接続に必要なnode_name
とnode_host
とcookie
を設定しました。
これは「NervesのSSH環境を整えた 〜upload.shを使ってファームウェア更新も〜」の続編になります。
#環境
ハードウェア
- Mac OSX
- NervesをRaspberryPi 3で稼働
ネットワーク
-
Mac OSX
- 有線LAN→メンテナンス用、固定IPアドレス(192.168.88.1/24)
-
ラズパイ
- 有線LAN(eth0)→メンテナンス用、固定IPアドレス(192.168.88.2/24)
- 無線LAN(wlan0)→インターネット接続用、DHCP(192.168.0.10-100/24から自動割当)
#ゴール(こうしたい)
Nervesを起動してログインした際、node_name
とnode_host
とcookie
が設定されている状態にしたい。
$ ssh 192.168.88.2
↓
iex(nishiuchikazuma@192.168.0.11)> Node.self()
:"nishiuchikazuma@192.168.0.11"
iex(nishiuchikazuma@192.168.0.11)> Node.get_cookie()
:comecomeeverybody
前提
前提としてネットワークの設定ができていることとします。ネットワークの設定は「Nervesのネットワーク環境を整えた」を参考にしてください。
やったこと
config/target.exs
のconfig :nerves_init_gadget
にnode_name
とnode_host
の設定をします。
(変更前)
config :nerves_init_gadget,
ifname: "usb0",
address_method: :dhcpd,
mdns_domain: "nerves.local"
node_name: node_name,
node_host: :mdns_domain
↓
(変更後)
config :nerves_init_gadget,
ifname: "wlan0",
address_method: :dhcp,
node_name: "nishiuchikazuma",
node_host: :ip
cookie
の設定はmix.exs
のdef release
に設定します。cookie
はnode_name
とnode_host
が設定されていないと有効にならないようです。無効の場合は:nocookie
となります。
デフォルトの設定だとcookie: "#{@app}_cookie"
となっているのでmix.exs
の上の方に設定されている@app(プロジェクト名)
が展開されてプロジェクト名_cookie
となります。
def release do
[
overwrite: true,
cookie: "comecomeeverybody", ←ここに設定を記載
include_erts: &Nerves.Release.erts/0,
steps: [&Nerves.Release.init/1, :assemble],
strip_beams: Mix.env() == :prod
]
end
ファームウェアをアップロードします。
$ mix deps.get
$ mix firmware
$ ./upload.sh 192.168.88.2
確認します。
$ ssh 192.168.88.2
↓
iex(nishiuchikazuma@192.168.0.11)> Node.self()
:"nishiuchikazuma@192.168.0.11"
iex(nishiuchikazuma@192.168.0.11)> Node.get_cookie()
:comecomeeverybody
#まとめ
config/target.exs
にnode_name
とnode_host
を、mix.exs
にcookie
の設定をすることでNerves起動時にnode_name
とnode_host
とcookie
を設定することができました。
#おまけ
NervesのIPアドレスとインタフェースを確認するコマンドは以下でifconfig
がオススメ。
iex> ifconfig
or
iex> Nerves.NetworkInterface.interfaces()
iex> Nerves.NetworkInterface.settings("eth0")
iex> Nerves.NetworkInterface.settings("wlan0")
or
iex> Nerves.NetworkInterface.interfaces() |> Enum.map(& Nerves.NetworkInterface.settings(&1))