‘FON’ タグのついている投稿

FON2202をFailSafeモードで復旧させる

前回FON2202にカスタムファームを入れようとして失敗して、何もできなくなっていた状況の続き。ファームウェアを強制的に上書きする方法がありました。

前回:FON2202のファームウェアのビルド : blog.loadlimit – digital matter –

lostmanさんにコメント欄でFONの復旧方法を教えていただいたので実践。
作業は概ね以下の通り。

(鬱とSEと)コンピュータ: FON2202のFailSafeモード

Failsafe Mode – FON Wiki Beta

Wikiでは有線をおすすめされているので、有線で試してみました。
というより、無線でやったらなぜか成功しなかったので…

  1. とりあえず電源が入っている場合は、ACアダプタを外してください。
  2. LANケーブルをPCとFONのCOMPUTERポートに直結します。他は何も繋がず。
  3. FONの底面にある赤いボタンを先の細いもので押します。
  4. 押しながらACアダプタを繋ぎます。
  5. 15秒くらいそのまま待って、ボタンを離します。
  6. IPはDHCPで配られます。配られるまで1分以上かかるかも。気長に待つ。
  7. ランプが色々光ったあと、POWERとWIRELESSが同時にオレンジで点滅するようになったらFailsafeモード突入成功。

ちなみに配られるIPは192.168.1.x/255.255.255.0なので、他のネットワークアダプタが同じ範囲を使っていないか注意。

IP取得成功するとこんな感じ。

Ethernet adapter ローカル エリア接続:

        Connection-specific DNS Suffix  . : lan
        IP Address. . . . . . . . . . . . : 192.168.1.193
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.1

で、 http://192.168.1.1/ にアクセス。

ユーザ名とパスワードを求められるので、ユーザ名に「admin」、パスワードに本体裏のシリアル番号(S/N)を入力。

あとはフォームにtar.gz形式のファームウェアファイルを指定して送信するだけ。30分ほど待つと勝手にFONが再起動して、復旧できます。

DEVELOPERファームに復旧したので、再度再起動してSSH接続成功!やー、シリアル接続するハメにならなくて良かった。

以下も参考。

FON2202にDEVELOPERファームを入れてSSHアクセスできるようにする : blog.loadlimit – digital matter –


FON2202のファームウェアのビルド

La Fonera2.0ことFON2202のファームウェアのビルドに成功したのでメモ。

環境はDebian lenny。主な手順はここ。

build fon-ng

でもこのままやってもビルドできませんでした。

まずは手順にある通り、必要なパッケージをインストール。

$ sudo aptitude install subversion g++ libdigest-crc-perl ncurses-dev zlib1g-dev gawk bison flex autoconf intltool-debian intltool

他のサイトで、以下も必要みたいな記事を読んだのでインストール。

$ sudo aptitude install gettext pkg-config libz-dev ccache libncurses-dev unzip

libdigest-crc-perlがaptだと古いという話なので、CPANから最新をインストール。

$ cpan
CPAN> install Digest
CPAN> install Digest::CRC
CPAN> install YAML

で、手順通りレポジトリからtrunkを落とすとビルドできないので、tags/Flipper-2.2.5.0をダウンロードします。

$ svn co http://svn.fonosfera.org/fon-ng/tags/Flipper-2.2.5.0
$ cd Flipper-2.2.5.0/
$ ./install.sh
$ cd openwrt/
$ make menuconfig

メニュー画面ではとりあえず何もせずにそのままExitで設定を保存。

いざmake。V=99は詳細表示オプション。なくてもいい。

$ make V=99

超時間かかる。Core2QudaのVista上のVirtualPCで2時間くらい。

で、完了。

$ ll bin/
合計 8388
-rw-r–r– 1 dev dev   65536 2009-08-13 09:24 loader.bin
-rwxr-xr-x 1 dev dev   11860 2009-08-13 09:24 meraki-loader.elf
-rwxr-xr-x 1 dev dev 3039219 2009-08-13 09:24 openwrt-fonera2-vmlinux.elf
-rw-r–r– 1 dev dev  786432 2009-08-13 09:24 openwrt-fonera2-vmlinux.image
-rw-r–r– 1 dev dev 4653060 2009-08-13 09:24 openwrt-fonera2.image
drwxr-xr-x 3 dev dev    4096 2009-08-13 08:32 packages

packagesディレクトリにはipk形式のパッケージファイル一式ができてます。
これが
http://www.fonera.be/rep/FON2202/index.php
これってことか。サイトにはpackagesディレクトリに含まれていないものもたくさんあるけど。
逆に言うと、ipkファイルを作る必要性はなさそう。

このままでは正しくファームウェアを書き換えられたかわからないので、ちょっと軽くいじっておきます。
Fonera->facebookをスペースでチェックを外す

ちょっとここで通常のファームウェアの構成を調べる。

$ wget http://download.fonosfera.org/LATEST/20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz
$ tar xvzf ./20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz
20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.image
upgrade
fonera20_fon.image

できたファイルはディレクトリを含まず上記3つ。

$ ll
-rw-r–r– 1 dev dev 4653060 2009-04-22 01:05 20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.image
-rw-r–r– 1 dev dev 4529210 2009-04-22 02:50 20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz
lrwxrwxrwx 1 dev dev      48 2009-08-13 19:25 fonera20_fon.image -> 20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.image
-rwxr-xr-x 1 dev dev     305 2009-04-01 00:57 upgrade

fonera20_fon.imageはシンボリックリンクでimageファイルの実体へ。で、upgradeがシェルスクリプトになってて、これが実行される、と。

$ cat upgrade
#!/bin/ash

VERSION=$(cat /etc/fon_version)
FAILSAFE=$(cat /etc/failsafe)

if [ "$VERSION" = "2.2.1" -o "$VERSION" = "2.2.2" -o "$VERSION" = "2.2.3" -o "$VERSION" = "2.2.4" -o "$FAILSAFE" = 1 ]
then
mtd -r write fonera20_fon.image image > /dev/null 2>&1
#(sleep 4; reboot) &
return 0

else return 1; fi

なるほど、バージョンチェックして必要ならmtdコマンドで書き換え実行ということね。ということは、すでに2.2.5になってるこのFONでは上書きできないということか。

というわけで書き換える。

$ vi ./upgrade

シンプルに以下の感じに。

#!/bin/ash

mtd -r write fonera20_fon.image image > /dev/null 2>&1
return 0

で、リンク先を書き直し。tar.gz作成。

$ rm fonera20_fon.image
$ ln -s openwrt-fonera2.image fonera20_fon.image
$ tar zcvf openwrt-fonera2.tar.gz openwrt-fonera2.image fonera20_fon.image upgrade

で、できあがったopenwrt-fonera2.tar.gzを管理画面経由でFONにアップロード。

Firmware Update
Failed to identify upload.

Σ(゚Д゚)ガーン

なんだろ。ちなみに公開されているtar.gzを展開→再圧縮しただけでも反映に失敗したので、何かtarの作り方に秘密があるっぽい。
仕方ないのでimageファイルを転送して、FON上のSSHで反映することに。
以下、FONのSSH。

# cd /tmp/
# mtd -r write fonera20_fon.image image
Unlocking image …
Writing from fonera20_fon.image to image …  [w]
Rebooting …

で、どうやら書き込み完了。wktkしながらブラウザで確認…

緑の画面から書き変わってオレンジの画面に…あれ?SSHが効かない…?ん?Facebookのアイコンは残ったまま…?

Facebookは画面から消すのに何か別の作業がいるのかもしれないと思うことにして、SSHは…?プラグインのところにも出てこないし…

しかもブラウザからファーム書き戻そうとしてもバージョンが同じだから上書きできないし!!

\(^o^)/オワタ

シリアルケーブル手に入れるまで放置で…

もしくは管理画面からアップできるtar.gzの作り方、か。

※追記(2009/10/12)

lostmanさんに教えていただいた方法で復旧できました。
FON2202をFailSafeモードで復旧させる : blog.loadlimit – digital matter –


FON2202の電源を入れたら無線クライアントとして繋がるようにする

引き続き、La Fonera 2.0ことFON2202をいじる。

電源を入れたら自動で無線LANに接続して、動作を開始するようにする。これができれば電源ケーブルだけで取り回しがかなり自由に。あ、SSH開放したDEVELOPERファームを入れていること前提です。

無線LANに接続するところの参考サイトはこちら。
仙石浩明の日記: La Fonera を無線LAN 端末として使ってみる

まずはFONのFREESPOTとして待ち受けている無線を止めるところから。
というかアレなので一回全部止めてしまいましょう。
# wlanconfig ath0 destroy
# wlanconfig ath1 destroy

で、新たに1つ、staモード、通常の無線クライアントとしてath0を作成。
# wlanconfig ath0 create wlandev wifi0 wlanmode sta

接続先の設定。
# iwconfig ath0 essid "HogeHoge"
# iwconfig ath0 key s:hogehogewep00
# iwpriv ath0 mode 11g

で、起動。
# ifconfig ath0 up

一応これだけでアクセスポイントには接続できているはずなのだけど、IPは勝手に設定したりしないので、DHCPクライアントを使って取得。
# udhcpc -i ath0

では早速Pingを…
# ping www.google.co.jp
ping: bad address ‘www.google.co.jp’

あれ?

名前解決を…
# nslookup www.google.co.jp
Server:    xxx.xxx.xxx.xxx
Address 1: xxx.xxx.xxx.xxx

nslookup: can’t resolve ‘www.google.co.jp’: Name or service not known

おぉぉ

どうやら調べたらFirewallらしい。Firewall有効にしていると、無線側からのSSHもPingも通らない。
今回はLAN内に設置するため、その辺のセキュリティはいらないので、さっくりとFirewallを外すことに。

# /etc/init.d/firewall stop
# nslookup www.google.co.jp
Server:    xxx.xxx.xxx.xxx
Address 1: xxx.xxx.xxx.xxx

Name:      www.google.co.jp
Address 1: 66.249.89.99 jp-in-f99.google.com
Address 2: 66.249.89.147 jp-in-f147.google.com
Address 3: 66.249.89.104 jp-in-f104.google.com

おぉ、できたー。

…と、喜んだのもつかの間。1分ほど経つとath0の接続が切れる現象が。
色々調べて見ると、どうやらchillispotというものが起動して、設定を書きなおしてるらしいということが判明。
なるほど、無線アクセスポイントを構築するプログラムとのこと。
いらないね。

というわけで、起動を解除…しようとしたがどうにもどこから起動しているのかがわからない…
WANが有効になったことをトリガに起動されているらしいのだけど…
/etc/hotplug.d/以下にnetとifaceというディレクトリがあって、その辺を探ってみたのだけど、どうにも止められず。

起動するものはしょうがないということで、起動スクリプトを書き換えて対処。
# vi /etc/init.d/chillispot
do_start() {
の次の行に
return 1
として、即終了させておく。

この辺、OpenWRTにしてあれば入ってないと思うので無用な苦労しなくていいはず。
次回の課題だなぁ。

まとめ。
電源入で自動接続の設定はchillispotの編集をした後、適当に/root/にでもシェルスクリプトを作って起動時に実行するように仕込むだけ。
# vi /root/wlaninit.sh

#!/bin/sh

wlanconfig ath0 destroy
wlanconfig ath1 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode sta 
iwconfig ath0 essid "HogeHoge" 
iwconfig ath0 key s:hogehogewep00
iwpriv ath0 mode 11g

ifconfig ath0 up
udhcpc -i ath0
/etc/init.d/firewall stop

で保存。

# chmod +x /root/wlaninit.sh
# cd /etc/rc.d/
# ln -s /root/wlaninit.sh S96wlaninit

いじょ。一度起動してから終了させるのが非常に無駄くさいがアクセスできなくなったりしてハマれる時間がないので今回はこれで。


FON2202の自動アップデートを停止する

色々いじる関係上、自動でアップデートとかされても困るので自動アップデートを停止する。

SSHでログイン後、
# vi /bin/thinclient

. /tmp/.thinclient.sh
の行を以下のように書き換えてコメントアウト。
# . /tmp/.thinclient.sh

これでOK。
やり方は基本的に他のFONと同じ。DEVELOPERファームで最初からSSH使えるので手順が大幅に楽。


FON2202に、Webカメラを複数接続する

前回( FON2202にDEVELOPERファームを入れてSSHアクセスできるようにする )の続き。

複数のカメラをFONに接続して、定期的に写真を撮ってサーバにPOSTするというのをやりたかったので、まずは複数のカメラを認識するのか調べるところからスタート。

FON2202のUSBポートはひとつなので、ハブを繋げてみることにする。

使ったUSBハブはサンワサプライの2ポートの小型USB2.0ハブ。USB-HUB213

で、カメラはLogicool Qcam 9000 Proを2台。まぁ、いつもの。

このカメラはUVC(USB Video Class)対応なので、特別なドライバがなくても認識するのね。

ではまぁ、さくっとやっちゃいましょう。接続するだけなので。

接続してちょっと待ってから、SSHでデバイスをチェック。

# ls /dev/

リストの中に
video0
video1
とあったので成功!あとはここから画像キャプチャするだけ!



FON2202にDEVELOPERファームを入れてSSHアクセスできるようにする

La Fonera 2.0ことFON2202で何かするシリーズ第一弾。

とりあえずSSHでアクセスできるようにするべく、OpenWRTをインストール。

…と行きたかったが、どうにもkamikazeのbuildもうまく行かず、時間もないので、とりあえず開発版のFONのファームウェアを入れることにした。

方法は以下のサイト参照。

Narururuのにっき: La Fonera 2.0 DEVELOPER

今回入れたのは、20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz

プラグインのところ、本気で気付かなくて、3回もファームウェア転送してしまった…あぁ…1時間半…

しかもとにかく再起動に時間がかかるのね。

で、めでたく緑色の管理画面が見られるようになったらSSHでアクセス。

PuTTYでもいいし、WinSCPでSCPも使えるよ。SFTPは使えないのでそこだけ注意。

2009-08-11 追記

ファームウェアを転送後、30分のカウントが終わった後、強制的に電源を抜いてリセットしたりしないで、そのまま管理画面トップページを再度開けばいいだけだった模様。そうすると、Internet側の接続が何かとか(もしかしたらInternet側が繋がってなかったために聞かれたのかも)、新しいパスワードを入力しろとかが、緑の画面上で出てきます。ちなみに新しいパスワードは8文字以上で、数字が含まれていないとSSHがオープンにならないと言われます。

で、ウィザード形式で答えていくと、パスワード入力画面が出て管理画面に入れます。この時点ではまだSSHにアクセスできないので、Settings→System→Rebootと進めば電源なんか一度も触らずにSSH開放まで行けます。