node.js on android
最近流行りのnode.js(と言っても、だいぶん前だが。)をandroidで動かそう。なんとnode.jsは、android1.6であるIS01でも動作した。しかし、そのためには、以下の手順が必要となる。
簡単な手順は以下の通りとなる。
IS01をroot化
androidでnode.jsを動作させるためには、今回の手順では、root権限が必要になる。共有ライブラリを置くためにlibディレクトリを作成する必要があるためだ。
今回は、手っ取り早くroot化するために、MobileHackerz再起動日記: au IS01のroot権限を奪取する(ビルド番号01.00.09版)を使用する。
リンク先の手順に沿って、行えば簡単にrootを取ることができる。
注意点としては、
- USBデバッグをオンにする
設定→アプリケーション→開発→USBデバッグ
- ChainsDDのSuperuserをインストールしておく
Android Marketからインストールする
- 何回もトライする
程度である。
qemuを使って、linux on arm 環境を構築
qemuを使うと、ARM系のCPUをエミュレートして、仮想環境を構築することができる。qemu上にdebianをインストールして、その上でnode.jsをビルドする。すると、ARM系で動作するnode.jsのバイナリが手に入る。
qemuの環境構築は、HugeDomains.com - Shop for over 300,000 Premium Domainsを参考にした。
以下、手順である。私の環境は、ubuntu 10.4である。
qemuのインストール
$ sudo apt-get install qemu qemu-kvm-extras
イメージの取得と実行
手っ取り早くインストール済みのdebianのイメージファイルを取得する。
$ wget http://people.debian.org/~aurel32/qemu/armel/debian_lenny_armel_small.qcow2 $ wget http://people.debian.org/~aurel32/qemu/armel/initrd.img-2.6.26-1-versatile $ wget http://people.debian.org/~aurel32/qemu/armel/vmlinuz-2.6.26-1-versatile
linux on arm 環境で、node.jsをビルド
node.jsのビルド方法は、普段のやり方となんら変わらない。node.jsの複数バージョンを管理してくれるnaveを使っても良いし、ソースコードからそのままビルドしてもよい。ここでは、簡単にソースコードからビルドする手順をメモしておく。
$ sudo apt-get install build-essential libssl-dev curl $ mkdir tmp $ cd tmp $ wget http://nodejs.org/dist/node-v0.3.1.tar.gz $ tar -xvzf node-v0.3.1.tar.gz $ cd node-v0.3.1 $ ./configure $ make $ sudo make install
V8エンジンのビルドオプションを修正する必要がある。
$ vi node-v0.3.1/deps/v8/SConstruct # node-v0.3.1の場合、SConstructの128行目あたりの「CCFLAGS」に「'-march=armv5t'」を追加。 126 'gcc': { 127 'all': { 128 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv5t'], 129 'CXXFLAGS': ['$CCFLAGS', '-fno-rtti', '-fno-exceptions'], 130 },
Node.jsの実行ファイルと共有ライブラリをtarで固めて、Androidに持っていく。
$ tar pcvf node.tar /usr/local/bin/node /lib/librt* /usr/lib/libssl.so.0.9.8 /usr/lib/libcrypto.so.0.9.8 /lib/libdl* /usr/lib/libstdc++* /lib/libm.so.6 /lib/libm-2.7.so /lib/libgcc_s.so.1 /lib/libpthread* /lib/libc.so.6 /lib/libc-2.7.so /lib/ld-linux.so.3 /lib/ld-2.7.so /usr/lib/libz.so.1*
Android上のterminalでrootになり、以下のコマンドを実行する。
$ su # tar xvf node.tar # /usr/local/bin/node --version v0.3.1