Differences between revisions 11 and 13 (spanning 2 versions)
Revision 11 as of 2012-07-30 14:55:55
Size: 2740
Editor: ?AndreasKloeckner
Revision 13 as of 2012-10-14 10:14:44
Size: 2915
Editor: PaulWise
Comment: android sometimes uses nosuid too
Deletions are marked like this. Additions are marked like this.
Line 17: Line 17:
  sudo debootstrap --arch=armel --variant=minbase --foreign squeeze /media/PHONE\ CARD/squeeze http://mirror.local:9999/debian   sudo debootstrap --arch=armel --variant=minbase --foreign squeeze /media/PHONE\ CARD/debian http://http.debian.net/debian
Line 26: Line 26:
{{{#!wiki note
If you have a local mirror, replace the URL above with your local mirror.
Line 29: Line 33:
  mount -o remount,exec,dev /mnt/sdcard/
  chroot /mnt/sdcard/squeeze/ /bin/bash -l
  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
mount -o remount,exec,dev,suid /mnt/sdcard/
  chroot /mnt/sdcard/debian/ /bin/bash -l

Installing a Debian chroot on Android

This is an account of installing vanilla full-fat Debian squeeze in a chroot on Android.

This was tested on a Vodafone 845 ( a re-branded HuaWei u8120 / Joy / Ascend).

  • First, the phone was rooted by side-loading z4root

  • CyanogenMod 7.2.0-RC0 22b was flashed. This might not be necessary though

  • Set CPU to 710 MHz with the interactiveX governor. YMMV

  • Side-loaded SSHDroid
  • The SD card was formatted with the MBR scheme and a single ext3 partition was created. 15 sectors were left over

Then, on a workstation ( any architecture), insert the µSD card, and:

  sudo debootstrap --arch=armel --variant=minbase --foreign  squeeze  /media/PHONE\ CARD/debian  http://http.debian.net/debian

You might want to consider using --arch=armhf if your phone supports ARMv7. Note that then you also need to change squeeze to at least wheezy if not sid.

If you have a local mirror, replace the URL above with your local mirror.

Then remove the µSD card and replace it in the phone, start SSHDroid (which provides chroot command). Then SSH to the phone, then:

  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  mount -o remount,exec,dev,suid /mnt/sdcard/
  chroot /mnt/sdcard/debian/  /bin/bash -l
  debootstrap/debootstrap --second-stage

Then build up the Debian system as you normally would a minimal installation.

Many thanks to all the people whose hard work made it so trivial for me to install the environment I know and love on my phone.

Available memory

Android pre-loads applications ( in some case that the user has never started) when there is free memory. This reduces the memory available to applications in a chroot.

It looks like the *_MEM properties in /init.rc along with the /sys/module/lowmemorykiller/parameters/minfree could help.

Zygote starts ?SystemServer and ?SystemServer restarts zygote, so simply killing one of them won't work. Instead, "mask" zygote from the system and then kill it:

Go to the Android root ( start telnetd -l /system/xbin/bash from Android if you wish to telnet localhost from your chrooted SSH), then:

mkdir /dev/bin
cp -a /system/bin/* /dev/bin/
cd /dev/bin/
mv app_process app_process.orig
ln -s sleep-forever app_process # have to compile sleep-forever first
mount -o bind /dev/bin /system/bin
killall zygote # actually killed the pid because I don't have killall yet

If you wish to save some RAM them use symlinks instead.

The display is now blank and ready for SDL. The input devices only partly work with SDL on the 8120 ( write your own code to read /dev/input/event*) but graphics work well.