2015年3月21日土曜日

やってきたこと。そしてアン死亡

学習リモコンiRemoconWiFiを、さらにブラウザから操作するWebアプリを造った。

操作するだけならスマホアプリがある。一般的な利用ならコレで十分だ。便利に使えている。
定型的な操作を前もってタイマー登録する作業を、既に登録されているタイマーのリストを確認しつつやりたかった。
この、既に登録されているタイマーの情報がスマホアプリでは薄い。これはiRemoconWiFiが学習済みの赤外線信号を(どの家電のどのボタンという情報を持たず)番号で管理していることによる制限だ。

iRemoconWiFiそのものから情報を得られないなら、別な機器に情報を持たせて、ついでにiRemoconWiFiそのもののコントロールもソイツに任せたい。そういう発想だ。

何しろWebアプリなので、PCからでもiPadからでも操作できる。
しかし、Webアプリのサーバーが常時待機している体制にないとほとんど実用にならない。寝床からiPadで操作するのに、いちいち起き上がってPCを立ち上げてから、というのは寒い。PCを立ち上げっぱなしにしておけるほどの余裕も無い。

最初に考えたのは月額1,000円のVPSだが、iRemoconWiFiは家庭内ネットワークの外からの操作には現状、個人利用向けでは対応していない。(法人なら応相談とか)
なので、実現には家庭内ネットの中にWebアプリを動かせるサーバーが必要だ。どこかに、安くて(予算1万円)小さくて(手のひらサイズ以下)電力消費の少ないPC(ネットワーク機能とプログラミング環境が必要)はないものか。Android端末、超小型PC等いろいろ物色した結果、RasberryPiを選択。こんなの。
この手のひらサイズの機器に、ディスプレイとキーボード、マウスが繋がる。ある程度セットアップしたら、ネットワーク経由での操作に切替えて、ディスプレイ等は外してしまえる(何しろウチではテレビと兼用だ)。
Raspberry PiにはLinux系列のOSをインストールして使う。推奨のRaspbianを使った。これにiRemoconWiFiと通信するための自作ソフトと、それを操作するためのやっぱり自作のWebアプリ、Webアプリを動かすためのサーバー(gunicornを利用)やらウンタラカンタラ。

さて、動作も良好だし、事故に備えてバックアップでも……というところで、MicroSDメモリ(Raspberry Piではハードディスク代わりにSDメモリを利用する)が壊れて、起動しなくなった。えっ、これからバックアップを取るトコなんですけど?!

Raspberry Piの弱点はこのメモリと電源。何しろナリが小さいので自前の安定化装置とかは内蔵不能。ACアダプタが頼りだ。そして、電力供給が一瞬でも途切れたら、お皿の上の料理が床にぶちまけられる。3秒ルールを適用する暇もなく、即生ゴミだ。
……ということを3回ほど繰り返した。

このままではダメだ。
楽するために色々買ってきたのだ。各種ソフトのインストールの練習ならわざわざ機器を買うまでもなかった。
よし、自動化しよう!

以前、Chefにチャレンジしていたが、仕掛けが複雑すぎて逆に手間だった。数十台のサーバの管理が仕事ならともかく、やりたいのは1台のサーバのセットアップを(壊れる度に何度でも)繰り返すことだ。もうちょっと手軽なAnsible(あんしぼー)に乗り換える、今がそのチャンス。

何度か繰り返したセットアップ作業中に利用したコマンドを1つずつ順番に、Ansibleの設定に置き換えていく。同じPCに同じ設定を適用できれば十分なので、再利用性とか汎用性とか考えず、安直にベタ打ち。
設定書く→実行する→失敗する→修正する→実行する→成功する→設定継ぎ足す→実行する→失敗する→......
実行の繰り返し回数は増えるものの、叩くコマンドが1種類で済むのと、一旦成功した部分を飛ばして失敗したところから進める機能があるので、早いし気楽だ。

サーバー機器向けの構成管理ツールは色々あるけれど、Ansibleは事前に準備が必要なものが少なくて済むのが嬉しい。というか、設定する相手がサーバーなら必ず弄るところばかりなので、独自の準備らしいものと言えば手元のPCにAnsible自体を入れることくらいだ。始めやすいのが大きな利点と言える。

とは言え、学習コストはゼロにはならない。
自分が参考にしたものは、これら。

とっかかりを得るために一読した。

途中でつまずいたら。
http://qiita.com/tags/ansible

結局、一番頼りになるのは、なんと言っても公式。
http://docs.ansible.com/