Saturday, April 5, 2014

Linux on Android using Complete Linux Installer: Hiccup and Fix!

The benefit of having a full linux distribution running on android device, such as Asus transformer Prime/Infinity, is up to who you are. For me as a developer, it's really a great platform for me to play around with new language, practice new skill and, experiment with new tools without mass up with my work notebook. For sys admin, it's quite a nice to have a full bowl linux to work on ... And I think Complete Linux Installer does a good job helping me to setup a linux distribution on android device.

Nothing perfect thou. There are a few hiccup ... a few annoying issues which may or may not have a fix for it. Keep in mind, the app allow to have a full linux running on android by chroot to a linux image, and connect to it with vnc or ssh. There will be some issues that there is no solution for it (or there is but I don't know :p)

Where is my eth0?

First hiccup after boot the system is this error message:
If connecting from a different mach ... android device use the address below:
eth0: error fetching interface information: Device not found

This is a simply the /root/init.sh expect the network interface to be "eth0". Unfortunately, that is not always true. To find out which interface you have, use "ifconfig". In my case, it is "wlan0".

To fix this, simply edit /root/init.sh script. Change "eth0" to "wlan0", in my case, and you will be done.




How much disk space I have?, "df" issue

This is quite annoy when simple command like "df" (diskfree) doesn't work at all. It's not report any thing. This is because the "df" command can not read file table which provide this information. Fortunately, there are easy solution for issue if all you want is to see how much disk space available.

By simply alias "df" to take which file system to report on, it's solve the problem. This time you edit /root/.bashrc script to add alias, as shown. This fix is only report disk space on "/" and "/sdcard", and it's not useful for other system tools which require to have device information.


Where is my external sdcard?

Like me, you probably have external microsd card install with the system. Is the "/sdcard" refer to this external sdcard? ... No it's not. It's the internal sdcard that come with the prime tablet.

Sorry to say, I don't know the answer to this question because the external sd card is mount on "/Removable/SD" which can not be access in the chroot system. There might be a way to allow access to /Removeable/SD from the chroot system, but I do not know now. If you know, please comment below. :)

Can I create normal account? What do I need to know?

Obviously, running the system as root is not a good idea. First thing, create a user using command
$ adduser new_user

What you need to do after that is adding the new_user to the following groups:
This will allow new_user to use network and also access both read and write to internal sdcard.

I also recommand to add new_user to group: sudo, users, ssh, and crontab if you plan to use it.

However, it's still booting directly to root! Obviously, you can just type

$ su -l new_user

And you will be right at home. However, it's an extra step to do after boot, which kinda annoying.
However, we can do this automatically but edit "/root/init.sh" once again.


The line "/bin/bash -i" is responsible for spwan a shell. We just has to replace that line with
"/bin/su -l new_user" and the system will boot directly to the new_user.

That's it! for today. See you next post ... which I will try to get more memory to the system by enabling swap image. :)

Using Linux on Android with Complete Linux Installater and debian testing-Large image.

If you have android tablet/phone and you wish to use full linux on it. You are in luck. I am running one on Asus Transformer Prime. You need to root the device thou. You can find out how to root your device from xda-developers.com.

Here is going to be my experience with "Complete Linux Installater" app, which you can find it on the app store for free. There is also a donation version too, $3.50.

What I like about Compete Linux Installer, is simplicity, good guide line and various of distribution of linux you can choose from. 

I start with debian testing (Jessie) small image. It's 2GB image file, and very easy to setup ... just follow the instruction and it will be done in second after long downloading and extracting of the image. There are a few hiccup that might consider annoying. I have fixed some of these "hiccup", and shared with you later.

Setup with debian testing LARGE image file:

Get back to my major issue. Since 2GB is too small after I try to get some serious work on it, I try debian testing LARGE image. This time it's not that simple any more. I find couple major issues with it.

Get The Right File:

First of all, the zip large image that I download by follow the app is damaged and can not be extract. I try different mirrors, always get the same result. So I googling and find this 

which you can directly download. Notice that there are couple of  images you can download from,
debian-testing, debian-8.LARGE.ext2 and debian-8.LARGE.ext4 ... The question is which one?

If you follow the app, it will download debian-8.LARGE.ext2 file, which about 500MB. This is the damage one. Since debian-8.LARGE.ext4 is about the same size, it's also damage one. The one that you have to download is

debian-testing.LARGE.ext4 (1.0GB) file.

Change the Script:

After a long wait for downloading and extracting, I expecting this image should work like a charm! ... Unfortunately, the bootscript is expecting the file system to be ext2, not ext4.  This can be solved pretty easily by changing the bootscript. The bootscript.sh is located here:
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh
Use any editor you like, obviously :) ... and looking for the word "ext2", and the line is look some thing like this:
$bbox mount -t ext2 /dev/block/loop255 $mnt
$bbox is refer to "busybox" which the app provided. You can change to the one that you like, but I won't recommend. $mnt is the mount point, which is /data/local/mnt. Since the large image that I download is using ext4, I would have to change "ext2" to "ext4". The line become:
$bbox mount -t ext4 /dev/block/loop255 $mnt

At this point you should be about to boot up the debian testing LARGE image with ext4 file system, and enjoy 3.5gb space!

Next post, I am going to talk about hiccup that annoyance me and how I fix it.