こんにちは、あっきぃ/大内です。本記事はソラコムのSoftware Design誌巻頭特集記念リレーブログ 5月16日の記事です。本来は太田さんが担当でしたが、ご多忙とのことで急きょ私が書かせていただくことになりました。
https://blog.soracom.jp/relay-blog/2016-04/
私からは、ハードにRaspberry PiとLG製L-05Aモデムを、ソフトウェアにUSB_ModeSwitchとNetworkManagerを使用して、SORACOM SIMの自動接続環境を構築する方法をご紹介します。
なお、OSはRaspbianを利用しますが導入方法は割愛します。ただしそれ以外のLinuxでもおそらくそのまま利用できるでしょう。
(知っている人からは「こないだ自分のブログに違うSIM使う前提で書いてたやんけ」って突っ込まれそうですが、許して><)
なぜNetwork Manager?
LinuxでSIMを利用したネットワーク接続には、一般的にはwvdialが利用されるようです。しかし、自動再接続は非対応で、一定時間ごとに接続するスクリプトを別途仕込む必要があるようです。スクリプトを仕込み忘れてしまうと、切断されるたびに手で再起動する必要がありますし、そもそもこのスクリプトの動かし方自体あまりスマートではないように見えます。
NetworkManagerではそのようなことをしなくても自動起動や自動再接続、ホットプラグにも対応します。電源を入れるだけで後は良きに計らってくれるあたり、IoTデバイス的に向いてそうですね。
やること
やることは以下の2点です。
- USB_ModeSwitchの設定を置いてデフォルトの設定をオーバーライド
- NetworkManagerでPPP接続
USB_ModeSwitchの設定
USB_ModeSwitchの設定は、/etc/usb_modeswitch.d/1004:613aと言うファイルを作成して、以下の内容を記述します。
# LG L-05A
TargetVendor=0x1004
TargetProduct=0x6124
StandardEject=1
WaitBefore=2
オリジナルの設定ファイルが/usr/share/usb_modeswitch/configPack.tar.gzの中にあって、デフォルトではここから読んでいるようです。/etc/usb_modeswitch.dにファイルを配置することで、オリジナルの設定をオーバーライドできます。オリジナルからの変更点は、WaitBefore=2の1行を追加しただけです。
デフォルトの設定では、CD-ROMモードで認識したL-05AをEjectするタイミングが早すぎるため、USB_ModeSwitchが処理に失敗していました。WaitBeforeパラメータを使用して2秒ほど待つように変えてあげることで、USB_ModeSwitchが正しく動作するようになります。
(参考) http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=2130
NetworkManagerのインストールと設定
NetworkManagerをインストールします。デフォルトでインストールされているネットワーク管理とは競合するため、dhcpcd5はアンインストールします(もし入ってなかったらそのままで良いです)。
sudo apt-get install -y network-manager
sudo apt-get remove -y dhcpcd5
(ちなみに、デスクトップ環境の人はGUI管理ツールも入れると良いです)
sudo apt-get install -y network-manager-gnome
もう一つ、デフォルトと競合するものとして、/etc/network/interfacesをエディタで開いて全部コメントアウトします。この時点でOSを一度再起動しておきましょう。
次にNetworkManagerの接続設定を記述します。/etc/NetworkManager/system-connections/soracomを以下のとおり作成します。接続先の情報はSORACOMの利用方法にあるので、そちらを参考に書きます。
[connection]
id=soracom
uuid=271bf085-ac9e-4f98-901c-c300f267d26f
type=gsm
autoconnect=true
[ppp]
refuse-eap=true
refuse-mschap=true
refuse-mschapv2=true
[ipv6]
method=auto
[ipv4]
method=auto
[serial]
baud=460800
[gsm]
number=*99***1#
username=sora
password=sora
apn=soracom.io
設定ファイルの書き方についてですが、今回はデスクトップ環境でNetworkManagerのGUIを使って設定を作りこんでから、下記の設定パラメータ一覧を参考にパラメータをいじりました。
https://developer.gnome.org/NetworkManager/stable/ref-settings.html
接続
L-05AをRaspberry Piに接続すると、USB_ModeSwitchによってデバイスが初期化され、電波ランプが青で数秒点滅したあと点灯に切り替わるのがわかります。
ipコマンドで見るとこうなります。ちゃんとアドレスを拾っていますね。
pi@raspberrypi:~ $ ip a show ppp0
4: ppp0:
link/ppp
inet 100.94.xxx.xxx peer 10.64.64.64/32 scope global ppp0
valid_lft forever preferred_lft forever
Raspberry Piを再起動しても同じように自動で接続されれば完成です。
さて、これで何しよう?
電源を入れれば勝手にSORACOMでネットワークに繋がるようになったRaspberry Piで何をしよう、というのが肝なわけですが、実はそこまでできていませんでした……。
先述の通りこの記事は自身の記事を使い回していますが、見ると「こいつをCD-ROMドライブに埋め込んで野外Ejectとしゃれ込みましょうかね……?」とか書いてるんです。それをどうしろと。
一方、リレーブログを見てみると、Raspberry PiとUSBカメラを組み合わせていらっしゃる方が見られました。ここはRaspberry PiらしくCamera Moduleを利用されるとよりそれっぽくなるかもしれません。ちょうど本日、Camera ModuleのCSIポートが追加搭載されたRaspberry Pi Zero v1.3がリリースされましたので、こちらと組み合わせてみてはいかがでしょうか。
https://www.raspberrypi.org/blog/zero-grows-camera-connector/