30.11.2015

Galaxy S2 mit Cyanogenmod 12.1 installieren und Partitionen ändern

Heute war so ein Tag, an dem ich etwas in Schwitzen gekommen bin, weil ich etwas Neues ausprobieren wollte und mir nicht ganz sicher war, ob es funktionieren würde. Dummerweise wusste ich erst mittendrin während des Updates, dass ich etwas Gefährliches tun muss, damit das Update richtig funktioniert ...

Gute Nachricht vorneweg: alles hat gut funktioniert, ich konnte mir den Angstschweiß abwischen ;). Hier ist ein Beweisfoto:

Aber mal von vorn: da ich noch einige Galaxy S2 zum Testen und Ausprobieren daheim herumliegen habe, und auch noch genug Ersatzteile wie Mainboards und Kleinteile, wollte ich eins davon mit Android 5.1.1 installieren und das aktuellste Cyanogenmod 12.1 drauf werfen.

Also gesagt, getan: erst mal ein halbwegs aktuelles CM 12.1 für i9100 heruntergeladen und ein bißchen Informationen gesammelt, was noch zu tun ist. Dabei habe ich gelernt, dass es empfehlenswert ist, einen für Lollipop angepassten Kernel mitsamt aktuellem Recovery zu flashen. Bei Samsung wird das Custom Recovery zusammen mit einem Kernel geflasht, hier gibt es von verschiedenen XDA-Entwicklern fertige Pakete aus Linux-Kernel und Lollipop-geeignetem Recovery.

Wenn dieser Schritt getan ist (mit Odin als "PDA" flashen), kann man mit dem Samsung-üblichen Dreifingergriff das S2 in den Recoverymodus versetzen und die Zipdatei mit CM 12.1 installieren, und danach wie üblich ein Paket Google-Apps.

Hier hat sich viel für die Bequemlichkeit getan, seit ich das letzte Mal Google Apps herunterladen musste: es gibt ein cooles Projekt bei GitHub, das verschiedene Pakete anbietet, vom Minimalpaket mit gerade mal der Play Store-App ("pico"), über ein Mikro-Paket, das dann schon GMail, GKalender und einige Kleinigkeiten mehr enthält, bis hin zum "Super"-Paket, das wirklich alles enthält, was jemals bei Google aus dem Compiler geworfen wurde.

Das Flashen von CM 12.1 lief wie erwartet glatt, aber dann bekam ich einen kräftigen Schreck beim Flashen der Google-Apps: eine Fehlermeldung "#70" mit eher beunruhigenden Meldungen. Beim Nachschauen in der FAQ des OpenGApps-Projekts stellte ich dann fest, dass die Partition des Speichers im S2, das die System-Apps enthält, nur knapp 600 MB groß ist, und dies nicht ausreicht, um die Google Apps zu installieren. Bislang hat es immer funktioniert, aber Lollipop scheint etwas sehr stark gewachsen zu sein, und nun passten die Google Apps nicht mehr dazu. Das Booten lief trotz des Fehlers beim Flashen einwandfrei, es war also nichts lebenswichtiges zerstört oder unvollständig. Puh!


Mit ein wenig Forschen fand ich heraus, dass es leicht möglich ist, die Partitionsaufteilung des S2 zu verändern, damit die Systempartition mehr Speicherplatz erhält - natürlich zu Lasten des restlichen Telefonspeichers. Bei einem Bastelgerät mit 16 GB Ausstattung ist das natürlich kein allzu großes Problem, und selbst wenn man so ein Gerät dann als Alltagswerkzeug verwenden will, bleibt immer noch die Möglichkeit, eine 32 GB-Speicherkarte zusätzlich einzubauen.

Die Neupartitionierung kann man entweder manuell mit "adb shell" im Root-Modus durchführen und direkt am offenen Herzen des S2 mit dem "parted" Partitionseditor die Größen verändern, oder man verändert die Partitionen mit einem Hilfsprogramm wie Heimdall (für Linux und Windows) oder Odin (nur Windows), das eine Konfigurationsdatei mit der Endung ".pit" verwendet, um den Vorgang zu automatisieren.

Ich war wenig mutig und habe Odin verwendet, nachdem ich mir aus einer Auswahl von fertig vorbereiteten ".pit"-Dateien die ausgesucht habe mit 4 GB für system und den Rest für Daten.

Danach muss im Recoverymodus die Systempartition, die Datenpartition und die simulierte Speicherkarte (üblicherweise "sdcard0" genannt) neu mit einem Linux-Filesystem formatiert werden. Ich empfehle "ext4", das ist erprobt und zuverlässig. Dabei gehen natürlich alle Daten verloren! Es ist also schlau, ein Backup der vorhandenen Inhalte zu machen (Bilder in DCIM usw.). Die Zipdateien für CM 12.1 und die Google Apps sollte man auf eine SD-Karte packen und als externen Speicher ins Telefon stecken. Beim S2 geht das ja, im Gegensatz zu den sonst von mir bevorzugten Nexus-Geräten, die prinzipiell keinen SD-Steckplatz haben.

Genauer gesagt läuft es so ab: unter "advanced" kann man /system, /data, /cache, und /storage/sdcard0 formatieren und dann mounten.

Danach werden mit "install zip" die Zipdatei von CM 12.1 und die Zipdatei der Google Apps installiert und neu gebootet. Die Frage nach dem "fix root" sollte man mit "yes" beantworten, schließlich will man hinterher noch mit "TriangleAway" das lästige gelbe Dreieck beseitigen, mit dem Samsung anzeigt, dass man einen unsignierten Kernel geflasht hat ;). TriangleAway benötigt root-Zugriff. Den muss man im Entwicklermenü dann auch erst aktivieren, CM 12.1 hat den Rootzugriff prinzipiell abgeschaltet, und man muss als Entwickler dann z.B. "Nur Apps" einschalten - oder auch "Apps und ADB", wenn man als Entwickler mit den adb-Befehlen als root arbeiten können will.

Der erste Start des neuen Android-Systems dauert ziemlich lang, weil wie üblich die Java-Dateien in den APK kompiliert und gecache't werden müssen. Seit Lollipop verwendet Android ein neues Verfahren zum Kompilieren und Cache'n, nämlich "ART" und nicht mehr "Dalvik". Dies ist nicht nur aus Performancegründen, sondern auch dem Patentstreit mit Oracle geschuldet. Genauer gesagt ist ART seit Kitkat, also Android 4.4 enthalten, aber nicht als Standardverfahren eingerichtet, und Cyanogenmod hat ausdrücklich erklärt, dass ART auf CM 11 nicht verwendet werden soll. Diese Aussage ist korrekt, ich habe es ausprobiert und hatte permanenten Abstürze der Apps.

Nach dem ersten Start sollte man aus dem Play Store oder von der Speicherkarte TriangleAway installieren. Falls die App nicht aus dem Play Store geladen wird, muss man in den Einstellungen die "unbekannten Quellen" erlauben. TriangleAway lädt einen handgeschnitzten Kernel nach, der genau zum Handymodell passt, startet das Telefon neu, und dann kann man mit der Lautstärketaste "Hoch" den "Flashcounter" wieder auf 0 setzen, damit das lästige gelbe Dreieck nicht mehr auf dem Einschaltbildschirm angezeigt wird.

Da sich der Installationsvorgang bei CM gelegentlich mal ändert, sollte man unbedingt in den Einstellungen einrichten, dass beim Flashen einer neuen CM-Version auch das aktuelle Recovery mit installiert wird. Diese Einstellung findet sich bei den Entwickleroptionen, die man erst sichtbar machen muss. Dazu im Menü "Über das Telefon" siebenmal auf die Buildnummer tippen.

Puh, das war Stress! Wenn man am Partitionslayout herumfummelt, kann es unter Umständen auch böse enden, wenn man eine der Partitionen beschädigt, die das Telefon für die ersten Phasen des Bootvorgangs - vor dem Laden des Linux-Kernels - benötigt. Also auf keinen Fall an den Partitionen für "SBL", "Radio", "Factory" usw. herumfummeln.

[Update 20151204: Links zu Custom Kernels nachgetragen]