PQI Air Card が届いた

女の子と2人でとしまえんに遊びに行ってきた yosida95 です。 なんか、楽しかった反動で寝られそうにないので、ブログでも書きます。

さて、先日 id:koba789 から Amazon wishlist 経由で、 PQI Air Card と、 SD カードライターがセットで届きました。 なんでも、 CombConf 開催にあたり、ぼくが立て替えていた分をこれで返すそうです。 年末一杯遊べるおもちゃを与えてくれてありがとうございます!!

PQI Air Card とは

Micro SD カードを SD カードとして使うためのアダプタです。 ただ、それだけではなくて、このアダプタには WiFi モジュールが組み込まれています。 本来は、写真や動画を WiFi で共有するための機能なのですが、中で Linux が動いていて、 telnet で接続できたり FTP や HTTP が使えたりできるので、 Geek のおもちゃになっています。

詳しくはググってください。 Let's google it!

PQI Air Card の準備

PQI Air Card には 32GB の Micro SD カードが付属するので、これを PQI Air Card に挿入します。 自分で用意した Micro SD カードでも使えます。 これが PQI Air Card と他の類似品との大きな違いです。 次に、 Micro SD カードを挿入した PQI Air Card をそのへんに転がってるデジカメや SD カードライターに挿入します。

PQI Air Card に接続する

PQI Air Card をデジカメや SD カードライターにセットしてから25秒くらい(マニュアル値)待つと、そのなも "PQI Air card" というアクセスポイントが立ちます。 これに、適当なマシンで接続してやります。 すると、 192.168.1.50-52 あたりの IP アドレスが降ってきます。

telnet で接続する

まずは、昔なつかしの telnet で接続してやります。 telnet コマンド自体は、さくっと書いた HTTP サーバーのデバッグとかでまだご健在ですね。

$ telnet 192.168.1.1

これでサクッと root として接続できます。 デフォルトで telnetd が動いている辺り怖いですね。

BusyBox を強化する

PQI Air Card の中で動くコマンドは BusyBox によって提供されています。 BusyBox とはご存じなければググってください。 PQI Air Card では、ストレージの容量を節約するために最低限のコマンドしか使えないようになっています。 これだと窮屈すぎるので BusyBox を強化します。

FlucardでプログラムとかCGIとか|とんすけぶろぐ このページにある deploy\_20120420.zip を使います。 この中には、 PQI Air Card で使えるようにコンパイルされた BusyBox が入っています。 落としてきた ZIP を展開して中に入っている deploy\_20120420/DCIM/122\_TREK を PQI Air Card で使う Micro SD カードの DCIM ディレクトリにコピーします。 PQI Air Card では SD カードは /mnt/sd にマウントされているので、 /mnt/sd/DCIM/122\_TREK/busybox を vi や top として、 /bin にシンボリックリンクを張ります。

また、この deploy\_20120420 には BusyBox の他にも各種コマンドを PQI Air Card で使えるようにコンパイルされたものも入っているので、これも利用します。 /mnt/sd/DCIM/122\_TREK 以下の binusr/bin なんかのシンボリックリンクを / 以下に張ります。

併せて PQI Air Card に最初から含まれていて deploy\_20120420 にも含まれているは、後者のものを使うために最初からあるものを削除します。

$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/vi
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/top
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/awk
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/dd
$ rm /usr/bin/hexdump
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/hexdump
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/killall
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/less
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/passwd
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/sed
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/tar
$ rm /usr/bin/telnet
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/telnet
$ ln -s /mnt/sd/DCIM/122_TREK/busybox /bin/whoami

$ ln -s /mnt/sd/DCIM/122_TREK/bin/* /bin/
$ ln -s /mnt/sd/DCIM/122_TREK/sbin/* /sbin/
$ ln -s /mnt/sd/DCIM/122_TREK/lib/* /lib/
$ ln -s /mnt/sd/DCIM/122_TREK/etc/* /etc/
$ ln -s /mnt/sd/DCIM/122_TREK/usr/bin/* /usr/bin/
$ ln -s /mnt/sd/DCIM/122_TREK/usr/lib /usr/lib
$ ln -s /mnt/sd/DCIM/122_TREK/usr/include /usr/include
$ ln -s /mnt/sd/DCIM/122_TREK/usr/libexec /usr/libexec
$ ln -s /mnt/sd/DCIM/122_TREK/usr/local /usr/local

なぜコピーで無いかというと、 PQI Air Card のメモリが限られているためです。 なので、 Micro SD カードに実体を置いて、こっちにはシンボリックリンクを張っておきます。

autorun.sh を書く

"BusyBox を強化する" の項でシンボリックリンクを張って BusyBox が使えるようになりましたが、一度 PQI Air Card への通電を切ると作業前の状態に戻っているとおもいます。 これは PQI Air Card はストレージにある OS のイメージをすべてメモリに乗っけて、オンメモリで動作するためです。 まー、 SmartOS みたいなもんですね。

なので、起動するたびに上記のようなコマンドを打ってやらないといけないのですが、さすがにこれは骨です。 そこで、 autorun.sh を使います。 autorun.sh は、 PQI Air Card がイニシャライズするときに呼ばれるシェルスクリプトです。 このシェルスクリプトに上記のようなコマンドを列挙してやることで自動化できます。

autorun.sh を置く場所は、 Micro SD カードのルート、つまり /mnt/sd/autorun.sh です。

おまけ

公開鍵認証で SSH を使う

$ dropbear -A -N root -C '-' -U 0 -G 0 -R [authorized_keys へのパス] -s

telnet で接続できなくする

$ killall telnetd

FTP で接続できなくする

$ killall tcpsvd