Hallo zusammen,
da Smartphones inzwischen ja schon mit Mulitcore-CPUs arbeiten, die im GHZ-Bereich getaktet sind und auch RAM im GB-Bereich zur Verfügung haben stellt sich natürlich die Frage, ob es denn nicht möglich währe das Handy mit Ubuntu zu betreiben. Und ja - es ist möglich, wenn auch etwas eingeschränkt gegenüber einem normalen Laptop/PC.. Vorweg möchte ich folgendes klären:
Was kann das Ubuntu auf dem Smartphone?
Man kann eine grafische Oberfläche installieren (vorzugsweise etwas kleineres wie LXDE o.ä.)
Man kann (fast) alle Programme die man sonst so nutzt auch benutzen, sprich FireFox, Thunderbird, LibreOffice usw.
Was kann das Ubuntu auf dem Smartphone NICHT?
Telefonieren/SMS und solche Sachen
Sound abspielen
Was nützt mir mein Handy, wenn ich nicht mehr Telefonieren kann?
Nichts natürlich. ABER man kann immer noch weiter das Android nutzen das installiert ist, denn das Ubuntu läuft "im Hintergrund", verhält sich also für den Anwender in etwa wie eine APP. Somit ist man in keinster Weise eingeschränkt, sondern kann die Funktionalität seines Handys um viele Applikationen erweitern, die für Android nicht zu haben sind.
Was muss mein Handy für Voraussetzungen erfüllen damit ich darauf mit Ubuntu arbeiten kann?
Es muss einen gerooteten Kernel haben der auch loop-devices unterstützt (Das tun die meisten Root-Kernel). Wie man den da drauf bekommt ist von Handy zu Handy unterschiedlich und es wird hier auch nicht näher darauf eingegangen. (Es sei aber noch erwähnt, dass die meisten Hersteller (z.B. Samsung,Google) die modifizierten Kernel/AndroidROMs ausdrücklich unterstützen und auch Technologien zur Verfügung stellen damit man diese Sachen benutzen kann. Allerdings verfällt dabei meistens die Garantie)
Man sollte irgendwo 4GB Speicher zur Verfügung haben, vorzugsweise auf einer SD-Karte. Denn falls das Ubuntu viele Lese/Schreibzugriffe durchführt und dadurch den Speicherplatz irgendwann einmal beschädigt kann man eine SD-Karte einfach tauschen, internen Speicher dagegen nicht.
▶ So, jetzt gehts los:
Schritt 1: Das Ubuntu-Image herunterladen
Es gibt Ubuntu-Images, die speziell für ARM-Server angefertigt wurden. Das ist für unseren Zweck ideal, denn somit stimmt schon die Architektur und es ist noch kein Schrott vorinstalliert, den wir garnicht möchten. Das Image gibt es hier: http://www.ubuntu.com/download/server/arm
Schritt 2: Image aufsplitten und neues Image erstellen
Zuerst muss das heruntergeladene Image (Endung .img.gz) extrahiert werden, da es noch komprimiert ist. Am einfachsten ist es, z.B. im Dateimanager einen Rechtklick auf die Datei zu machen und dann "Hierher entpacken" o.ä. zu wählen. Man erhält dann eine reine Image-Datei (.img)
Nun entält das Image aber 2 Partitionen, eine zum booten und dann das System. Wir brauchen aber nur das System und holen es uns da raus. Dazu sehen wir uns das Image zuerst etwas genauer an:
[user@myhost]$ cd /pfad/zum/extrahierten/image [user@myhost]$ parted ubuntu-11.10-preinstalled-server-armel+omap4.img WARNUNG: Sie sind nicht root. Achten Sie auf Ihre Rechte. GNU Parted 3.0 Verwende /home/username/Downloads/ubuntu-11.10-preinstalled-server-armel+omap4.img Willkommen zu GNU Parted! Geben Sie 'help' ein, um eine Liste der verfügbaren Kommados zu erhalten. (parted) unit Einheit? [compact]? B (parted) print Modell: (file) Festplatte /home/simon/Downloads/ubuntu-11.10-preinstalled-server-armel+omap4.img: 1548746752B Sektorgröße (logisch/physisch): 512B/512B Partitionstabelle: msdos Nummer Anfang Ende Größe Typ Dateisystem Flags 1 16384B 75497471B 75481088B primary fat32 boot, lba 2 75497472B 1548746751B 1473249280B primary ext4 (parted) quit [user@myhost]$
Die Systempartition hab ich mal gelb markiert. Um die da rauszubekommen benutzen wir dd:
[user@myhost]$ dd if=ubuntu-11.10-preinstalled-server-armel+omap4.img of=ubuntu_small.img bs=512 skip=147456 count=368312320
Die Werte für skip und count berechnen sich folgendermaßen:
skip = (Anfang der Systempartition 75497472) / 512 = 147456
count = (Größe der Systempartition 1473249280) / 4 = 368312320
Nun haben wir unser eigentliches Ubuntu da rausgeholt. Es heißt "ubuntu_small.img" weil es im Moment noch zu klein ist, d.h. es würde zwar laufen, aber wir hätten kaum Platz Programme/Oberflächen etc. nachzuinstallieren, desshalb folgt Schritt 3.
Schritt 3: Das Image vergrößern
Dazu brauchen wir erst einmal eine neues Image in der gewünschten Größe. Ich wähle nahezu 4GB, es währe auch mehr möglich, aber das FAT32 der SDKarte macht bei Dateien größer 4GB die Grätsche (Man kann aber auch EXT3/4-Support in Android einbauen, dann kann man auch problemlos viel größere Images benutzen).
[user@myhost]$ dd if=/dev/zero of=/pfad/zum/image/ubuntu.img bs=1000 count=4000000
Somit haben wir dann endlich das "richtige" ubuntu.img. Nur ist das im Moment noch mit 0ern gefüllt, somit müssen wir den Inhalt aus ubuntu_small.img in ubuntu.img hineinkopieren. Das erfolgt in mehreren Schritten:
Schritt 3.1: Ein Dateisystem erstellen:
[user@myhost]$ mkfs -t ext3 -q ubuntu.img
Schritt 3.2: Die Images mounten:
[user@myhost]$ mkdir /mnt/ubuimgold [user@myhost]$ mkdir /mnt/ubuimgnew [user@myhost]$ losetup /dev/loop0 /pfad/zum/image/ubuntu_small.img [user@myhost]$ losetup /dev/loop1 /pfad/zum/image/ubuntu.img [user@myhost]$ mount /dev/loop0 /mnt/ubuimgold [user@myhost]$ mount /dev/loop1 /mnt/ubuimgnew
Schritt 3.3: Die Dateien kopieren:
[user@myhost]$ cd /mnt/ubuimgold [user@myhost]$ cp -a ./* /mnt/ubuimgnew/
Schritt 4: Anpassungen vornehmen
Wenn wir mit dem Dateimanager nach /mnt/ubuimgnew gehen haben wir dort unser Ubuntu liegen - und so können wir auch gleich noch ein paar Konfigurationsdateien ändern, damit das ganze dann auch anständig funktioniert.
Zuerst einmal die Paketquellen, denn es könnte sein, dass in Quellen für die Server-Images bestimmte Software nicht enthalten ist. Dazu die Datei /etc/apt/sources.list öffnen, die original-Paketquellen aukommentieren (ein Schweinegatter # vor die jeweiligen Zeilen) und folgende Quellen am Ende der Datei hinzufügen:
deb http://ports.ubuntu.com/ubuntu-ports oneiric-backports universe main multiverse restricted deb-src http://ports.ubuntu.com/ubuntu-ports oneiric-backports universe main multiverse restricted #Added by software-properties deb http://ports.ubuntu.com/ubuntu-ports oneiric-proposed universe main multiverse restricted deb-src http://ports.ubuntu.com/ubuntu-ports oneiric-proposed universe main multiverse restricted #Added by software-properties deb http://ports.ubuntu.com/ubuntu-ports oneiric-updates universe main multiverse restricted deb-src http://ports.ubuntu.com/ubuntu-ports oneiric-updates universe main multiverse restricted #Added by software-properties deb http://ports.ubuntu.com/ubuntu-ports/ oneiric-security universe main multiverse restricted deb-src http://ports.ubuntu.com/ubuntu-ports/ oneiric-security universe main multiverse restricted #Added by software-properties deb http://ports.ubuntu.com/ubuntu-ports oneiric main universe multiverse restricted deb-src http://ports.ubuntu.com/ubuntu-ports oneiric main universe multiverse restricted #Added by software-properties
❗ Das "oneiric" muss natürlich an die aktuelle Version angepasst werden!
Als nächstes die Datei /etc/resolv.conf ändern (sonst funktioniert der Internetzugang nicht). Dort ist normalerweise nur ein Kommetar drin, der sagt dass diese Datei leer ist. Den rauslöschen und dafür das da eintragen:
nameserver 8.8.8.8 nameserver 8.8.4.4
(Hier sei noch angemerkt dass das bei meinem Handy funktioniert (Samsung Galaxy S2), wie es bei anderen Handys aussieht weis ich nicht! Würde mich aber über Reaktionen diesbezüglich freuen ☺ )
Schritt 5: Image bearbeitung abschließen:
Jetzt ist unser Image soweit fertig und könnte gestartet werden. Dazu hängen wir das Image wieder aus:
[user@myhost]$ umount /mnt/ubuimgold [user@myhost]$ umount /mnt/ubuimgnew [user@myhost]$ losetup -d /dev/loop0 [user@myhost]$ losetup -d /dev/loop1
Schritt 6: Handy vorbereiten:
Schritt 6.1: Dateien auf das Handy kopieren
Jetzt muss unser Zeuch auf das Handy, ich kopiere es immer auf die SD-Karte. Wie man die SD-Karte am Computer anschließt bleibt sich egal, ich mach es immer mit einem extra-USB-Adapter, weil das schneller geht als über das Handy. Somit erstelle ich zuerst im Wurzelverzeichnis der SD-Karte einen Ordner mit dem Namen "ubuntu". Dort hinein kopiert ihr dann auch das Image das wir oben erstellt haben (also das ubuntu.img). Was jetzt noch fehlt ist ein Skript, um sich in Ubuntu einzuloggen. Dieses speichert ihr als "ubushell.sh" ebenfalls in den Ubuntu-Ordner und fügt folgenden Inhalt ein:
#!/bin/sh ################################################################## # Ubuntu/LXDE bootscript for Samsung Galaxy S (and others) # ################################################################## # by Martin Rhodes (fire314)- martin.rhodes@gmail.com # # compiled with trial and error and help from a number of blogs. # # credits: coralic, David Jensen, debdroid, blog commenters, XDA # # Tested on Ultimate 7.0 and Darky 9.3 # ########################################################################### # to re-enable error output, remove the " > /dev/null 2>&1" from commands # ########################################################################### echo "WARNING: If you have more than 255 apps installed on the SDCard, then mounting the ubuntu.img will fail!" echo echo "Apps on the SDCard associate with an encrypted loop device, and there are only 256 available to the system." echo echo "You have to go to Settings -> Manage Applications -> On SDCard, and move some apps back to phone storage in order to free up a loop device for ubuntu. Make sure you reboot the phone after doing this, then try again." echo echo "Please wait while entering the chroot-environment..." echo ################################################################################### # export environment variables # ################################################################################### export HOME=/root export USER=root export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH export TERM=vt100 ################################################################################### ######################################################## # make directories required by the chroot environment # ######################################################## busybox mkdir /data/local/mnt > /dev/null 2>&1 busybox mkdir /data/local/mnt/proc > /dev/null 2>&1 busybox mkdir /data/local/mnt/sys > /dev/null 2>&1 busybox mkdir /data/local/mnt/dev > /dev/null 2>&1 busybox mkdir /data/local/mnt/dev/pts > /dev/null 2>&1 busybox mkdir /data/local/mnt/sdcard > /dev/null 2>&1 busybox mkdir /data/local/mnt/external_sd > /dev/null 2>&1 ######################################################## ########################################################### # create a loop far, far away and mount ubuntu.img on it # ########################################################### busybox mknod /dev/block/loop255 b 7 255 > /dev/null 2>&1 busybox losetup /dev/block/loop255 ./ubuntu.img > /dev/null 2>&1 busybox mount -o noatime /dev/block/loop255 /data/local/mnt > /dev/null 2>&1 ########################################################### ###################################################################### # mount the phone's sdcard storage so it's accessible from ubuntu # ###################################################################### busybox mount -o bind /sdcard /data/local/mnt/sdcard > /dev/null 2>&1 busybox mount -o bind /sdcard/external_sd /data/local/mnt/external_sd > /dev/null 2>&1 ####################################################################### ################################################################# # mount linux system on our chroot environment and chroot to it # ################################################################# busybox mount -t proc proc /data/local/mnt/proc > /dev/null 2>&1 busybox mount -t devpts devpts /data/local/mnt/dev/pts > /dev/null 2>&1 busybox mount -t sysfs sysfs /data/local/mnt/sys > /dev/null 2>&1 # The next 3 lines are addet by Simon Schumann echo "******* Your chroot-environment is starting now - welcome to ubuntu! ********" chroot /data/local/mnt /bin/bash echo "******* You exited the chroot-environment... please wait ********" ################################################################# ######################################### # chroot exited: umount everything # ######################################### echo echo "Exiting chroot environment and sync'ing memory to storage.." echo "DO NOT EXIT until finished - doing so may corrupt the ubuntu.img!" echo busybox sync busybox umount -f /data/local/mnt/sys > /dev/null 2>&1 busybox umount -f /data/local/mnt/dev/pts > /dev/null 2>&1 busybox umount -f /data/local/mnt/proc > /dev/null 2>&1 busybox umount -f /data/local/mnt/sdcard > /dev/null 2>&1 busybox umount -f /data/local/mnt/external_sd > /dev/null 2>&1 echo "Everything is shot down - you can exit the terminal now. Have a nice day :)" ##########################################
Wie man am Anfang des Skripts sehen kann stammt das ganze nicht von mir, ich hab es nur leicht modifiziert 😉 Ich werd aber beizeiten mal ein eigenes schreiben.
Schritt 6.2: Benötigte Apps installieren:
Um das ganze jetzt starten zu können müssen noch folgende Apps aus dem Market installiert werden
Terminal emulator: https://market.android.com/details?id=jackpal.androidterm#?t=W251bGwsMSwxLDIxMiwiamFja3BhbC5hbmRyb2lkdGVybSJd
(Nicht unbedingt benötigt, aber Ratsam) SSH-Server: https://market.android.com/details?id=berserker.android.apps.sshdroid&feature=search_result#?t=W251bGwsMSwxLDEsImJlcnNlcmtlci5hbmRyb2lkLmFwcHMuc3NoZHJvaWQiXQ..
(Nicht unbedingt benötigt, aber Ratsam) Eine bessere Tastatur: https://market.android.com/details?id=org.pocketworkstation.pckeyboard&feature=search_result#?t=W251bGwsMSwxLDEsIm9yZy5wb2NrZXR3b3Jrc3RhdGlvbi5wY2tleWJvYXJkIl0.
Schritt 7: Ubuntu starten
Jetzt kommt der spannende Teil: Wir loggen uns das erste mal in das Ubuntu ein!
Dazu öffnen wir die Terminal-Emulator-App und tippen folgendes:
su
Jetzt wird man gefragt, ob man der Anwendung root-rechte gewähren möchte, diese Meldung mit "ja" bestätigen
cd /sdcard cd external_sd cd ubuntu sh ubushell.sh
(Den Pfad muss man natürlich anpassen, so dass man auch da landet wo man seine Dateien hinkopiert hat, in meinem Fall der ubuntu-Ordner im Wurzelverzeichnis der SD-Karte) Jetzt sollte es kurz Dauern, dann wird etwas Text vorbeilaufen, eine Meldung erscheinen die sagt dass man sich jetzt in der chroot-Umgebung befindet und schluss und letztendlich die Eingabzeile erscheinen - jetzt ist man in Ubuntu drin!
Jezt könnt ihr z.B. erst mal ein "apt-get update" und anschließend "apt-get upgrade" durchführen. Und wie ihr warscheinlich erkennen werdet ist es relativ aufwendig das immer alles mit der Handytastatur einzutippen (wenn man keine Hardwartastatur hat). Desshalb könnte man jetzt die SSH-Server-App starten (sofern man sich in einem WLAN mit einem PC befindet) und dann auf dem PC im Terminal "ssh root@xxx.xxx.xxx.xxx" eintippen. xxx.xxx.xxx.xxx ist durch die IP des Handys zu ersetzen (Wird von der SSH-App angezeigt). Dann noch das Passwort eingeben (Default = "admin") und dann hat man auf dem PC die Shell des Handys. Dort kann man sich dann genauso in das Ubuntu einloggen und hat eine gute Tastatur unter den Fingern.
Um Ubuntu zu wieder zu verlassen einfach "exit" eintippen (Funktioniert aber auch noch nicht so perfekt... Um das Ubuntu wirklich zu 100% zu verlassen das Handy am besten neu starten)
Schritt 8: Ubuntu einrichten
Jetzt wollen wir ja nicht nur ein Ubuntu auf Konsolen-Basis haben, sondern auch eine grafische Oberfläche. Dazu loggt ihr euch wieder in Ubuntu ein und installiert LXDE und VNC
apt-get install lxde tightvncserver
Wenn das ganze installiert ist legt ihr noch 2 Skripte im /root-Ordner an, eines um die grafische Oberfläche zu starten (xinit.sh):
rm /root/.vnc/localhost* tightvncserver :0 -geometry 800x480
Ihr müsst die Auflösung natürlich an die eures Handydisplays anpassen, die 800x480 passen für das Samsung Galaxy S2
Und um eines um die Oberfläche wieder zu beenden (xkill.sh):
tightvncserver -kill :0
Um LXDE zu starten geht ihr in Ubuntu nach /root und führt "sh xinit.sh" aus.
Um jetzt auch mit dem Desktop arbeiten zu können müsst ihr die VNC-app mit folgenden Einstellungen starten:
Nickname: einfach leer lassen
Passwort: Wenn ihr xinit.sh das erste mal ausführt werdet ihr aufgefordert ein Passwort auszusuchen, das schreibt ihr jetzt da rein
Address: localhost
Port: 5900
Color Format: 24bit
Dann auf "Connect" klicken. Nun sollte der lxde-Desktop zu sehen sein. Jetzt macht ihr das Optionen-Menü auf und wählt als input-device das "Touchpad" aus. Das bewirkt, dass sich der Touchscreen wie das Touchpad eines Laptops verhält, d.h. de Cursor bewegt sich in die RICHTUNG in die ihr den Finger bewegt (Er springt nicht da hin wo ihr mit dem Finger aufsetzt). Ein einfacher Klick ist ein einfacher Klick, Rechtsklick könnt mir mit einem Doppelklick machen. Einen Doppelklick kann man anscheinend leider nicht via VNC simulieren..
Jetzt könnt ihr Firefox/LibreOffice/Wasauchimmer installieren und benutzen. Es ist auch möglich die Konfigurationsordner eines PCs zu benutzen (um z.B. die Accounts für Pidgin zu übertragen). Das geht am einfachsten wenn die SSH-Server-App immer noch läuft und ihr dann im Dateimanager auf eurem Computer in der Adresszeile "sftp://root@xxx.xxx.xxx.xxx" (die x sind wieder die IP des Handys) eingebt. Die Ubuntu-Verzeichnisse findet ihr dann unter /data/local/mnt.
Ich hoffe das diese Tutorial vielleicht dem einen oder anderen etwas zum experimentieren anregen kann.
Natürlich ist vieles noch nicht ausgereift, ich habs auch erst gestern soweit bekommen, dass das ganze bis hierher funktioniert.
Wer Fehler findet oder Verbesserungsvorschläge hat - Unbedingt posten! ☺ Des weiteren würde mich natürlich interessieren inwiefern den das so auch auf anderen Handys als dem SGS2 funktioniert.
Viele Grüße
-schumi-
PS: Ich war jetzt sehr unentschlossen wo ich das hinposten soll, wenn das ein Moderator besser zuordnen kann - bitte verschieben ☺
Moderiert von tomtomtom:
Bitte um Verschiebung nachgekommen.