NervesをWiFiを使って固定IPでネットワークに追加します(Elixir)


はじめに

config/target.exs
config :vintage_net,
  regulatory_domain: "US",
  config: [
    {"usb0", %{type: VintageNetDirect}},
    {"eth0",
     %{
       type: VintageNetEthernet,
       ipv4: %{method: :dhcp}
     }},
    {"wlan0",
     %{
       type: VintageNetWiFi,
       vintage_net_wifi: %{
         networks: [
           %{
             key_mgmt: :wpa_psk,
             ssid: System.get_env("NERVES_NETWORK_SSID"),
             psk: System.get_env("NERVES_NETWORK_PSK")
           }
         ]
       },
       ipv4: %{
         method: :static,
         address: "192.168.1.200",
         prefix_length: 24,
         gateway: "192.168.1.1",
         name_servers: ["8.8.8.8", "8.8.4.4"]
       }
     }}
  ]
  • (ノート) 192.168.1.200 は、あくまでも例です。ご自身のネットワーク設定やすでに割り当て済みのものとはかぶらないように設定してください。
  • prefix_lengthgatewayname_serversの値もあくまでも例です。

memo

  • mix uploadしたときにヤバい、こわしたかと焦ったことがあったので書いておきます
  • もともとはipv4: %{method: :dhcp}に設定したファームウェアで動かしていました
  • そこに固定IP address: "192.168.1.200" の変更を加えて、mix firmware && mix uploadしました
$ mix upload
...

fwup: Upgrading partition B
100% [====================================] 50.38 MB in / 57.66 MB outReceived disconnect from 192.168.1.12 port 22:11: Terminated (shutdown) by supervisor
Disconnected from 192.168.1.12 port 22
** (Mix) ssh failed with status 255
  • ** (Mix) ssh failed with status 255はIPが変わって、単にssh接続がきれただけでした
$ ssh 192.168.1.200

iex> ping "nerves-project.org"
Press enter to stop
Response from nerves-project.org (185.199.108.153): time=58.574ms
Response from nerves-project.org (185.199.108.153): time=61.568ms
Response from nerves-project.org (185.199.108.153): time=56.253ms
Response from nerves-project.org (185.199.108.153): time=45.763ms
  • sshできるし、ちゃんと外にもつながる

Wrapping Up