Subject: [.plan] F-Droid Binary Repo
From: Boris Kraut <[email-masked]>
To: undisclosed-recipients: ;
Date: Sat, 30 Apr 2016 17:06:38 +0200

Es ist schon fast beschaemend, dass jemand der doch shcon relativ viel Zeit in
das F-Droid Projekt gesteckt hat, noch nie ein eigenes Repo betrieben hat --
dabei hatte ich schon einige Ideen, was man denn in so einem unoffiziellen
Repo veroeffentlichen koennte: Entwicklungs-Schnappschuesse, "tainted builds"
(Apps die nicht-freie Abhaengigkeiten wie Google's play-services oder Crash-
lytics nutzen), oder offizielle Binaries (vom jeweiligen Upstream-Entwickler
signiert). Und jedes mal, wenn im IRC Fragen dazu aufkamen, musste ich passen,
an andere Entwickler verweisen oder ein "ja, muesste man mal tun" los werden.

Nach einer kurzen Diskussion, habe ich mir dann doch endlich mal ein Herz ge-
fasst und mir die Doku durchgelesen -- eigentlich nur 2-3 Absaetze -- und das
umgesetzt. Das schoene ist, dass F-Droid eigentlich nur einen normalen Web-
Server braucht. Was aus einem Webserver ein F-Droid-Repo macht, sind die APKs
und ein paar Metadaten. Letztere werrden vom `fdroid` Tool des eigentlichen
fdroidserver-Pakets vorausgefuellt, genauso wie man sich einen Signier-
Schluessel fuer den Index erzeugen lassen kann. Sind alle Abhaengigkeiten
installiert, sieht der Verlauf ungefaehr so aus:

$ git clone https://gitlab.com/fdroid/fdroidserver.git
$ mkdir -p binaryrepo/{metadata,repo}
$ cp fdroidserver/examples/config.py binaryrepo/
$ cp whatever.apk binaryrepo/repo/
$ cd binaryrepo
$ vim config.py
$ ../fdroidserver/fdroid update --create-key
$ ../fdroidserver/fdroid update -c

Die Metadaten koennen mit einem beliebigen Texteditor veraendert werden. Ob
die Aenderungen erlaubt sind, sagt einem `fdroid lint -f` und etwaige Fehler
lassen sich haeufig mit `fdroid rewritemeta package.id` automatisch beheben.

Nach jeder Aenderung oder neuen App muss `fdroid udpate` ein weiteres Mal
ausgefuehrt werden, um den Index zu aktualisieren. Ausserdem muessen -- wie
ich eingangs erwaehnt habe -- die noetigen Dateien auf einen "normalen" Web-
server kopiert werden: Einfach das komplette `repo` Verzeichnis irgendwo
hochladen -- fertig. Ich habe dazu kurzerhand GitHubs Homepoage-Hosting
verwendet. Wer will kann also im F-Droid-Client folgende Quelle hinzufuegen,
um (derzeit) den aktuellen Firefox vorzufinden: https://krt16s.github.io/repo/

Zum aktualisieren des Repos nutze ich folgendes Skript [0]:

$ cd repo
$ wget -O firefox_arm.apk -c "https://download.mozilla.org/?product=fennec-latest&os=android&lang=multi"
$ wget -O firefox_x86.apk -c "https://download.mozilla.org/?product=fennec-latest&os=android-x86&lang=multi"
$ cd ..
$ ~/tmp/fdroid/fdroidserver/fdroid update -c
$ git add -f repo/*
$ git commit -m "Update Firefox"
$ git push origin master

[0] https://github.com/krt16s/krt16s.github.io/blob/master/ffupdater.sh
[1] https://f-droid.org/manual/fdroid.html#Simple-Binary-Repository