誰でも思いつきそうなことだけど、ググると困っている人がたくさんいるようなので、メモを残す。
某ルーターのROMを焼いた後にファームウエアの不具合が発覚。
製造後にファームウエアの更新をする必要が出てきた。
残念ながら、便利なバックドアはないようだし、趣味的にubootからbootpで流し込む方法はSoCメーカーのSDKにあるのは知ってるんだけど、製造メーカーの仕様書になかったのでちょっと採用できないと言われた。
ブラウザからポチポチしてアップデートをやる以外の方法がない(というか認めてもらえない)。
なにせ量産物のため数が超多いので、パートのおばちゃんにブラウザをポチポチさせると、うん千万円かかってしまう。金額も驚異だが、なによりすごく作業時間がかかってしまう。その結果発生する、製品初動時の出荷要求に応えられない機会損失は大きい。
しょうがないので、Raspiを使って、自動化して人件費を節約すると共に、並列度を上げて作業時間の短縮を図る。
時間もないので、シンプルにchrome WebDriver/Seleniumという組み合わせで試し始めた。名前とできることは知っていたけど、自分でさわるのは初めてだ。ざっとドキュメントを見て勉強する。Pythonも十年ぶりくらい?
前提条件として、製品であるのでブラウザで管理画面を開くにも認証が必要だ。そして、個体ごとにIDとパスワードが異なる。
そして、残念なことにSeleniumは認証に対応していないようだ。
試してみたが、そもそもSeleniumではブラウザの出す認証画面の制御ができない。
SeleniumでgetするURLにIDパスワードを埋め込んでみたが、そのような方法にも対応できないようだ。
ちらっとググってみても、うまくいかないという報告はたくさん出てくるものの、うまくいった方法というのは見当たらなかった。IE Driverなら通るよとか、Firefox Driverの特定のバージョンなら通るという話も出てきたが、その環境をそろえる手間がしんどそう。何よりターゲットデバイスはRaspiだもの。IEとか動かないわ...
管理画面に入れなければ、ファームウエアの更新できない。
ダメじゃん...
ググった結果では、前にproxyを立てて代理認証をさせるような方法が成功例として出ていたが、ちょっとそれもダサい気がする。
requestsモジュールで認証後に引いてきたコンテンツをSeleniumに読ませてみたが、それで処理を引き継がせるのは、渡す必要のあるものが多くて結構しんどそうだった。
そもそも、どういう条件が必要なのかの仕様書もないので、パケットキャプチャしてのクローニングにも不安がある。
時間もない絶望感の中、明日はファームイメージを解析して、バックドアかセキュリティホールでも漁ってみようかなと考えていると、寝る前に布団の中である方法を思いついた。
翌日、さっそく試してみると、あっさりうまく動いてしまった。
なんのことはない、外的に得られる情報からIDとパスワードを特定し、認証情報を埋め込んだURLに自動遷移するJSを埋めたHTMLファイルをローカルに吐いて、Seleniumでそれを開き、認証後のページに遷移させるというそれだけ。
ハイテクのかけらもない超ダサい方法だとは思うが、シンプルな解決方法になった。
もう1つ思いついた方法があったのだけど、かなりトリッキーな方法で、この製品にしか適用できない手であるので、それを採用せずに済んでよかった。
その後、ネストしたiframeや、旧態依然とした入り組んだtableだらけの構成、nameもidも振られていないエレメントなどに苦戦したが、なんとか短時間での自動化に成功した。
パートのおばちゃんでも制御がわかるように、sense-hatを付けて状態やエラー表示を行い、ボタン操作は最終確認の一回だけに絞った。sense-hatはコスト面で反対されたが、強固に主張してデモまではOKの許可をもらう。動作を見たら、削るということはありえないw 現場には大好評で、操作ミスも解消している。なにより、なんだかよくわからない状態もない。
費用対効果を考えて、そんなとこケチるなよ...
Raspiは、Xは起動せずに、特定ユーザーで自動ログインし、シェルを指定せずにプログラムを自動起動させている。誰でも電源を入れるだけで使える。ログや必要なパラメーターは、VFATなパーティションに書き込まれているので、Windowsから普通に読み書きできる。
こうして、大幅なコスト圧縮と時間短縮を成し遂げたのであった。
自分の責任範疇の中のミスや、担当の本業でもないのに...
これで給料が上がったりボーナス出たりするわけじゃないので虚しいことだw
使った機材さえ、手元に残ることもない。
sense-hatの1つくらい置いていけよ...
製造後の後工程での自動化治具が必要な方、副業でオーダー受け付けております。 (宣伝かよw)
あ、転職先も募集してますw
今はクラウドとIoTが主戦場ですが、鯖から組み込みまでいろいろできます。