OTA-Server

Aus Android Wiki
Dieser Artikel behandelt das Einrichten eines eigenen OTA-Servers. Für Informationen zum Thema OTA allgemein Siehe OTA

Die OTA Funktion in einem Rom ist immer nur die Clientseitige Software um ein Update zu installieren. Damit das Rom überprüfen kann, ob ein Update zur Verfügung steht, und dieses herunterladen kann, benötigt man ein serverseitiges Script, das dann als OTA-Server agiert.

Die Hersteller nutzen dabei Ihre eigenen Server und Scripte. Wenn man allerdings ein eigenes Custom Rom entwickelt, dann möchte man ggf. selbst eine OTA-Funktion einbauen. Zumindest für HTC-Endgeräte hat der xda-Entwickler m0narx in diesem Thread eine Lösung entwickelt.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Bevor wir mit dem Einrichten beginnen, sollte man selbst das Script verstehen und wissen, was beim OTA eigentlich genau passiert. Für die Lösung von m0narx benötigt man für den Server nur 2 Dateien. Einmal checkin und extra. Wichtig für das OTA-Update ist die Datei checkin. Dazu eine kleine Erklärung des Ablaufes: Wenn das Rom auf ein Update prüft, ruft es an sich nur die Adresse, die im HTCOTAClient.apk oder der HTCCheckin.apk Service hinterlegt ist. Diese URL verweist auf die checkin Datei. Wenn das Rom die Datei aufruft, sendet es einige POST Daten. Unter anderem die aktuell installiert Rom Version und die IMEI. Das checkin-Script prüft nun in der MySQL Datenbank, ob dieses Rom schon mal am OTA Server angemeldet war, also bereits auf Updates überprüft hatte. Wenn das Rom noch nicht in der Datenbank eingetragen ist, bisher also auf kein Update überprüft wurde, trägt das checkin Script diese Daten in die Datenbank ein. Dies geschieht in dieser Lösung nur, das man hier auch eine Beta-Tester Funktion hat, dazu später mehr.

Nachdem das Script das Rom in die Datenbank eingetragen hat, überprüft es, ob die übermittelte Rom Version, die aktuell installiert ist, in der Tabelle der verfügbaren Updates vorhanden ist. Genauer gesagt in der Spalte FromVer der Tabelle Fota. Ist dort eine neuere Version (ToVer) vorhanden, so gibt das Script die Werte der Spalten FileSize und Description, sowie die ToVer an das Rom zurück. Das Rom zeigt diese Daten dann an und fragt, ob das Update per WLAN heruntergeladen werden soll.

Das Einrichten des Servers[Bearbeiten | Quelltext bearbeiten]

Das Einrichten des Servers ist mit einigen Anpassungen denkbar einfach, da bereits alle Dateien vorhanden sind und nur noch die Daten eingetragen werden müssen. Es gibt jedoch einige Voraussetzungen.

Voraussetzungen[Bearbeiten | Quelltext bearbeiten]

Die Scripst der Lösung basieren alle auf der Scriptsprache Perl. Ein wichtiger Aspekt bei der Auswahl des Servers ist also, das dieser CGI-BIN/Perl besitzen muss. Die meisten kostenlosen Webhoster bieten diese Funktion leider nicht an. Man sollte im allgemeinen auf die Free-Webhoster verzichten, da es bei einem hohen Aufkommen an Usern sonst zu Zeitüberschreitungen bei der Updateüberprüfung kommen kann.

Die Scripts nutzen zudem als Datenbankmanagementsystem MySQL, diese ist allerdings bei den meisten Free-Webhostern kostenfrei dabei.

Für die Rom-Updates an sich sollte man zudem nicht zu knapp mit dem Speicher umgehen. Wenn man eine vernünftige Updatestruktur aufbauen will, wird man bei einer durchschnittlichen Rom/Update-Größe von 200 MB mit 2 GB Webspace nicht unbedingt weit kommen.

Darauf ergibt sich eine Mindestvoraussetzung für den Webspace: - Unterstützung CGI-BIN/Perl - mind. eine MySQL Datenbank - angemessener Traffic (je nachdem, wie groß die Updates voraussichtlich sein werden) - mind. 4 GB Webspace

Empfohlene Spezifikationen sind allerdings (vom DroidWiki-Team, nicht von m0narx): - Unterstützung CGI-BIN/Perl - Unterstützung HTML/PHP (ggf. zur Einrichtung einer Downloadseite um Updates auch manuell herunterladen zu können) - unbegrenzter Traffic - unbegrenzter Webspace

Anpassung der Dateien[Bearbeiten | Quelltext bearbeiten]

Die benötigten Dateien sind zum Download in dem Thread von m0narx verfügbar. Um diese Nutzen zu können, muss man sie allerdings vorerst anpassen.

checkin[Bearbeiten | Quelltext bearbeiten]

Die Datei checkin kommuniziert direkt mit der MySQL-Datenbank, benötigt also auch direkten Zugirff auf die Datenbank. Dafür sind unter anderem diese Zeilen des Scripts notwendig:

my $db_user_name = 'aaaaaaa'; #Benutzername für die Datenbank
my $db_password = 'bbbbbb'; #Passwort für den benutzer
my $db_server = 'bbbbbb'; #MYSQL Serveradresse, meist localhost (bekommt man meist vom Webhoster)
my $db_name = 'bbbbbb'; #MySQL Datenbankname
my $SHORTROMNAME = "kkk"; #SHORTNAME OF ROM
my $server="http://xxx/fota"; #In dem genannten Ordner sind die Updatedateien hinterlegt
my $crash="http://xxx/cgi-bin/crash"; #Datei benötigt man nicht, sollte aber hier angeben, im gleichen Ordner wie die checkin

Nachdem man die Änderungen gemacht hat, lädt man die Datei auf den Webspace hoch. Ein kleiner Funktionstest kann man machen, indem man die Datei mittels einem Internetbrowser aufruft. Es sollte eine weiße Seite erscheinen, ist dies nicht so, muss man die dort genannten Fehler auswerten.

extra[Bearbeiten | Quelltext bearbeiten]

An der Datei extra muss nichts weiter geändert werden. Diese laden wir einfach auf den Server hoch.

MySQL[Bearbeiten | Quelltext bearbeiten]

Auch die MySQL-Datenbank benötigt eine vordefinierte Tabellenstruktur. Diese ist in dem Paket SQL.zip (zu finden in m0narx Thread) zu finden. Man führt in dem MySQL-Server einfach die FOTA.sql und USERS.sql aus, danach sollte die Tabellenstruktur in der Datenbank vorhanden sein.

weitere benötigte Dateien[Bearbeiten | Quelltext bearbeiten]

In der späteren Anpassung des Roms werden wir Verweise auf weitere Dateien haben. Diese sind allerdings komplett leer, bis auf den Verweis des Persl-Interpretors:

#!/usr/bin/perl -w

Erstellen Sie also folgende Dateien mit dem oben genannten Inhalt und laden Sie diese in den gleichen Ordner wie die checkin:

  • crash
  • iappupdate
  • appupdate_extra

Damit ist die Vorbereitung für den Webspace abgeschlossen.

Vorbereitung für das Rom[Bearbeiten | Quelltext bearbeiten]

Damit das Rom auch unseren gerade eingerichteten Server nach einem Update fragt und nicht den von HTC, müssen wir einige Änderungen an der Datei HTCOTAClient.apk bzw. HTCCheckin.apk (je nach Rom-Basis) bearbeiten. Um dies zu bewerkstelligen, müssen wir zuerst die apk-Datei dekompilieren. Dazu nutzten wir am besten das Tool apk-tool.

Nachdem wir die Datei entpackt haben finden wir im Ordner "smali" die Datei COTAReceiver.smali. Diese öffnen wir mit einem beliebigen Editor und finden wir "ro.build.version.sdk" in der Funktion "composeCheckinMsg()". Den Ausdruck "ro.build.version.sdk" ändern wir in "my.rom.version". Ein paar Zeilen tiefer ersetzen wir "apiLevel" mit "<SHORTROMNAME>_version".

Anschließend kompilieren wir die apk Datei wieder und fügen diese in die Rom ein.

nun müssen wir noch die Datei build.prop anpassen. Die vorher editierten Dateien nutzen nun eine Variable, die wir unter anderem hier definieren. Wir fügen also an die build.pop folgende Textzeilen an:

my.rom.version=1.0.0 #Die aktuelle Rom-Version im Format x.x.x
ro.htc.checkin.url = http://xxx/cgi-bin/checkin #Die URL zum Checkin Script
ro.htc.checkin.crashurl = http://xxx/cgi-bin/crash #Die URL zum crash Script
ro.htc.checkin.url_CN = http://xxx/cgi-bin/checkin #Die URL zum Checkin Script
ro.htc.checkin.crashurl_CN = http://xxx.ru/cgi-bin/crash #Die URL zum crash Script
ro.htc.checkin.exmsg.url = http://xxx/cgi-bin/extra #Url zum extra Script
ro.htc.checkin.exmsg.url_CN = http://xxx/cgi-bin/extra #Url zum extra Script
ro.htc.appupdate.url = http://xxx/cgi-bin/appupdate #URL zum appupdate Script
ro.htc.appupdate.url_CN = http://apu-chin.htccomm.com.cn/check-in/rws/and-app/update #das so lassen ;)
ro.htc.iappupdate.url = http://xxx/cgi-bin/iappupdate #URL zum iappupdate Script
ro.htc.iappupdate.url_CN = http://xxx/cgi-bin/iappupdate #URL zum iappupdate Script
ro.htc.appupdate.exmsg.url = http://xxx/cgi-bin/appupdate_extra #URL zum appupdate_extra Script
ro.htc.appupdate.exmsg.url_CN = http://xxx/cgi-bin/appupdate_extra #URL zum appupdate_extra Script

Nachdem wir alle Anpassungen getätigt haben, speichern wir die build.prop wieder im Rom. Wenn man die Rom installiert hat, wird diese unseren Server nach neuen Updates fragen.

Nutzen des OTA-Servers[Bearbeiten | Quelltext bearbeiten]

Der Nutzen des OTA-Servers ist natürlich, das man neue Updates hinzufügt. Dies geht relativ einfach. Zuerst lädt man die Update-ZIP-Datei in den Ordner, den man in der checkin Datei als Variable $server definiert hat (my $server="http://xxx/fota";). Danach fügt man in der Tabelle fota in der MySQL-Datenbank eine neue Zeile hinzu. Dabei ist die Spalte FromVer die Version, für die das Update gedacht ist, ToVer ist die Version, auf die durch das Update angehoben wird, FileName ist der Dateiname der Update-ZIP-Datei, FileSize ist die Größe des Updates in MB, Description ist die Beschreibung bzw. die Änderungen die in der Version vorgenommen werden, quasi ein Freifeld für Text. Der Punkt IsBeta ist für die Beta-Tester-Funktion, die diese Lösung ebenfalls anbietet.

Nachdem alle diese Einträge erfolgreich vorgenommen wurde, sollten auf allen Geräten, die die installierte Version "FromVer" haben das Update auf die Version "ToVer" angezeigt werden.

Ich habe Probleme/Fehler, was mache ich?[Bearbeiten | Quelltext bearbeiten]

Wenn Ihr Probleme mit der Anleitung habt, oder es zu Problemen mit der Funktion/Einrichtung des Servers kommt, könnt Ihr euch gerne im Thread des Android-Hilfe-Forums[1], welches dieses Thema behandelt, wenden.

Links[Bearbeiten | Quelltext bearbeiten]