<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<META content="MSHTML 6.00.6001.18063" name=GENERATOR></HEAD>
<BODY id=MailContainerBody 
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px" 
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true" 
name="Compose message area">
<DIV><FONT face=Arial size=2>So, I figured I'd give a status report on what I've 
been doing with improvements to the Debian installation for the G1, and it has 
turned into this e-mail.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>What I really want (and what I think many of us 
want) to be able to do is to have / be Debian and have the Android folders just 
live comingled into the process. Using unionfs, as documented on my website, 
mostly satisfies this need but fails to totally solve the problem as we've been 
noticing issues with a few system services (things like being unable to turn off 
wifi). It also makes it difficult to install some packages as they might need to 
create folders or files at /, which is on the rootfs (stored in 
RAM).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>In order to accomplish this, I have been working on 
making massive improvements to init. Specifically:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>1) added "chdir" and "chroot"</FONT></DIV>
<DIV><FONT face=Arial size=2>2)&nbsp;setup "move" flag for mount</FONT></DIV>
<DIV><FONT face=Arial size=2>3) added "include" for init.rc files</FONT></DIV>
<DIV><FONT face=Arial size=2>4) finished implementing "trigger"</FONT></DIV>
<DIV><FONT face=Arial size=2>5) "mknod" that can wait for a device</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>I then modified the base init.rc file to include 
/system/init.rc and /data/init.rc as these partitions are brought online and 
trigger system and userdata, respectively. This way you can tack more 
initialization sequences in simple ways (the update image can store stuff in 
/system/init.rc and the end user can store stuff in /data/init.rc).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>BEGIN diversion</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>While working on this, I also made some other 
improvements (including to the kernel), and have released a replacement 
update.zip that I'm using as a base to work on all of this. Some other 
enhancements I have included are:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>1) included Android's /system/xbin folder for a 
real su (rather than just a setuid sh), among other useful tools</FONT></DIV>
<DIV><FONT face=Arial size=2>2) compiled crypto_core and other small features 
into the kernel that allow more types of loadable modules to work</FONT></DIV>
<DIV><FONT face=Arial size=2>3) applied the complete unionfs patch (rather than 
hacking the unionfs module to not require it)</FONT></DIV>
<DIV><FONT face=Arial size=2>4) included a small set of kernel modules 
(including ext2 and unionfs) in /system/modules with a modules.dep</FONT></DIV>
<DIV><FONT face=Arial size=2>5)&nbsp;</FONT><FONT face=Arial size=2>upgraded 
busybox to 1.12.1, fixed its losetup to use /dev/block/loop* and its modprobe to 
use /system/modules</FONT></DIV>
<DIV><FONT face=Arial size=2>6) at Jesus Freke's suggestion, setup /system/xbin 
(and later /system/modules) to mount from a compressed image</FONT></DIV>
<DIV><FONT face=Arial size=2>7) added a <A 
href="mailto:loop@filename">loop@filename</A> feature to init (check out 
/system/init.rc for an example) to make #6 possible</FONT></DIV>
<DIV><FONT face=Arial size=2>8) removed the annoying "E:Can't open 
/cache/recovery/command"&nbsp;error message from the recovery image</FONT></DIV>
<DIV><FONT face=Arial size=2>9) turned off Android's "paranoid sockets" feature 
to make using the network as non-root work as expected on Unix</FONT></DIV>
<DIV><FONT face=Arial size=2>10) applied the compcache kernel patch (currently 
unused) in the hope of later being able to obtain a compressed swap</FONT></DIV>
<DIV><FONT face=Arial size=2>11) setup the busybox shell in the recovery image 
so you can "adb shell" while in recovery mode (as root, of course)</FONT></DIV>
<DIV><FONT face=Arial size=2>12) a (mostly useless) usleep command for init 
(really only to help when debugging race conditions during boot)</FONT></DIV>
<DIV><FONT face=Arial size=2>13) switched to using a more modern tcp flow 
control algorithm (I think, it might be that it was the default 
anyway)</FONT></DIV>
<DIV><FONT face=Arial size=2>14) compiled in some minor kernel features, 
specifically /dev/{k,}mem and kernel module versioning</FONT></DIV>
<DIV><FONT face=Arial size=2>15) probably a really small change or two that I'm 
forgetting as it was almost certainly not important ;P</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>This file can be downloaded from here:</FONT></DIV>
<DIV><FONT face=Arial size=2><A 
title="http://cache.saurik.com/android/updates/signed-kila-srk-116143.1.zip&#10;CTRL + Click to follow link" 
href="http://cache.saurik.com/android/updates/signed-kila-srk-116143.1.zip">http://cache.saurik.com/android/updates/signed-kila-srk-116143.1.zip</A></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>It can be installed to a G1 using the standard 
method: place on the root of your SD card as "update.zip", boot into recovery 
(hold Home while booting), hit Alt-L followed by Alt-S, and then wait while the 
phone reboots itself a few times.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>END diversion</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>I then wrote a /data/init.rc that used the new 
commands to mount the second partition of the SD card to /mnt and pivot it to /. 
This has not yet worked correctly: none of the devices seem to be working 
correctly when I do this, although I believe I will be able to defeat this in 
the near future (as I bet it is just some sockets that are failing to be created 
in the right place). Specifically, you can't use the keyboard, the touchscreen, 
you have no signal and it doesn't know the remaining battery life ;P. Other than 
that, you know... it works /great/! (It does, in fact, boot up, start running 
things, even render the display correctly.)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>There is a second issue, which is that the /sdcard 
folder does not mount correctly while the second partition is mounted :(. This 
should be fixable, but I currently do not know where in the pipeline the problem 
actually lies. More information can be found starting in the middle of the 
following thread on the android-porting Google group:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><A 
title="http://groups.google.com/group/android-porting/browse_thread/thread/a67cbe36603d429a&#10;CTRL + Click to follow link" 
href="http://groups.google.com/group/android-porting/browse_thread/thread/a67cbe36603d429a">http://groups.google.com/group/android-porting/browse_thread/thread/a67cbe36603d429a</A></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>If there's anyone else out there that wants to play 
with this, you should:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>0) somehow repartition your SD card and get that 
all setup (I have things like a static build of parted that helps with this, but 
right now this should only be done by people who know how to do this type of 
thing ;P)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>1) install the above signed-kila-srk-116143.1.zip 
update</FONT></DIV>
<DIV><FONT face=Arial size=2>2) add the following source to 
/etc/apt/sources.list.d:</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; deb <A 
href="http://apt.saurik.com/">http://apt.saurik.com/</A> lenny main</FONT></DIV>
<DIV><FONT face=Arial size=2>3) apt-get install android-base (gives you the 
right mount targets)</FONT></DIV>
<DIV><FONT face=Arial size=2>4) put the (attached) file (my current best 
attempt) as /data/init.rc</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>END status</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>So, things that still need to be done:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>** Debian on /:</FONT></DIV>
<DIV><FONT face=Arial size=2>1) the hardware obviously needs to work, but 
hopefully this will be easy</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>2) /sdcard needs to work when the second partition 
is mounted (can be put off)</FONT></DIV>
<DIV>&nbsp;</DIV></FONT></DIV>
<DIV><FONT face=Arial size=2>** Debian at All:</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>1) we need a libnss_android (so that glibc can do 
things like resolve uid/gid's and do DNS correctly)</FONT></DIV>
<DIV>2) something needs to be done to connect the init systems together, so that 
Debian's daemons start</DIV>
<DIV>&nbsp;</DIV>
<DIV>I don't know if anyone is willing to, for example, help with 
libnns_android: its a rather decomposable task that mostly requires C knowledge, 
but there is definitely some room here for people who want to get involved in 
this process. ;P</DIV></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Sincerely,</FONT></DIV>
<DIV><FONT face=Arial size=2>Jay Freeman (saurik)</FONT></DIV>
<DIV><FONT face=Arial size=2><A 
href="mailto:saurik@saurik.com">saurik@saurik.com</A></DIV></FONT></BODY></HTML>