Einrichtung eines F-Droid-App-Repos

F-Droid.org ist die Standardpaketquelle (Repository, Repo) im F-Droid-Client, aber es ist nicht die einzig mögliche. Jeder kann sein eigenes Repo erstellen, und Anwender können steuern, welche Repos ihr Client verwendet, sogar inklusive der Deaktivierung des Standardrepos von f-droid.org. Dieser Modellaufbau ähnelt dem in der Debian GNU/Linux Distro. Wie in Debian und Ubuntu können Sie auch Ihr eigenes Repo einrichten, das jeder nutzen kann. Maßgeschneiderte Repos müssen nicht einmal die APKs erstellen, sie können nur “einfache Binärdatei-Repos” mit allen APKs sein.

Übersicht

Wenn Sie ein einfaches binäres Repository von APKs und Paketen pflegen wollen, die Sie an anderer Stelle erhalten haben, ist der Prozess recht einfach:

  1. Server-Tools einrichten
  2. erstellen Sie ein Verzeichnis mit dem Namen fdroid, führen Sie dann fdroid init in diesem Verzeichnis aus
  3. Bearbeiten Sie optional die config.py nach Ihren Vorlieben, detaillierte Beispiele sind in ./examples/config.py
  4. In fdroid erstellen Sie ein Verzeichnis namens repo und legen APK-Dateien darin ab.
  5. Führen Sie fdroid update aus.
  6. Bei Meldungen zu irgendwelchen fehlenden Metadatendateien können Sie sie im Verzeichnis metadata erstellen und den Vorgang wiederholen.
  7. Um die Erstellung von Metadatendateien zu vereinfachen, führen Sie fdroid update mit der Option -c aus. Sie wird ein ’Gerüst’ der fehlenden Metadatendateien erstellen, und Sie können sie danach einfach bearbeiten und die Einzelheiten in sie eintragen.
  8. Haben Sie die Sachen verändert, wiederholen Sie schließlich fdroid update.
  9. Das Ausführen von fdroid update fügt ein icons-Verzeichnis in das Repo-Verzeichnis ein und erstellt auch die Repository-Indexdateien (index.xml, index.jar, etc.) HINWEIS: um diesen Prozess sicher zu machen, lesen Sie Real World Setup unten!
  10. Veröffentlichen Sie den resultierenden Inhalt des Verzeichnisses repo auf Ihrem Webserver (oder setzen Sie serverwebroot in Ihrer config.py und verwenden Sie dann fdroid server update)

Nach dem obigen Prozess wird ein repo-Verzeichnis erstellt, das Sie einfach an einen beliebigen HTTP- (oder vorzugsweise HTTPS-) Server pushen müssen, um es zugänglich zu machen.

Während einige Informationen über die Anwendungen (und deren Versionen) direkt aus den APK-Dateien abgerufen werden, stammen die meisten aus der entsprechenden Datei im Verzeichnis metadata/. Die Metadaten-Datei, die ALLE Versionen einer bestimmten Anwendung abdeckt, heißt package.id.yml, wobei package.id die eindeutige Kennung für dieses Paket ist. Alle Build-Metadatenfelder sind für binäre APKs relevant, mit Ausnahme von Builds:-Einträgen, die weggelassen werden sollten.

Lokales Demo Repo HOWTO

Dies ist ein vollständiges HOWTO, um Ihr eigenes Repository einzurichten, wo auch immer Sie es hosten möchten. Es ist etwas technisch, Sie werden das Terminal benutzen, aber Sie müssen kein Terminal-Experte sein, um mitzumachen. Zuerst geht dieses HOWTO durch die Einrichtung eines nicht sehr sicheren Test-Repos. Dann bespricht es die Einrichtung eines Repos für die reale Welt, mit dem Signierschlüssel auf einem separaten Rechner vom öffentlichen Webserver aus. Bevor Sie beginnen, müssen Sie sich die fdroidserver-Tools und einen Webserver besorgen. Für den Webserver wird dieses HOWTO nginx verwenden, da es leichtgewichtig ist, aber wenn Sie bereits einen anderen haben, kann es auch der sein.

    sudo apt-get install nginx

In diesem HOWTO werden wir ein “einfaches binäres Repository” einrichten, um eine Sammlung von APKs zu hosten. Das Repo wird im empfohlenen Unterverzeichnis fdroid/ eingerichtet. Dies gibt dem fdroid-Tool ein eigenes Verzeichnis zum Arbeiten und kennzeichnet die Repo-URL eindeutig als F-Droid-Repo. Außerdem sucht der F-Droid-Client automatisch nach einem Repository im Pfad /fdroid/repo, wenn der Benutzer nur den Server (z.B. “https://f-droid.org”) benutzt. Geben wir unserem normalen Benutzer die Kontrolle über dieses Unterverzeichnis im Web-Root, so dass wir die F-Droid-Tools nicht als root ausführen müssen (bei nginx ist das Webroot /usr/share/nginx/www, bei anderen Webservern ist es anders):

bash sudo mkdir /usr/share/nginx/www/fdroid sudo chown -R $USER /usr/share/nginx/www/fdroid cd /usr/share/nginx/www/fdroid fdroid init

Legen Sie nun Ihre APK-Dateien in /usr/share/nginx/wwww/fdroid/repo ab und ab dann sind Sie sind bereit, die Befehle zum Erstellen des Repos auszuführen (wenn fdroid init Ihr Android SDK nicht in /opt/android-sdk oder $ANDROID_HOME findet, werden Sie nach dem Pfad gefragt):

bash cd /usr/share/nginx/www/fdroid cp /path/to/\*.apk /usr/share/nginx/www/fdroid/repo/ fdroid update --create-metadata

Fertig! Jetzt haben Sie ein funktionierendes F-Droid Repo! Vergessen Sie nicht, dass dies nur ein Test-Setup_ ist, denken Sie daran, danach zum Real World Setup überzugehen! Fügen Sie Ihr neues Repo zu einem F-Droid-Client auf Ihrem Android-Gerät hinzu, um es zu testen. Dies geschieht im Menü __Manage Repos. Ihre Repo-URL ist der Hostname oder die IP-Adresse Ihres Rechners mit /fdroid/repo/ am Ende, also https://mysecureserver.com/fdroid/repo/ oder http://192.168.2.53/fdroid/repo/. Sie können die offiziellen Repos vorübergehend deaktivieren, um zu sehen, was F-Droid in Ihrem neuen Repo gefunden hat.

Anpassung

Sie können Ihr Repo auch anpassen, indem Sie die Konfigurationsdatei bearbeiten. Stellen Sie sicher, dass Sie einen Programmiertext-Editor wie editor /usr/share/nginx/wwww/fdroid/config.py verwenden. In der Konfigurationsdatei können Sie den Namen des Repos, die Beschreibung, das Symbol, die Pfade zu bestimmten Versionen der Build-Tools, Links zu einem verwandten Wiki und ob Statistiken gespeichert werden sollen, festlegen. Hier ist die grundlegende Repo-Beschreibung:

python repo_url = "http://guardianproject.info/fdroid/repo" repo_name = "Mein lokales Repo" repo_icon = "GP_Logo_hires.png" repo_description = """ Ein lokales Testrepository von Hans-Christoph Steiner <hans@guardianproject.info>. Es ist ein Repository von Anwendungen des Guardian Projekts. """

Um Ihr Symbol in Ihr Repo einzufügen, wählen Sie ein PNG-Bild, das Sie in Ihr Repo einfügen möchten. Das PNG geht in /usr/share/nginx/wwww/fdroid/, die Datei kann beliebig benannt werden (standardmäßig das fdroid-icon.png). Wenn Sie den Namen von der Voreinstellung abweichend nennen, stellen Sie sicher, dass Sie repo_icon und archive_icon in /usr/share/nginx/wwww/fdroid/config.py aktualisieren.

Ein letzter Hinweis zur Sicherheit: dieses Setup ist kein gutes Setup für ein echtes öffentliches Repo, sondern eine schnelle und einfache Möglichkeit, F-Droid zu testen. Stellen Sie zumindest bei der Generierung des Repos sicher, dass config.py nicht über das Web erreichbar ist, da es Passwörter enthält. Wenn die Dateiberechtigungen korrekt sind (z.B. chmod 0600 config.py), dann ist config.py für den Webserver nicht lesbar.

App-Metadaten

Sie können viele Aspekte der Darstellung einer App in Ihrem Repo steuern, indem Sie die Metadaten der App bearbeiten. Das Ausführen von fdroid update --create-metadata erzeugt Stub-Dateien für Sie, um ein funktionierendes Repo zu erhalten. Dann können Sie diese Dateien bearbeiten, um eine Beschreibung, Spenden-Links, Bug-Tracker, Lizenz, Homepage, etc. hinzuzufügen. Weitere Informationen zu allen Optionen finden Sie unter Metadatenreferenz erstellen.

CurrentVersionCode bietet eine praktische Möglichkeit, Beta-Versionen im selben Stream wie Ihre Vollversionen zu verteilen. Sie können CurrentVersionCode auf Ihre aktuelle stabile Version setzen und dann APKs zu Ihrem Repo hinzufügen. Benutzer werden nur automatisch auf den von Ihnen angegebenen Versionscode aktualisiert. Alle APKs für eine bestimmte Anwendung in Ihrem Repo, die einen neueren Versionscode haben, werden nicht automatisch installiert. Stattdessen kann der Benutzer sie in der App-Detailansicht im Client sehen und manuell installieren.

Reales Setup

Jetzt, da Sie ein funktionierendes Repo haben, ist es einfach, ein reales Setup zu erstellen. Ein Repo zu generieren, wie oben, ist sehr einfach, deshalb hat dieses HOWTO dort begonnen, aber es ist nicht so sicher, wie es sein sollte, wenn Ihr Repo Ihr Hauptverteilungspunkt sein wird. Beispielsweise sollten sich die Repo-Signaturschlüssel niemals auf einem öffentlichen Server befinden.

Um diese Situation zu verbessern, erzeugen Sie das Repo auf einem nicht-öffentlichen Rechner wie Ihrem Laptop, wobei Sie config.py und den Schlüsselspeicher nur auf diesem Rechner behalten (denken Sie daran, Backups zu erstellen!). Verwenden Sie dann fdroid server update, um die Änderungen an Ihrem Repo auf einem separaten Server via ssh zu veröffentlichen. Also starten Sie ein neues Repo von Grund auf neu auf Ihrer nicht-öffentlichen Maschine:

bash mkdir ~/fdroid cd ~/fdroid fdroid init cp /path/to/\*.apk ~/fdroid/repo/ fdroid update --create-metadata emacs config.py # add the serverwebroot, etc. fdroid server update -v

Bearbeiten Sie nun config.py, um serverwebroot zu setzen, es hat die Form eines Standard-SCP-Dateiziels. Dann wird fdroid server update die Veröffentlichung über rsync über ssh durchführen. Beide Computer müssen also ssh und rsync installiert und eingerichtet haben. Sie können auch Ihren eigenen vorhandenen Signierschlüssel verwenden, anstatt den von fdroid init erzeugten, bearbeiten Sie einfach repo_keyalias, keystore, keystorepass, keypass und keydname in ~/fdroid/config.py.