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. Dieses Modell ist an die Distribution Debian GNU/Linux angelehnt. Wie in Debian und Ubuntu kannst du auch eigene Repos einrichten, die jeder nutzen kann. Benutzerdefinierte Repos müssen nicht einmal die APKs erstellen, sie können nur „einfache Binärdatei-Repos“ beliebiger APKs sein.
Übersicht
Wenn du ein einfaches Binärdatei-Repository mit APKs und Paketen unterhalten möchtest, die du anderweitig bezogen hast, ist der Vorgang recht einfach:
- Server-Tools einrichten
- Ein Verzeichnis mit dem Namen fdroid erstellen, dann
fdroid initin diesem Verzeichnis ausführen um den Signierschlüssel zu erzeugen der dein Repository eindeutig identifiziert. - Optional kannst du die Datei config.yml nach deinen Vorlieben bearbeiten, detaillierte Beispiele findest du in examples/config.yml
- In fdroid ein Verzeichnis namens repo erstellen und APK-Dateien darin ablegen.
fdroid updateausführen.- Bei Meldungen zu fehlenden Metadatendateien kannst du sie im Verzeichnis
metadataerstellen und den Vorgang wiederholen. - Um das Erstellen von Metadatendateien zu vereinfachen, führe
fdroid updatemit der Option-caus. Dadurch werden fehlende ‘skeleton’-Metadatendateien erstellt, die du dann einfach bearbeiten und mit den Details füllen kannst. - Hast du Änderungen vorgenommen, führe anschließend erneut
fdroid updateaus. - Das Ausführen von
fdroid updatefügt ein icons-Verzeichnis zum Repo-Verzeichnis hinzu und erstellt auch die Repository-Indexdateien (index.xml, index.jar, usw.) HINWEIS: Um diesen Vorgang sicher durchzuführen, lies bitte den Abschnitt Reales Setup weiter unten! - Veröffentliche den resultierenden Inhalt des Verzeichnisses repo auf
deinem Webserver (oder setze
serverwebrootin deiner config.yml und verwende dannfdroid deploy)
Durch die oben beschriebenen Schritte wird ein repo-Verzeichnis erstellt, das du einfach auf einen beliebigen HTTP- (oder vorzugsweise HTTPS-)Server verschieben musst, 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
Metadatendatei, 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 eine vollständige Anleitung zum Einrichten deines eigenen
Repository, wo immer du es hosten möchtest. Es ist etwas technisch, du wirst
das Terminal benutzen, aber musst kein Terminal-Experte sein, um
mitzumachen. Zunächst führt dich diese Anleitung durch die Einrichtung eines
nicht sehr sicheren Test-Repos. Anschließend wird die Einrichtung eines
Repositorys für den realen Einsatz beschrieben, wobei sich der
Signierschlüssel auf einem anderen Rechner als dem öffentlichen Webserver
befindet. Bevor du beginnst, benötigst du die
fdroidserver-Tools und einen
Webserver. Für den Webserver wird in dieser Anleitung nginx verwendet, da
es sehr schlank ist, aber du kannst auch jeden anderen Webserver verwenden,
den du bereits betreibst.
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,
sodass 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
Lege nun deine APK-Dateien in /usr/share/nginx/www/fdroid/repo ab, und
schon kannst du die Befehle zum Erstellen des Repositorys ausführen (wenn
fdroid init dein Android-SDK in /opt/android-sdk oder $ANDROID_HOME
nicht finden kann, wirst du zur Eingabe des Pfads aufgefordert):
cd /usr/share/nginx/www/fdroid
cp /pfad/zum/\*.apk /usr/share/nginx/www/fdroid/repo/
fdroid update --create-metadata
Fertig! Jetzt hast du ein funktionierendes F-Droid-Repo! Denke daran, dass
dies nur ein Test-Setup ist. Fahre danach mit dem Realen
Setup fort! Füge dein neues Repo zu einem F-Droid-Client
auf deinem Android-Gerät hinzu, um es zu testen. Dies geschieht über das
Untermenü Paketquellen verwalten in den Optionen. Die URL deines Repos
ist der Hostname oder die IP-Adresse deines Rechners mit /fdroid/repo/ am
Ende, also https://mysecureserver.com/fdroid/repo/ oder
http://192.168.2.53/fdroid/repo/. Du kannst die offiziellen Repos
vorübergehend deaktivieren, um zu sehen, was F-Droid in deinem neuen Repo
gefunden hat.
Du kannst das Repository zwar unter einer beliebigen URL bereitstellen, es
ist jedoch üblich, es unter einer URL verfügbar zu machen, die mit
/fdroid/repo/ endet. Ein guter Grund dafür ist, dass der F-Droid-Client
einen Intent-Filter einrichtet und sich selbst für solche URLs
registriert. Wenn ein Nutzer, der die F-Droid-App installiert hat, eine
solche wohlgeformte URL öffnet, wird auf seinem Gerät F-Droid geöffnet und
er wird direkt zum Hinzufügen des Repositorys geführt.
Anpassung
Du kannst dein Repo auch anpassen, indem du die Konfigurationsdatei
bearbeitst. Stelle sicher, dass du einen Programmiertext-Editor wie editor
/usr/share/nginx/wwww/fdroid/config.yml verwendest. In der
Konfigurationsdatei kannst du 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 dein Symbol in dein Repo einzufügen, wähle ein PNG-Bild, das du in dein
Repo einfügen möchtest. Das PNG-Bild wird in /usr/share/nginx/www/fdroid/
abgelegt, die Datei kann beliebig benannt werden (standardmäßig lautet der
Name fdroid-icon.png). Wenn du den Standardnamen änderst, musst du
repo_icon und archive_icon in /usr/share/nginx/www/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. Stelle 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
Du kannst viele Aspekte der Darstellung einer App in deinem Repo steuern,
indem du die Metadaten der App bearbeitest. Das Ausführen von fdroid update
--create-metadata erzeugt Stub-Dateien für dich, um ein funktionierendes
Repo zu erhalten. Du kannst dann diese Dateien bearbeiten, um eine
Beschreibung, Spenden-Links, Bug-Tracker, Lizenz, Homepage,
usw. hinzuzufügen. Weitere Informationen zu allen Optionen findest du unter
Build-Metadatenreferenz.
CurrentVersionCode bietet eine praktische Möglichkeit, Beta-Versionen im selben Stream wie deine Vollversionen zu verteilen. Du kannst CurrentVersionCode auf deine aktuelle stabile Version setzen und dann APKs zu deinem Repo hinzufügen. Benutzer werden nur automatisch auf den von dir angegebenen Versionscode aktualisiert. Alle APKs für eine bestimmte Anwendung in deinem 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 du ein funktionierendes Repo hast, ist es ganz einfach, eine reale Konfiguration zu erstellen. Das Erstellen eines Repositorys wie oben beschrieben ist sehr einfach, weshalb diese Anleitung damit begonnen hat, aber es ist nicht so sicher, wie es sein sollte, wenn dein Repo dein Hauptverteilungspunkt werden soll. Beispielsweise sollten sich die Repo-Signierschlüssel niemals auf einem öffentlichen Server befinden.
Um diese Situation zu verbessern, erstelle das Repository auf einem nicht
öffentlichen Rechner wie deinem Laptop und bewahre config.yml und den
Schlüsselspeicher nur auf diesem Rechner auf (denken daran, Backups zu
erstellen!). Verwende dann fdroid deploy, um die Änderungen an deinem Repo
über ssh auf einem separaten Server zu veröffentlichen. Starte also ein
neues Repository von Grund auf auf deinem nicht öffentlichen Rechner:
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
Bearbeite 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. Du kannst auch deinen
eigenen vorhandenen Signierschlüssel verwenden, anstatt den von fdroid
init erzeugten, bearbeite einfach repo_keyalias, keystore,
keystorepass, keypass und keydname in ~/fdroid/config.yml.
Wenn dein Repo über ein Archiv verfügt, solltest du zusätzlich eine
Rewrite-Regel von repo/ nach archive/ auf deinem Webserver einrichten.
Dies stellt sicher, dass alte Links weiterhin funktionieren, wenn ein APK
vom Repository ins Archiv verschoben wird. Siehe dieses
Beispiel
mit Apache.
