[Android Software/Hacking General [Developers Only]] AdamOutler:
This will solve all of your problems...

Requirements:

1. root

2. busybox

3. remove apps from SDCard (use titanium backup)

4. Place any Ubuntu variant img in /sdcard/ubuntu/ubuntu.img

note: img should be EXT4 filesystem format

#! $SHELL
#AndBuntu
#Android 2.2 Ubuntu launcher
#Copyright 2011 Adam Outler
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#Generate a ubuntu.img file on Ubuntu with the following commands:

# cd ~/Desktop
# sudo apt-get install rootstock
# sudo rootstock --dist maverick --seed lxde,tightvncserver,openoffice.org,gimp,ssh, -fqdn localhost --login ubuntu --password ubuntu --imagesize 3800M --notarball --fullname "Ubuntu for Android" --kbmodel pc104 --locale en_US.UTF-8 --serial ttyS0 --doswap --swapsize 256M

#This will generate a *************.img file. Rename this file "ubuntu.img".
#Copy this script and your new ubuntu.img file to your android's /sdcard/ubuntu/ folder
#Open any Terminal Emulator and execute this script with the following command:

# cd /sdcard/ubuntu
# su
# sh uboot

clear
helpfulExit (){
echo "The command executed failed. please search for this
command on Google. If that fails, try www.UbuntuForums.org."
exit
}

echo "Setting up environmental variables."
export UbuntuLoopFS=/sdcard/ubuntu/ubuntu.img
export UbuntuMountPoint=/data/local/mnt
export PATH=/system/bin:/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
export USER=root
test "$SHELL" = "" && export SHELL="sh"
echo "Environment is: $SHELL"
Dependency=""
echo "Verifying dependencies..."
Dependency="mount"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="mknod"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="rm"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="ln"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="expr"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="grep"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="chroot"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="sysctl"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
Dependency="umount"
if ! which $Dependency >/dev/null; then MissingDeps="$MissingDeps $Dependency"; fi
if [ "$MissingDeps" != "" ]; then
echo "*********WARNING**********"
echo "MISSING DEPENDENCIES FOUND"
echo "THE MISSING DEPENDENCIES.."
echo "$MissingDeps"
echo "*********WARNING**********"
fi

echo "Remounting root filesystem as rewritable"
mount -o remount,rw -t ext4 rootfs /
if [ $? != 0 ]; then
echo " Failure...
YOU MUST BE ROOT!
*****ERROR*****
command failed
mount -o remount,rw -t ext4 rootfs /
Attemted to mount a new root filesystem as EXT4 and failed.
Your system must be Android 2.2 compatible and support EXT4 filesystems"
echo "trying again.. "

if [ ! -h /system/lib ]; then
cp -r /lib /system/lib
rm -r /lib
ln -s /system/lib /lib
fi

mount -o remount,rw -t ext4 rootfs /
if [ $? = 0 ]; then
echo "Sucessful"
else
echo "FAILED. YOU MUST BE ROOT."
echo "Type 'su' first to attain root access"
echo "The command run was:
mount -o remount,rw -t ext4 rootfs /"
helpfulExit
fi
fi

echo "Attempting to remount /system dir as RW... "
mount -o remount,rw -t ext4 /dev/block/mtdblock3 /system
if [ $? != 0 ]; then
echo " failed...
*****ERROR*****
command was
mount -o remount,rw -t ext4 /dev/block/mtdblock3 /system
Your system must be Android 2.2 compatible and support EXT4 filesystems."
helpfulExit
fi

echo "Removing preexisting loopfs devices."
#rm /dev/loop* 2>&1 >/dev/null

FreeLoop=`losetup -f`
x=${FreeLoop#${FreeLoop%?}}
echo "setting up $FreeLoop"
test ! -e "$FreeLoop" && mknod "$FreeLoop" b 7 "$x"

FreeLoop=`losetup -f`
x=${FreeLoop#${FreeLoop%?}}
echo "setting up $FreeLoop"
test ! -e "$FreeLoop" && mknod "$FreeLoop" b 7 "$x"

x=1
FreeLoop=/dev/loop1
#losetup $FreeLoop /sdcard/ubuntu/ubuntu.img

echo "Checking for interference mount points"
existingMounts=`mount |grep "$UbuntuMountPoint/dev/pts"|awk '{print $3}'`
if [ "$existingMounts" != "" ]; then
umount "$UbuntuMountPoint/dev/pts"
umount "$UbuntuMountPoint/proc"
umount "$UbuntuMountPoint/sys"
umount "$UbuntuMountPoint"
fi

test ! -e "$UbuntuMountPoint" && mkdir "$UbuntuMountPoint"

echo "Mounting $UbuntuLoopFS at $UbuntuMountPoint as EXT4 Filesystem"
mount -o loop,noatime -t ext4 $UbuntuLoopFS $UbuntuMountPoint
if [ -e $UbuntuMountPoint/etc ]; then
echo "Mounted $UbuntuLoopFS as EXT4 loopFS at $UbuntuMountPoint/ubuntu.img"
else
echo "Error in mounting $UbuntuLoopFS as loop EXT4 filesystem
the command executed was
mount -o loop,noatime -t ext4 $UbuntuLoopFS $UbuntuMountPoint
The filesystem may have been of the wrong type. Check to make sure $UbuntuMountPoint falls within the following filesystems:"
mount |grep ext4|sed s/\(.*//
helpfulExit
fi

echo "Mounting $UbuntuMountPoint/dev/pts"
mount -t devpts devpts "$UbuntuMountPoint/dev/pts"
test $? != 0 && echo "Failed mounting $UbuntuMountPoint/dev/pts as devpts filesystem type"
echo "Mounting $UbuntuMountPoint/dev/proc"
mount -t proc proc "$UbuntuMountPoint/proc"
test $? != 0 && echo "Failed mounting $UbuntuMountPoint/proc as proc filesystem type"
echo "Mounting $UbuntuMountPoint/dev/proc"
mount -t sysfs sysfs "$UbuntuMountPoint/sys"
test $? != 0 && echo "Failed mounting $UbuntuMountPoint/sys as sysfs filesystem type"

echo "Setting up network forward..."
sysctl -w net.ipv4.ip_forward=1

echo "checking /etc/resolv.conf s.."
if ! grep "nameserver 8.8.8.8" "$UbuntuMountPoint/etc/resolv.conf" 2>&1 >/dev/null ; then
echo "adding nameserver 8.8.8.8"
echo "nameserver 8.8.8.8" > "$UbuntuMountPoint/etc/resolv.conf"
fi
if ! grep "nameserver 8.8.4.4" "$UbuntuMountPoint/etc/resolv.conf" 2>&1 >/dev/null ; then
echo "adding nameserver 8.8.4.4"
echo "nameserver 8.8.4.4" >> "$UbuntuMountPoint/etc/resolv.conf"
fi

echo "checking localhost entries in /etc/hosts and $UbuntuMountPoint/etc/hosts"
if ! grep '127.0.0.1 localhost' /etc/hosts 2>&1 >/dev/null ; then
echo '127.0.0.1 localhost' > /etc/hosts
echo 'Adding localhost to /etc/hosts'
fi
if ! grep '127.0.0.1 localhost' "$UbuntuMountPoint/etc/hosts" 2>&1 >/dev/null ; then
echo '127.0.0.1 localhost'>"$UbuntuMountPoint/etc/hosts"
echo 'Adding localhost to $UbuntuMountPoint/etc/hosts'
fi

test ! -h /lib && rm -r /lib && ln -s /system/lib /lib

if [ -e "$UbuntuMountPoint/bin/bash" ]; then
echo "Clearing $UbuntuMountPoint/tmp.."
rm -r "$UbuntuMountPoint/tmp"
mkdir "$UbuntuMountPoint/tmp"

#generate quit script
echo "#! /bin/bash">$UbuntuMountPoint/usr/bin/q
echo 'X=`ps 2>&1 |awk '"'"'{print $1}'"'"' |tr -d PID `'>>$UbuntuMountPoint/usr/bin/q
echo 'echo $X'>>$UbuntuMountPoint/usr/bin/q
echo "kill \$X">>$UbuntuMountPoint/usr/bin/q
chmod 777 $UbuntuMountPoint/usr/bin/q

#generate helper script to fix things
echo "#! /bin/bash">"$UbuntuMountPoint/usr/bin/firstRun"
echo 'rm /dev/ptmx
mknod --mode 666 /dev/ptmx c 5 2
/bin/dbus-uuidgen --ensure'>>"$UbuntuMountPoint/usr/bin/firstRun"
chmod 777 "$UbuntuMountPoint/usr/bin/firstRun"

echo "Ubuntu is ready! Chrooting terminal into Ubuntu distribution."
echo "type 'q' to quit"

chroot "$UbuntuMountPoint" "/bin/bash"
else
echo "Failed... Bash is not mounted at $UbuntuMountPoint/bin/bash"
echo "the command executed was
chroot $UbuntuMountPoint /bin/bash"
helpfulExit
fi
#After exit command is executed clear it all up
echo " "

echo "Shutting down Ubuntu"
umount $UbuntuMountPoint/dev/pts
umount $UbuntuMountPoint/proc
umount $UbuntuMountPoint/sys
umount $UbuntuMountPoint

You can VNC into your android after apt-get install tightvncserver.

AndBuntu is the first Android EXT4 compatible image file mounter/chrooter.