Neues Repository-Format für schnellere und kleinere Updates
Posted on 2023-03-01 by
Wir haben gerade Version 1.16
der offiziellen F-Droid-App für Android
veröffentlicht, die sowohl viele radikale Veränderungen beinhaltet als auch
viele Lösungen für lange bestehende Probleme. Lest weiter, um mehr Details
darüber zu erfahren.
Wachsende Repository-Größe
Da immer mehr Apps ihren Weg zu F-Droid finden, wächst auch der offizielle
Repository-Index, der alle Apps und ihre Metadaten enthält, stetig an.
Derzeit beträgt die Größe des komprimierten Index 8 MB
, was unkomprimiert
33 MB
entspricht. Wenn der Repository-Index aktualisiert wird, muss jede
F-Droid-Client-App diese 8 MB
immer wieder herunterladen und verarbeiten.
Dieser problematische Trend war seit
langem absehbar.
Nur was sich ändert wird aktualisiert
Unser Repository-Index ist im JSON-Format und wir entschieden uns dafür, vom
RFC 7396 JSON Merge Patch
Gebrauch zu machen, um viel kleinere JSON-Dateien zu erstellen, die nur noch
die Änderungen seit der letzten Aktualisierung eurer F-Droid-App enthalten.
Technisch funktioniert das so, dass eine neue Datei mit Namen
entry.json
statt des kompletten
Index heruntergeladen wird. Diese „entry“-Datei verweist auf den kompletten
Index, sollte die App nie zuvor aktualisiert worden sein und ohnehin alle
Metadaten benötigen. Aber die „entry“ beinhaltet auch Verweise auf
verschiedene kleinere Differenz-Dateien. Die App sucht sich automatisch
die richtige Diff und lädt nur die viel kleinere Datei statt des kompletten
Index herunter. Das spart nicht nur Datenvolumen, es macht die
Aktualisierung des Index auch viel schneller, da nur die kleinst mögliche
Datenmenge heruntegeladen, verarbeitet und gespeichert werden muss. Während
dies hier geschrieben wird, betrug die Größe der neusten Diff komprimiert
80 KB
, was unkomprimiert 241 KB
entspricht, nur 1%
des kompletten
Index. Die Version 1.16
der offiziellen F-Droid-App für Android
unterstützt dieses neue Repository-Format.
Weitere Verbesserungen
Die neue Version bringt eine große Zahl radikaler Veränderungen mit sich. Zum Besipiel musste die ganze Datenbank ersetzt werden, um das neue differenzbasierte Repository-Format zu unterstützen. Wir nutzten auf dem Weg dorthin die Gelegenheit, verschiedenen Kleinkram zu verbessern:
- verbesserte Spiegelserver-Unterstützung: alle Dateien (z. B. Bilder) werden nun von Spiegelservern geladen, was die Belastung des Hauptservers reduziert
- bessere Unterstützung von Geräten mit geringem RAM, weil der Index jetzt in die Datenbank einfließt, statt ihn komplett in den Speicher zu laden
- Hash-Verifizierung: Der SHA256-Hash aller Dateien ist nun Teil der Repository-Metadaten und wird während des Downloads verifiziert
- stärkerer Algorithmus zur Repository-Signierung: Wir verwenden jetzt SHA256 statt SHA1 für die Indexsignatur
- Unterstützung für das Herunterladen von Repository-Dateien über IPFS
- viele Fehlerkorrekturen als Resultat der Modernisierung alten Codes
Die neue Version durchlief eine Serie von Alpha-Versionen mit ausführlicher Testung, um sicherzugehen, dass keine ernsten Probleme in der stabilen Version auftauchen. Sie wird nun als bereit für den allgemeinen Gebrauch angesehen.
Informationen für Maintainer von Repository und Client
Eigentümer von F-Droid-Repositorys von Drittanbietern können das neue Format aktivieren, indem sie ein Upgrade auf die neueste Version von fdroidserver vornehmen, der automatisch das neue Format veröffentlichen wird, zusätzlich zum alten, welches erhalten bleibt, um ältere Client-Apps zu unterstützen.
Entwickler von F-Droid-Clients von Drittanbietern werden ermutigt, das neue Format zu übernehmen, entweder in Form eigener Implementationen oder durch Nutzung der neuen Bibliotheken, die wir veröffentlichen, um die Verwendung dieser Technologie so einfach wie möglich zu machen und um soviel Code wie möglich unter verschiedenen Implementationen zu teilen.
Diese Arbeit wurde durch einen FFDW-DVD-Zuschuss gefördert