From: http://blog.amt.in/nodejs-on-android
I'm trying to make the recently popular (well, maybe not so recently) Node.js run on Android. So far, I've succeeded
in getting it to run on the ISO1, a smartphone running Android 1.6, but only by doing the following.
Here
are the basic steps:
Root
the IS01
Use
qemu to build a Linux on an ARM environment
Use
the ARM Linux environment to build Node.js
Copy
the Node.js binary to the IS01
Rooting
the IS01
This
step requires root permissions on Android to get Node.js running, since we need to create a lib directory in which to place shared libraries.
To
root the device quickly, we'll follow the directions in the MobileHackerz Blog: Getting
Root Permissions for the au IS01, build 01.00.09(Japanese).
Following
the directions there is an easy way to get root.
Things
to watch out for:
Turn
USB debugging on.
Settings => Applications => Development => USB debugging
Install
ChainsDD Superuser.
Install it from the Android Market
Try
repeatedly until it works.
Using
qemu to build Linux on an ARM environment
Using
qemu allows us to emulate an ARM CPU, and build a virtual environment. We'll install debian on qemu, and from there build Node.js. This will get us a Node.js binary that can run on an ARM processor.
For
details about building the qemu environment, I used Himajime’s
site for ARM emulation.
The
procedures are as follows. I'm using Ubuntu 10.4.
Install
qemu
$ sudo apt-get install qemu qemu-kvm-extras
Get
and execute the image
Now
we grab the installed Debian image file.
$ 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
Run
Debian on qemu
Execute
the following command to start Debian on qemu.
$ sudo qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.26-1-versatile
-initrd initrd.img-2.6.26-1-versatile -hda debian_lenny_armel_small.qcow2
-append "root=/dev/sda1" -m 256 -redir tcp:2222:10.0.2.15:22 -redir tcp:8124::8124
Keep
the following in mind:
The
above has been formatted to display, but should be executed on one line
Memory
is allocated by specifying -m 256
Connections
via ssh over port 2222 on localhost are enabled by specifying -redir tcp:2222:10.0.2.15:22
Access
over port 8124 is checked by specifying -redir tcp:8124::8124
Using
the ARM Linux environment to build Node.js
We
can build Node.js using the usual method. We could also use nave to manage multiple versions of Node.js, or build as-is from the source code.
$ 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
The
build options for the V8 engine need to be changed.
$ vi node-v0.3.1/deps/v8/SConstruct
# For node-v0.3.1, add '-march=armv5t' to 'CCFLAGS', around the 128th line.
126 'gcc': {
127 'all': {
128 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv5t'],
129 'CXXFLAGS': ['$CCFLAGS', '-fno-rtti', '-fno-exceptions'],
130 },
Use
tar to archive the Node.js executable and shared libraries, and move them to 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*
Get
root on the terminal in Android, and execute the following commands:
$ su
# tar xvf node.tar
# /usr/local/bin/node --version
v0.3.1
This
is translated version of a Japanese article originally
written by Tom Hughes-Croucher who is working in joynet.
This
article was translated by @jedschmidt.
Special
Thanks to @jedschmidt &
Tom Hughes-Croucher!