I bought my Samsung Galaxy S2 in 2011, and it's still going strong. It really was a great phone for the time and held up incredibly well. Unfortunately, Samsung's support has ended long ago, and users are stranded with an obsolete (and insecure) firmware.
Fortunately, CyanogenMod still provides relatively recent images for the device. As of this writing, snapshots of CM11 (based on Android 4.4) are available, but there are no images of CM12.
Here is how I flashed CM11 to my phone. This is based on the official CyanogenMod wiki page for the SGS2 and on this xda-developers post. Since you can brick your phone if you don't know what you are doing, I suggest reading both of these pages. Note that you will need to factory-reset your phone, so backup all your data (files, apps, SMS, contacts, ...).
All the following steps have to be performed on a root shell on Linux.
To start from a clean slate, create a new Debian Jessie chroot (you may need to
debootstrap first). Don't use LXC/Docker/VMWare here, you need raw
host# mkdir sgs2-flash-chroot host# cd sgs2-flash-chroot host# debootstrap jessie . host# mount --bind /dev/ dev host# mount --bind /sys sys host# mount --bind /proc proc
Copy the following files to
- cm-11-20141115-SNAPSHOT-M12-i9100.zip: CyanogenMod image
- gapps-kk-20140105-signed.zip: Google Apps package; note that version >= 20140606 may not work: check the WARNING section on the CM wiki.
- zImage (from GT-I9100_JB_ClockworkMod-Recovery_220.127.116.11.tar): Recovery kernel
- Recovery_CWM_18.104.22.168_I9100.zip: Newer recovery image required to install CM >= 11.
Boot the phone into download-mode (shutdown, then VOLDOWN + HOME + POWER) and connect to the Linux computer.
host# chroot . chroot# apt-get install heimdall-flash android-tools-adb chroot# heimdall print-pit chroot# cd /tmp chroot# heimdall flash --KERNEL zImage --no-reboot
Disconnect the USB cable and hold POWER until the phone shuts down. Reboot into recovery (VOLUP + HOME + POWER, let go of POWER after 5 seconds or you'll trigger a reboot). Then reconnect the USB cable.
chroot# adb devices # Check if device recognized. chroot# adb push Recovery_CWM_22.214.171.124_I9100.zip /emmc
In recovery, select "install from zip file" to flash the new recovery image.
Then go into advanced -> "reboot recovery". Mount
/storage/sdcard0 in the
recovery menu, then reconnect the USB cable.
chroot# adb devices # Check if device recognized. chroot# adb push cm-11-20141115-SNAPSHOT-M12-i9100.zip /storage/sdcard0 chroot# adb push gapps-kk-20140105-signed.zip /storage/sdcard0
Again, in recovery, select "install from zip files", first install the CM image, then the GApps package. Select "reboot" to boot into CyanogenMod. Shut down again, reboot into recovery, wipe cache and perform factory reset, reboot into CM (avoid factory reset with stock kernel due to the "super brick" problem).
Done. You should now have a not-so-shiny-anymore Galaxy S2 running a new-and-shiny CyanogenMod 11. Enjoy :-)