i9000 ICS – CyanogenMod 9 Alpha

One of the things that I look for in a phone is community support. For me there are two main reasons this is important: 1) It’s nice to have a large group of people you can ask questions of, or an active forum you can search for answers on 2) When later versions of Android are released, that community will hopefully build a version for your phone.

If you’ve been watching the tech news, there have been rumors that Samsung will support Ice Cream Sandwich (ICS) on the Samsung Galaxy S (SGS) and claims that it won’t. The latest news appears to be that they will not upgrade the device, a bit sad as it was only released 18 months ago. So not even kept current through the length of most cell company contracts. This is one area where the iPhone has done right for the consumer.

If you’re interested in getting ICS for your i9000 (or in my case the i9000m) skip over to the XDA Forum and read through the huge thread. The team behind it are the same folk who helped bring CyanogenMod to the SGS originally and are now working on CM9. This is an alpha, there will be rough edges and I don’t suggest people leap in unless they are very brave.

I originally tried Build 11 and that didn’t work well enough for me to switch from the 7.1 stable I was on but it was close. Build 12 appears to be quite good, with a few changes I needed to make for my usage, specifically adding dropbear (SSHD) and rsync so I can do nightly backups (which I’ll talk about at the end of this post).

The forum thread has these instructions for people coming from CM7

 Upgrading from CM7?

  1. Do a Nandroid Backup!
  2. WIPE (wipe data/factory reset + wipe cache partition)
  3. Install the ROM from internal sdcard using ClockworkMod (CWM) Recovery
  4. Optionally install the Google Addon

I would recommend that you consider getting CM7 first, it’s a good base to work from and there will be better how to and help to get it working. Experience there will translate over to working with the ICS Alpha.

Here are my steps I used when moving to ICS .

  • Do some backups of your application data
    Backup SMS using SMS Backup+
    Backup Plume settings (and any other apps that support backup)
  • Take some screenshots of your home screens, nice reference to what you have. Also consider grabbing a list of the apps you have installed
  • Reboot into recovery – perform a backup in CWM
    “backup and restore -> Backup”
  • Mount USB mode in CWM
    ” mounts and storage -> mount USB storage”
  • Copy backup to PC (just in case something really bad happens)
  • Copy new ICS Alpha files to phone
    teamhacksung_galaxysmtd-ota-eng.BUILD12.zip
    gappsv7.1.zip
  • Now wipe from CWM
    “wipe data/factory reset”
    “wipe cache partition”
  • Install the two .zip files we copied above, build12 first.
    At this point my heart always stops, as during the install of the firmware, the phone will reboot suddenly. Do. Not. Panic.
    It will automatically boot into ICS after the install. Now optionally reboot into recovery to install gapps.

There is a list of known issues in the main thread, you can post bug reports there but please search the thread so you don’t ask something obvious. There is another thread for discussion (ie: anything that is not a bug report).

Each time I’ve done this type of upgrade I seem to get burned by the Android Market treating the new ROM as if it were a new device, thus it doesn’t restore any of my apps. Good thing I had taken a backup of the list above. Having done this a few times, using a desktop web browser to the Market and installing from there to my phone is much faster.

My experience so far

The good stuff:

  • ICS is very, very pretty
  • Recent applications with preview is cool
  • Quick access to camera on lock screen is nice
  • Web browser handling of multiple windows more like iOS Safari
  • Calendar is a big improvement, phone interface much nicer too
  • It has USB mode instead of MTP

Why it’s still an alpha

  • I was unlucky and had a sync problem with the calendar
    This is a known problem with a solution – flash the gapps_fixer.zip
  • Every once in a while the lock screen has no touch response, lock/unlock again with power button fixes
  • I had mapped long press menu to search, that CM feature isn’t supported (yet?)
  • I miss “quiet times” from CM – using Sound Manager v2 to get same function
  • Power-off sound comes a while after screen is dark – I disabled the sound to resolve

So far no major issues. Only 1 of the ~50 apps I use indicated it wasn’t compatible – and I’m sure that’s just how they’ve tagged it in the market. The battery life appears to be about the same as CM 7.1.

One observation was my modem didn’t change from KG3 unlike my experience flashing CM7 where the modem did change, it seems my understanding of how the modem is updated (or not) is flawed.

I also briefly tried out a pure AOSP from Onecosmic and while it seems a bit more mature than the CM9 Alpha, it didn’t fit what I wanted (personal taste).

Getting SSHD and rsync working

I had previously written about getting SSHD working on CM7.1 and that I used rsnapshot to do incremental nightly backups of my phone. This has saved me at least once when my phone got very sick and needed to be wipe and freshly installed, having a day old backup was nice. Also when going from version to version I’m able to grab configuration details like the dropbear configuration – this allows me to reuse the same keyed ssh login without having to repeat the entire setup.

The ICS Alpha was missing dropbear. It turns out that the version from CM7.1 can be used – I specifically picked the ones from nightly build 181.

First you need to remount the /system filesystem to be read-write.

mount -o remount,rw /dev/block/mtdblock2 /system

Grab dropbear, dropbearkey and rsync and put them in /system/xbin. Make sure to use chmod 755 on them to make them executable. Probably a good idea to reboot after this.

As I’m going to re-use my configuration files from my backup, I don’t need to use the setup steps from my blog post – I just use the abbreviated version below, but if you’re doing this clean follow the original write up.

# mkdir /data/dropbear
# mkdir /data/dropbear/.ssh

Copy the following files from backup to the phone

/data/dropbear/.ssh
/data/dropbear/.ssh/authorized_keys
/data/dropbear/dropbear_rsa_host_key
/data/dropbear/dropbear_dss_host_key

Then just fix the permissions

# chmod 755 /data/dropbear /data/dropbear/.ssh
# chmod 644 /data/dropbear/dropbear*host_key
# chmod 600 /data/dropbear/.ssh/authorized_keys

The ICS Alpha is also missing the ability to set the hostname, you can hack around it by using the following command.

# setprop net.hostname yourhostname

And of course, we need to launch dropbear

# dropbear -s -g

I still need to figure out how to get these into a script that will run on reboot, for now I’m just doing the last two command manually after every reboot.

Ubuntu 11.10 Oneiric Ocelot

I’ve been running Ubuntu as my home desktop for quite some time, and it’s been at least a couple of years since I did a clean install. I’ve moved motherboards and drives over that time and upgraded the distribution many times. Generally the upgrades resulted in improvements. Moving to 11.04 (Natty Narwhal) resulted in a change to the new Unity interface, I had seen and used it previously on a netbook so it wasn’t completely new to me. Having only recently upgraded to 11.10 a few things busted which I’ll write about here. I’ll focus on things that I noticed breaking between 11.04 and 11.10, but some of the tips will apply in general.

Some of these issues will be due to my avoidance of doing a fresh install, if you’re really stuck – make a backup and do a fresh install and work forwards. One day I’ll get organized enough to build a script that lets me restore my preferred state “fresh” from a clean install – a lot of that script could likely be built by introspecting the current install. More likely is that people will push most of their data into “the cloud” and the desktop will become pretty much throw-away. My Android phone is starting to work a lot like that it seems (but I rebuild it from a clean install more often than I want to admit).

Issue 1 – Automatic login. I rarely reboot my machine, but when I do I don’t want to be bothered with a login. For my personal desktop I’m ok with the less secure mode (work is a different story). This busted in 11.10, fortunately the fix was out there.

Search for "User Accounts" application. Select the account you want to autologin Toggle the Automatic Login switch to On

Issue 2 – Suspend stopped working in 11.10, well as I rarely reboot/power off – I need my machine to suspend. Attempts to suspend would appear to almost suspend, but immediately resume to the lock screen. Looking at the log file /var/log/pm-suspend.log helped me spot something odd:

Running hook /etc/pm/sleep.d/05_xhci resume suspend:
FATAL: Module xhci not found.

The log didn’t indicate this was causing a problem, but it seemed suspicious. I had added this file when I got the Core i3 as suspend wasn’t working. Well, it turns out removing this file fixes my suspend problem.

Issue 3 – I now needed to disable the lock screen on resume. This took a bit more digging to find the solution to, but again it was very simple once I found it. Simply run the following in a terminal.

gsettings set org.gnome.desktop.lockdown disable-lock-screen 'true'

In 11.10 the default mail application is now Thunderbird, which I used to use back when I was on Windows XP but stuck it out with Evolution when I moved to Ubuntu. I haven’t switched so I’m still on Evolution, but it’s clear Evolution isn’t quite right in 11.10 or the settings migration due to change in db shape was busted. I’ll have to sort that out at one point.

When I moved over to Unity in 11.04, I was missing a couple of the nice task bar indicators. I found Caffeine 2.2 to give me support for disabling auto sleep, and System Load Indicator 0.2 for some stats on the task bar.

I’ll toss out one other link to tweaks by Steve Klondik, I didn’t use any but it was a good reference.

no-www

This blog is hosted on my own domain, ever since the start I’ve supported finding my site as lowtek.ca or www.lowtek.ca.

WordPress allows you to do some simple URL rewriting to push people to whatever you want, and I had configured things to push visitors to www.lowtek.ca/roo since the ‘www’ seemed like the right thing to do. I never really thought much about it until I came across no-www.org.

No-www.org strives to make the Internet and communications about it as fruitful as possible. To that end, we make the modest proposal that website makers configure their main sites to be accessible by domain.com as well as www.domain.com.

This makes a lot of sense, and any site that supports they consider a Class A site. They define a further level of no-www support as Class B, and consider this optimal no-www compliance level. There is also Class C, but is not recommended.

Thus lowtek.ca has been a Class A compliant no-www site all along. However just the other day I switched things around to be Class B – allowing both www.lowtek.ca and lowtek.ca to work, but redirecting people who visit www.lowtek.ca to simply lowtek.ca. I had two reasons that motivated me: 1) lowtek.ca is shorter 2) I’m working on getting a SSL certificate and having the short name allows me to reuse it for other things (like mail) if I want.

To make the change I needed to address a couple of things. First step was to go to all of the wordpress blogs I host and change the General Settings to make sure wordpress wasn’t going to try to rewrite the URL to have a www prefix. Failure to do this will result in a broken site as you get a rewrite/redirect loop.

Next I had to do battle with my apache configuration. This is something I’m sure would be easier if I was a better web server admin. I ended up adding the rewrite rules to the sites-available definition(s) I use, one for normal HTTP and the other for HTTPS. Many suggest using .htaccess but I would rather this was codified in my actual apache config files.

The no-www.org FAQ has a rewrite rule, but I ended up using

RewriteCond %{HTTP_HOST} ^www.lowtek.ca$ [NC]
RewriteRule ^(.*)$ http://lowtek.ca$1 [R=301,L]

The [NC] specifies ‘no case’, ie: case insensitive. The R=301 specifies that we’re redirecting, and the HTTP code is 301 ‘Moved Permanently‘. The L indicates this is the last rule, as you can have multiples.

Now my domain validates with no-www.org as a Class B implementation.

There is a downside to the no-www movement, but only for larger sites. This is likely why Google continues to have a www prefix. Cookies that are set from domain.com can be read by anything.domain.com. For small sites like mine, this has no impact, for larger sites it could be a problem.