Nexus 7 mit Jelly Bean 4.2.2 rooten – und dabei keine Daten verlieren

Was wie ein Traum klingt und mit Android Versionen bis zur 4.1 noch möglich war, funktionierte leider bei allen Usern, die ihr Nexus 7 auf die aktuelle JB 4.2 geupdatet haben nicht mehr. Diesen blieb, wollten sie ein gerootetes Nexus 7 nutzen, nur der Weg über den Unlock des Bootloaders, was zwangsweise auch immer mit dem kompletten Verlust aller auf dem Gerät befindlichen Daten einherging – full wipe. Sowas ist immer dann ärgerlich, wenn man keine vernünftige Art und Weise hat, ein Gerät zu sichern – unter Android ohne root eine einzige Farce. Also beißt sich die Katze in den Schwanz.

Zumindest bis vor wenigen Wochen: nhshah7 von den xda-developers hat das erst kürzlich vorgestellte motochopper root-kit etwas adaptiert und an das Nexus 7 angepasst. Und tatsächlich gibt es nach Ausführen des kleinen Shell-Scripts (unter MacOSX, Windows und Linux) root. Dafür braucht man wirklich nur ein USB-Kabel, einen PC, eine Shell (:D) sowie den USB-Debug-Modus, welcher sich leicht freischalten lässt (Einstellungen -> über das Tablet -> 7x auf die Build-Nummer klicken).

Doch man kann noch mehr! Gedblake von nexus7nexus10.com erklärt gleich noch, wie man nun noch immer mit gesperrtem Bootloader Nandroid-Backups und ganze Custom Roms installieren kann. Ist für mich leider etwas zu viel des Guten, aber wer gerne spielt und seine Herstellergarantie mag 😉

Und wozu? Beispielsweise um über USB-OTG-Adapter nun auf USB-Sticks und SD-Karten zugreifen zu können, was zum bearbeiten der Urlaubsfotos wirklich praktisch sein kann. Oder darf es vielleicht eine Mouse am Tablet sein (was erstaunlich gut funktioniert aber irgendwie dem Bedienparadigma auf natürliche Weise widerspricht)? Wie sieht es denn mit optischen Laufwerken aus – wenn der Strom reicht (bspw. über eine separate USB-Akku-Stromversorgung) ist auch das kein Problem und ich kann auf dem Tablet DVDs ansehen. Schöne, bunte Welt 😀

Linux Installer – eine vollfunktionsfähige LXDE Debian Umgebung unter Android

Klingt das nicht ein bisschen wie ein Traum? Ich finde schon, weshalb mich der Link im Android Market auf den Linux Installer mit Neugier erfüllt hat. Aus diesem Grund hier ein kleines Installationstutorial auf Deutsch und mit spezifischen Erfahrungen zum Sony Ericsson Xperia Pro.

Was man braucht: Ein Android 2.1+ Gerät mit root-Zugriff, minimal 500 MB freien Speicher auf der SD-Karte, für eine grafische Umgebung 1 GB+, W-Lan aufgrund der hohen Datenmenge, etwa eine Stunde Zeit, die Linux Installer App (siehe oben), einen Android VNC-Viewer (bspw. android-vnc-viewer), einen Terminal-Emulator (bspw. Android Terminal Emulator)

Los geht’s

Zunächst stellt ihr sicher, dass alle benötigten Voraussetzungen auch erfüllt sind. Danach öffnet ihr die Linux Installer App. Sie begrüßt euch mit einer Menge root-Zugriffs-Aufforderungen, welche ihr allesamt bestätigt, danach seht ihr die Oberfläche der App. Unser erster Weg führt uns über die Menü-Taste des Telefons in den Punkt “Setup”.

Setup

Auf dem Xperia Pro wird man zunächst mit einer Warnmeldung begrüßt, dass ein Archiv im Stammverzeichnis von Android fehlt. Wir ignorieren die Warnung, klicken auf Override und starten damit die Anwendung an sich, denn letzlich handelt es sich hier im einen optionale Punkt.

Weil wir auf Nummer sicher gehen wollen, dass das zu installierende System keine Daten des Androids zerstört/beschädigt, setzen wir zunächst den Haken im ersten Punkt “Install in a block device”. Ebenfalls haken wir “Use loop file” an. Im Punkt “Preferred Distribution” kann man nun seine bevorzugte Distribution aussuchen, wobei ich persönlich stets auf das aktuell als stable gekennzeichnete Debian, derzeit also Debien 6 (Squeeze) setzen würde. Wir wählen also Debian und im Punkt “Distribution Version” Squeeze. Den Hostname kann man nach belieben verstellen, jedoch ist dies rein ästhetischer Natur und Galoula-ARMEL ist genauso schön wie Kirschwasser oder Rock-Hammer-Linux-Admin. Als “Domain Name” wählen wir “localhost”, die chroot-Punkte  belassen wir in der Standardkonfiguration . Hierauf folgt die Einstellung der “Loop file”, also unserer virtuellen Festplatte. Ich persönlich habe dafür meine SD-Karte ausgewählt und empfehle diese Konfiguration auch deutlich aufgrund des geringeren Risikos, Daten zu vernichten. Das hat aber auch Nachteile, welche zu erklären hier aber nicht hergehört. Um auf die Einstellung selbst zurückzukommen: “/sdcard/Linux.loop”. Die File-Size darf jeder selbst auswählen, jedoch empfehle ich für ein grafisches System mindestens “1024” (1 GB). Alles weitere bleibt bis auf einen Haken, wie es ist: “Allow write to /system” wird angekreuzt.

Zurück ins Menü

Damit das Telefon sich eventuell nicht aus dem W-Lan trennt und damit es beständig mit Strom versorgt wird, schließen wir dieses also zuerst ans Netzteil an und stellen dann das Displaytimeout (Menü -> Einstellungen -> Display -> Timeout) auf den höchsten angebotenen Wert. Hierauf starten wir wieder den Linux Installer und beginnen, das System einzurichten.

Linux Installer, die Zweite

Nachdem der Installer gestartet ist, betätigen wir nun die Schaltfläche “Create target loop”. Das dauert eine kleine Weile, schließlich muss der Speicher auf der SD-Karte belegt werden, und danach klicken wir sogleich auf den daneben liegenden Button “Format target loop”. Damit wird unsere virtuelle Festplatte entsprechend formatiert, sodass das System installiert werden kann. In meiner ersten Installation ging mein Display aus und dann nicht mehr an, weshalb ich meinen Akku herausnehmen und das Telefon neustarten musste. Sollte euch das passieren: Wartet bitte mindestens 5 Minuten, sodass keinerlei Schreibzugriffe mehr auf die SD-Karte passiern, da ihr ansonsten die Karte beschädigt.

Mounten, Herunterladen, Installieren

Ist das alles erfolgreich gelaufen, klickt man nun auf “Mount loop”, um das Laufwerk entsprechend einer CD einzulegen. (Sollte eine Fehlemeldung mit der Überschrift: “Warning: chroot” auftauchen, so beendet diese durch Klick auf Override) Jetzt ändert sich auch die Anzeige im Linux Installer, denn ab sofort sehen wir nur noch zwei Buttons, von welchem wir nun den zweiten anwählen: “Install in loop” Jetzt beginnt das Telefon, sich die entsprechenden Pakete aus den Debian Repositories herunterzuladen und zu installieren. Dies wird mindestens eine halbe Stunde dauern, also habt etwas Geduld. Ihr solltet ebenfalls nicht aus dem Programm heraus oder ins Hauptmenü wechseln, denn dies unterbräche die Installation.

Ab ins Terminal

Ist die Installation abgeschlossen und keinerlei Fehler aufgetreten, so kann man nun getrost aus dem Linux Installer heraus ins Hauptmenü und eine Konsole starten (Terminal). In diese gibt man nun den Befehl “linuxchroot” ein und betritt so die Linux-Oberfläche. Begrüßt wird man mit einer Meldung á la “W: debian stable is already mounted. Entering chroot …” etc. Das ist ein gutes Zeichen und zeugt davon, dass bisher alles ordnungsgemäß funktioniert hat. Prinzipiell war es das auch schon mit der Installation, wenn man kein grafisches System mehr haben will. Von hier aus kann man nun einen LAMP-Server aufsetzen oder ähnliches machen, bspw. gewohnt mit vim arbeiten/surfen 😉

LXDE installieren

Doch was ist Linux ohne grafische Oberfläche? Mächtig, schon, aber manchmal auch ein wenig anstrengend. Also geht es daran, sich einen LXDE Desktop zu installieren. Auch dieser Vorgang dauert noch etwa eine weitere halbe Stunde und auch hier werden wieder viele Daten heruntergeladen und installiert. Um dies zu starten, gebe ich folgendes ein:

apt-get update

apt-get upgrade

apt-get install lxde

Sollten Fragen kommen, quittiere ich diese mit einem großen Y, um der Installation zuzustimmen. Während meiner Installation kann es unter Umständen auch dazu kommen, dass mich der Debian Installer (großes blaues Fenster, graue Pop-Ups, rote Rahmen) ebenso vor die Wahl stellt, bspw. mein Tastaturlayout zu bestimmen. Hier wähle ich aus, was am besten zu mir passt, kann allerdings auch die vorgegebenen Einstellungen beibehalten und zu späterer Zeit abändern.

Weitere LXDE-Voraussetzungen

Ist der Installationsprozess von LXDE abgeschlossen, muss ich aber noch etwas mehr machen, um letztlich auf meine grafische Oberfläche zugreifen zu können. Grundsätzlich brauche ich nämlich die Möglichkeit, unter Android quasi auf meinen virtuellen Bildschirm zu schauen. Dafür nutze ich meinen VNC-Client, aber dieser braucht eben auch eine Andockstation, einen Server. Diesen installiere ich im Debian wie folgt:

apt-get update && apt-get install tightvncserver

Da mein LXDE aber nicht einfach so starten will, da unter anderem dbus in Debian 6 Squeeze ein paar Änderungen mit sich bringt und auch einige Pakete bei der Installation nicht beachtet werden, benötige ich noch etwas mehr. Das installiere ich dann mit den folgenden Befehlen:

apt-get update && apt-get install x11-server-utils xterm

Auch das wieder mit Y durchführen. Jetzt ist alles wichtige installiert, jedoch noch nicht eingerichtet und es kommt etwas Schreibarbeit auf einen zu. Dies ist vermutlich auch der schwierigste Teil auf einem Telefon, denn die Schreibfehler machen die ganze Sache ziemlich kompliziert. Aber egal, auf ihn!

touch /root/.Xresources

chmod 755 /root/.Xresources

nano /root/.vnc/xstartup

Nun befindet man sich in einem “grafischen” Editor. Er basiert auf dem WYSIWYG-Prinzip, was man aus normalen Office-Writern gewöhnt ist. Jetzt heißt es, die richtigen Informationen in die Datei bringen und danach abspeichern. Folgender Inhalt sollte sich in der xstartup befinden, damit der LXDE richtig startet:

#!/bin/sh

xrdb $HOME/.Xresources

xsetroot -solid grey

icewm &

xterm -geometry 80×24+10+10 -ls -title “xterm Desktop: root”

lxsession

exec ck-launch-session startlxde

Nachdem ich diese Zeilen untereinander und genau in dieser Zeichenfolge eingetragen habe, nutze ich die Tastenkombination STRG+X (Leiser-Taste + x) zum Beenden und drücke Y, um die Datei zu überschreiben und quittiere noch einmal mit Enter, damit sich der Editor schließt.

Damit diese Konfigurationsdatei auch ordentlich gelesen werden kann, schreibe ich auch hier noch die Berechtigungen durch

chmod 755 /root/.vnc/xstartup

Den VNC-Server und damit LXDE starten

Nun der abschließende Part: Den VNC-Server starten, sodass ich letztlich mit dem android-vnc-viewer auf mein Debian connecten kann. Dazu schreibe ich folgendes Kommando in die Konsole:

vncserver -geometry 854×480

Hiernach werde ich zweimal nach einem Passwort gefragt, welches sechsstellig sein muss – ein einfaches “000000” tut hier seinen Dienst. Darauf erscheint diese Meldung:

New ‘X’ desktop is rootname:1

 

Starting applications specified in /root/.vnc/xstartup

Log file is /root/.vnc/rootname:1.log

Das ist spitze 😀 Sollte irgendetwas im VNC-Client dann nicht so aussehen, wie ich es gern hätte, kann ich also später durch ein

nano /root/.vnc/rootname:1.log

ansehen, was schiefgelaufen ist und eventuell allein eine Lösung finden.

Der VNC-Client

Jetzt drücke ich wieder die Home-Taste und starte meinen android-vnc-client. Hier trage ich meine im Installationsprozess angegebenen Informationen ein, also

Nickname: linuxchroot

Passwort: 000000

Adress: localhost

Port: 5901

Username: linuxchroot

Ein Klick auf “connect” und schon sehen wir die wunderschöne Oberfläche unsere Debian Squeeze mit LXDE-Oberfläche. Herrlich! Das besondere Schmankerl: Es startet sich automatisch auch xterm, sodass ihr gleich auch von hier aus bequem eure Konsole benutzen könnt, mit welcher ihr in Auszügen gerade schon gut vertraut seid.

 

Moooment. Ich habe den vncserver mehrfach gestartet und sehe aber nichts, werde vom VNC-Client mit “unkown host” zurückgewiesen oder es ändert sich nichts!

Kein Problem. Vielleicht ist es dem ein oder anderen ja schon aufgefallen, als er den vncserver gestartet hat. Der gibt immer wieder eine Zahl nach dem Doppelpunkt an, also bspw. :1 oder :5 oder :99. Dies ist eine inkrementell wachsende Zahl in meiner aktuell gestarteten Debiansitzung. Sie beginnt wieder bei :1, wenn ich im Terminal “exit” eingebe und damit das System stoppe und dann wieder über “linuxchroot” starte. Doch wozu all die Info? Ganz einfach: Der Port im VNC-Client (also hier die 5901) entspricht in den letzten Ziffern immer der Angabe des vncservers. Startet dieser also den Server :12, so muss ich auch den Port 5912 angeben.

Um hier anzuschließen: Sollte das ganze System mal etwas träge werden, so seid euch sicher, dass tatsächlich nur ein X-Server läuft. Habt ihr mehrere gestartet, so schließt diese alle mittels

vncserver -kill :$

, wobei $ hier für die Zahl eures Servers steht.

 

Quellen:

Yanzicjustnubie’s Blog

archlinux Forum

Lost and Found