2012/04/16

Xperia rayをWebサーバーにする。

なんとなくWeb鯖を自前で作りたいと感じたので、なんとなくアキバへ向かった。

今回の必要条件としては、CPU 1GHz、メモリ512MB。そんでもって15000円以内。
そんななかで、候補に上がったのは以下の3つ。
・第4世代iPod touch
・F-12C
・Xperia ray(SO-03C)

なんとなく、触ったことのないものがいいなと思い、SO-03Cに決定。14000円なり。
いくら中古ったって、購入日2012/03/30だぜ?安すぎ。

・rootハック
いまやメジャーなexploit ツール、zergRushで瞬殺。

・なんとなくシャッター音を消す
/system/build.propにある
ro.camera.sound.forcedを0にする
(参考:http://gadget-shot.com/2011/10/04/xperia-ray-so-03c-camera-sound/

・Lighttpdのインストール
さて、シャッター音が消えて満足したところで本題のWebサーバのインストールにかかる。
Apacheは組み込み系では不向きらしい、というネット情報から、iPod touchでも実績のあるlighttpdを使用。
Android用のバイナリはここからありがたく拝借。

そんで、
adb push php-5.3.8_lighttpd_1.4.29_armv5.tar.gz /data/local/
で端末に突っ込んで、
adb shell
$ su
# mount -o remount /system /system
# mount -o remount /  /
# cp /data/local/php-5.3.8_lighttpd_1.4.29_armv5.tar.gz  /
# tar xzvf php-5.3.8_lighttpd_1.4.29_armv5.tar.gz
これでOK。

あとは、
# reload_fcgi.sh
# reload_lighttpd.sh
とすれば、80番ポートでHTTPデーモンが居座りはじめる。

なおWebrootは/system/var/www/。ここはRead-onlyなので、
適当に/sdcard/wwwとかにシンボリックリンクを貼っておくといい。
# ln -s /sdcard/www /system/var/www
# ln -s /sdcard/www-log /system/var/log

・起動時にHTTPサーバが立ち上がるようにする
これ、簡単そうで意外とハマった。
ネット情報だと/system/etc/install-recovery.shが呼ばれるだとか書いてある。
たしかに、init.rcをのぞいてみると

service flash_recovery /system/etc/install-recovery.sh

    oneshot
ってかいてある。しかし、実際にはなぜか呼ばれてないように見える。

ほかに起動時に呼ばれそうなものを目星つけて、
・/system/etc/pre_hw_config.sh
これがいけそう。

ただ、こいつが呼ばれるタイミングがちょっと特殊で
・PATH(環境変数)がセットされてない
・SDカード上がマウントされていない
というもの。これじゃ都合が悪い。

いろいろ試行錯誤した後、結局こいつの末尾に

export PATH=/system/bin:/system/xbin
#local script
(sleep 30 && /system/etc/local.sh > /sdcard/local_sh.log 2>&1) &

こんなかんじで追加してやれば、起動してちょっとたってから/system/etc/local.shをroot権で実行してくれる。

あとは、/etc/local.shというファイルに、さっきのHTTPデーモンを立ち上げるコマンド2行(reload_fcgi.shとreload_lighttpd.sh)をフルパスで追加すればよい。
そんで、再起動すれば、

iwaki-yuusuke-no-MacBook-Air:~ yi01$ adb shell netstat -l
Proto Recv-Q Send-Q Local Address          Foreign Address        State
 tcp       0      0 127.0.0.1:9001         0.0.0.0:*              LISTEN
 tcp       0      0 192.168.100.100:5001   0.0.0.0:*              LISTEN
 tcp       0      0 0.0.0.0:80             0.0.0.0:*              LISTEN
 udp       0      0 0.0.0.0:1024           0.0.0.0:*              CLOSE
 udp       0      0 192.168.100.100:40156  0.0.0.0:*              CLOSE
 udp       0      0 239.255.255.250:1900   0.0.0.0:*              CLOSE

おおお!Webサーバになってくれました。

あとは、iPod touchの時みたいに、OpenVPNクライアントとかrinetdでごにょごにょすれば、公開Webサーバにできる。いぇい!

2012/04/09

Galaxy NoteにタブレットUIのROMをいれる


Imilka AOSP v08のTablet UIを入れてみた。
GMailが2painで使えるのは非常に便利です。さすがタブレット用。

S Penも、マウスとして認識してくれます。

しばらく(公式ROMが出るまでは)こいつで使ってみて遊んでみようかなと思います。

2012/02/27

USB On The Go と MHLを試す。

Nokia N8では、パッケージにUSB OTGケーブルが同梱されており、SDカードリーダとかを使ってさらにminiHDMIケーブルで大画面に映しだしたりすることができていた。

今、データ通信用にメインで使っているGalaxy Noteでも、USB OTGはサポートされているらしい。また、HDMIに代わるMHLなるものもサポートされているらしい。
どうせなら両方試してみようかと思いたち、アキバへGoGo。

これらを購入。左がMHLケーブル。あきばおーに売ってた。そして、右がOTGケーブル。こいつはあきばおーでは見つからず、Jan-gle(パソコン工房向かい)にて購入。
いずれも、ケーブルにしては随分と高価だった。

さて、ウキウキワクワクと端末に刺してみるが・・・。あれ、認識しない。騙されたか・・・。いや、まてよ、いまこの端末はICSのROM(リーク版)が入っている。元に(GBに)戻せば動くんじゃないか、という直感が働く。

そんなわけで、GBに戻す。
方法は、XDAのサイトにROMがストックされていて、LA2のOpen Europe版をOdinで焼く。今回はOdinも同梱されていたので、特に別にダウンロードする必要はなかった。
あ、ドライバは、Kiesなんちゃらっていうアプリは使わないので、USBドライバだけをダウンロード。

ROM焼き後、とりあえずさして見る。すると・・・


おおおおおーーーーーー。さすが。MHLは素晴らしい。
ただ、N8と違って、画面出力していると、USB端子が奪われてしまい、OTGが使えない。
まあ、もともと大画面なスマホなので、OTGとHDMI両方を同時に使う必要もなかろう。

OTGについては、SDカードリーダーで試したが、難なくメディアスキャナが走り、認識できた。USBマウスについては、ThinkPadキーボードマウスには対応していないようで、動かなかった。

当面は、デジタル一眼で撮った写真のアップに使おうかなと思う。

2012/02/26

Google日本語入力におけるShift+SpaceでIMEのOn/Off切り替え

すでにいろんなサイトにいろんな情報があるが、
自分の情報としてまとめておきたいので、メモ。

61c61
< Composition Shift Space Convert
---
> Composition Shift Space IMEOff
130a131
> DirectInput Shift Space IMEOn
148c149
< Precomposition Shift Space InsertAlternateSpace
---
> Precomposition Shift Space IMEOff

なぜShift + spaceかって?
ShiftとSpaceはどんなキーボードを使っても、ほぼ定位置にあるからだ。
Ctrlや半角/全角キーは、キーボードによって位置が違っているので、使用するキーボードにあわせてIMEトグルのやり方を考えないといけないとか、非常に無駄である。

2011/12/06

rootedなGalaxy note GT-N7000でOpenVPNをサクッと動かす。

先日、OpenVPNをiPot touch で動かして、公開Web鯖にしてしまおう、というpostをしたが、それに続き、今回はGalaxy Noteでやってみた。

Galaxy Noteは、メモをとるのに特化しているというユーザー視点からうれしいだけではなく、
・iPod touchにくらべるとはるかにハイスペック
・しかも/dev/tunがデフォでサポートされている
という、大きな利点があって、開発者としてもうれしい。
# ls -l /dev/tun
crw-rw---- vpn      vpn       10, 200 2011-12-06 17:46 tun

ようするに、root権をとって、OpenVPNのバイナリさえ引っ張ってこれば、この前iPod touchでやったようなことが、より高性能・高機能なハードで実現できるということだ。
ちなみに、このへんの情報を見るに、Galaxy S2でも同じようにできそう。持ってないからしらんけど。

rootとる
ぐぐれば出てくるので簡単に概要だけ。
「zergRush」というバイナリでrootシェルに入る。

suバイナリを/system/xbin/ に放りこむ

busybox --install /system/xbin で、コマンドセットを放り込む

ls と su だけはオリジナルのものを使う
# cd /system/xbin/
mv ls ls.org
ln -s /system/sbin/ls ls
みたいな感じで。

OpenVPN
前準備として、以下が必要
adb shell
# mkdir /system/xbin/bb
# cd /system/xbin/bb
# ln -s /system/xbin/ifconfig ifconfig
# ln -s /system/xbin/route route
これをしないとVPN接続時に変なエラーが出る。
---(参考)---
Tue Dec  6 21:08:53 2011 Linux ifconfig failed: could not execute external program
Tue Dec  6 21:08:53 2011 Exiting
↑/system/xbin/bb/ifconfig がないとき

Tue Dec  6 21:13:29 2011 ERROR: Linux route add command failed: could not execute external program
Tue Dec  6 21:13:29 2011 ERROR: Linux route add command failed: could not execute external program

↑/system/xbin/bb/route がないとき
 -----------------
以上の準備がそろえば、あとはバイナリ(→http://github.com/downloads/fries/android-external-openvpn/openvpn-static-2.1.1.bz2)を 適当な場所に放り込んで、
./openvpn --config client.conf
で動いた。client.confや、鍵はPCとかiPod touch で用いたものと同様の構成のもの。