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ärdatei-Repository unterhalten wollen mit APKs und Paketen, die Sie an anderer Stelle erhalten haben, ist der Prozess recht einfach:

  1. Server-Tools einrichten
  2. Ein Verzeichnis mit dem Namen fdroid erstellen, dann fdroid init in diesem Verzeichnis ausführen um den Signierschlüssel zu erzeugen der Ihr Repository eindeutig identifiziert.
  3. Optional können Sie die Datei config.yml nach Ihren Vorlieben bearbeiten, detaillierte Beispiele finden Sie in examples/config.yml
  4. In fdroid ein Verzeichnis namens repo erstellen und APK-Dateien darin ablegen.
  5. fdroid update ausführen.
  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 Dinge 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: Wie dieser Vorgang sicher wird, lesen Sie unter Reales Setup weiter unten!
  10. Veröffentlichen Sie den resultierenden Inhalt des Verzeichnisses repo auf Ihrem Webserver (oder setzen Sie serverwebroot in Ihrer config.yml und verwenden Sie dann fdroid deploy)

Das Ergebnis der oben genannten Schritte wird ein repo-Verzeichnis sein, das Sie einfach auf einen beliebigen HTTP- (oder vorzugsweise HTTPS-)Server verschieben 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.

HOWTO für ein lokales Demo-Repo

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 durchläuft dieses HOWTO 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 vom öffentlichen Webserver getrennten Rechner. 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ärdateien-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):

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, danach sind Sie 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):

cd /usr/share/nginx/www/fdroid
cp /pfad/zum/\*.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 über das Untermenü Paketquellen verwalten in den Optionen. 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.

Während Sie das Repository unter einer beliebigen URL bereitstellen können, ist es üblich, es unter einer URL verfügbar zu machen, die mit /fdroid/repo/ endet. Ein guter Grund, dies tatsächlich zu tun, ist, dass der F-Droid-Client einen Intent-Filter einrichtet und sich selbst für solche URLs registriert. Infolgedessen wird ein Benutzer, der die F-Droid-Anwendung installiert hat und eine solche wohlgeformte URL öffnet, sein Gerät F-Droid öffnen lassen und ihn direkt zum Hinzufügen des Repositorys zu diesem führen.

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.yml 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:

repo_url = "http://guardianproject.info/fdroid/repo"
repo_name = "My Local Repo"
repo_icon = "GP_Logo_hires.png"
repo_description = """
Ein lokales Test-Repository von Hans-Christoph Steiner <hans@guardianproject.info>.
Es handelt sich um ein Repository mit Guardian-Project-Apps. """

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 ist es 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.yml 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.yml nicht über das Web erreichbar ist, da es Passwörter enthält. Wenn die Dateiberechtigungen korrekt sind (z. B. chmod 0600 config.yml), dann ist config.yml 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. Sie können dann diese Dateien bearbeiten, um eine Beschreibung, Spenden-Links, Bug-Tracker, Lizenz, Homepage, etc. hinzuzufügen. Weitere Informationen zu allen Optionen finden Sie unter Build-Metadatenreferenz.

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 vor Ort zu generieren, wie oben beschrieben, ist sehr einfach, deshalb hat dieses HOWTO hiermit begonnen, aber es ist nicht so sicher, wie es sein sollte, wenn Ihr Repo Ihr Hauptverteilungspunkt werden soll. 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.yml und den Schlüsselspeicher nur auf diesem Rechner behalten (denken Sie daran, Backups zu erstellen!). Verwenden Sie dann fdroid deploy, um die Änderungen an Ihrem Repo auf einem separaten Server via ssh zu veröffentlichen. Also starten Sie ein von Grund auf neues Repo auf Ihrer nicht-öffentlichen Maschine:

mkdir ~/fdroid
cd ~/fdroid
fdroid init
cp /pfad/zum/\*.apk ~/fdroid/repo/
fdroid update --create-metadata
emacs config.yml # Serverwebroot usw. ergänzen
fdroid deploy -v

Bearbeiten Sie nun config.yml, um serverwebroot zu setzen, es hat die Form eines Standard-SCP-Dateiziels. Dann wird fdroid deploy 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.yml.