NAOのIPアドレスを固定する

近々のオーディションに向けて、ロボットを準備している。データをロボット同士、パソコンとロボットでやり取りするのに、テレパシーライブラリを使うが、どうしてもwifiのIPアドレスを固定したい。前のwi-fiルーターは、ほとんど割り振るipアドレスを変えなかったのだが、新しいwi-fiルーターはすぐに変えてしまうのでとても不便。

そう思って、半日、格闘してなんとかなった。記録しておく。

当初、Gentoo LinuxでどうIPアドレスを固定するのかを見ていて、色ころ試みたが、うまくいかない。ifconfigで一時的な固定はできるが、初期時点で無理に設定しようとすると(/etc/local.d/に実行ファイルを入れるなど)うまくいかなくなる。そこで、次のサイトに行き当たった。

によれば、NAOの場合、ifconfigではなく、connmanというコマンドを使うということだ(今まで使ったことがない)。ただ、なぜか私のNAOは旧ウェッブページが開かれないので、sshで接続したNAOのターミナルで処理をした。

nao [0] ~ $ su -
Password: ←(1)

root@nao [0] ~ # connman services ←(2)
* AO Wired           { ethernet_xxxxxxxxxxxxxx_cable }
* AR HUAWEI-CC30     { wifi_xxxxxxxx_xxxxxxxxxxxx_managed_psk }

root@nao [0] ~ # connman remove wifi_xxxxxxxx_xxxxxxxxxxxx_managed_psk ←(3)

root@nao [0] ~ # /usr/lib/connman/test/set-ipv4-method wifi_xxxxxxxx_xxxxxxxxxxxx_managed_psk manual 192.168.X.XX 255.255.255.0 192.168.X.1 ←(4)

Setting method manual for wifi_xxxxxxxx_xxxxxxxxxxxx_managed_psk
New IPv4.Configuration:  {'Netmask': dbus.String(u'255.255.255.0', variant_level=1), 'Gateway': dbus.String(u'192.168.X.1', variant_level=1), 'Method': dbus.String(u'manual', variant_level=1), 'Address': dbus.String(u'192.168.X.XX', variant_level=1)} ←(5)

上の、手順は、(1)PC(私の場合はMacのターミナル)から、sshでロボットと接続し、rootにログインする。(2)connmanコマンドで、wifiのサービス設定を検索する。(3)そのサービスを、connman removeで削除する。(4)そのサービス名を使って、新たにwi-fiのネットワーク設定を行う。(5)結果が出力される

これで、再起動でも、この設定が使われて、IPアドレスは固定される。ただし、これだけでは、ネームサーバーが設定されておらず、接続はできるが、起動時にクラウドエラーなどを引き起こす。私の場合は、cloudに依存していることはないので、今のところ確認できる実害はないが、このエラーは避けるべきだ。そこで、/etc/resolve.confを設定する。

wi-fiルータの場合、大概、ゲートウェイアドレスを設定しておけば、ネームサーバーの用をなしてくれる。マニュアルに記載されていると思うが、ほとんどの場合、ゲートウェイアドレスを指定しておけば良いと思う。例えば、Xは、ネットワーク番号で、

nameserver 192.168.X.1

という感じか。

wifiの方(デバイス名、wlan0)は、このように固定しておいて、ワイヤーでつなぐ方(デバイス名 eth0)は、DHCPのままの方が、いざという時に、繋げることが可能だ。こちらまでIPを固定すると、固定したネットワークとは違うネットワーク環境で、ロボットにアクセスする方法がなくなってしまうからだ。

これで、ロボットのIPアドレスの割り当てが変わる心配がなくなった。よかった。