It just download deltas on a easy way:
rsync -va rsync://downloads.ffhb.de:63113/firmware firmware
Hier habe ich (ec8or) protokolliert, wie ich mit Hilfe von jplitza und wget einen Firmware-Mirror auf meinem Raspberry PI eingerichtet habe. Er ist nicht besonders clever, aber funktional. Ich bin keine Experte und hoffe durch diesen Artikel einen Anfang für eine gute Anleitung entstehen zu lassen.
Al erstes muss der "Server" im Freifunk bekannt sein. Dazu habe ich mir eine IPv4 IP-Adresse im Artikel Dienste reserviert und anschließend in /etc/network/interfaces hinterlegt.
auto eth0
iface eth0 inet static
address 10.196.0.111
netmask 255.255.128.0
dns-nameservers 10.196.0.1 10.196.0.2 10.196.0.3 10.196.0.5
gateway 10.196.0.1
Ein Firmware-Mirror muss aber per IPv6 erreichbar sein. Das letzte Byte der IPv6-Adresse sollte immer dem letzten Byte der Ipv4-Adresse entsprechen, in meinem Fall also 6f. Dem entsprechen habe ich folgenden, weiteren Eintrag in der /etc/network/interfaces hinterlegt:
iface eth0 inet6 static
address 2a06:8782:ffbb:1337::6f
netmask 64
Die Quelle für Spiegel-Server ist http://downloads.bremen.freifunk.net/firmware/. Zum spiegeln habe ich folgedes "Script" erstellt. Ich protokolliere außerdem noch Start und Ende in eine Textdatei. Das hat mir das Testen erleichtert.
Script
#!/bin/bash
cd mirror-download
date > last-run.txt
wget -Nr -np -A .bin,.manifest -nH --cut-dirs=1 -X /firmware/nightly http://downloads.bremen.freifunk.net/firmware/
date >> last-run.txt
Erläuterung
Das Nightly-Verzeichniss wird ausgeschlossen, da es sich hierbei momentan (01.09.2015) nur ein symlink auf testing handelt. Diesen hab eich lokal angelegt um keinen unnötigen Traffic zu generieren. Sollten keine neuen Images vorhanden sein, kostet der Aufruf ca 850KB. Alle Images zusammen verbrauchen aktuell ca 850MB (01.09.2015).
Damit das Script ausgeführt werden kann, muss es natürlich zuvor mit chmod +x script.sh
als ausführbar makiert werden.
Damit das Script regelmäßig um 3:33Uhr ausgeführt wird, habe ich ein Eintrag in /etc/crontab hinterlegt
33 3 * * * * username /pfad/zum/script.sh
Ob und wann ein Cronjob ausgeführt wird steht im syslog.
grep CRON /var/log/syslog
Die Knoten können die Images nur per HTTP abrufen. Da ich bisher keinen Webserver verwende, habe ich mich nach einer einfachen Lösung umgesehen und bin bei WebFS gelandet. Ich habe das entsprechende deb-Paket installiert.
das Herunterladen neuer Firmwaredateien ist eigentlich nur erforderlich, wenn das entsprechende Manifest geändert wurde. Man könnte also auch erst dieses herunterladen, prüfen ob es sich verändert hat und anschleißend ggf. die Images herunerladen. Im besten Fall könnte man so beim Spiegeln anhand des SHA512 und der Unterschriften aus dem Manifest überprüfen ob die Dateien korrekt sind. Damit könnte man sich davor schützen Ungültige-Daten herunterzuladen und zu verbreiten. Bei meiner Vorgehensweise würde kompromitierte Software fleißig weiterverteilt.
Auf github hatte corny ein paar python scripte gebaut die mir (ec8or) die implementierung erleichtert haben. Ich habe daraufhin einen eigenen branch angelegt und das o.g. Shell-Script auf dem PI ersetzt.
Die Applikation hat folgende Eigenschaften:
Inhalt:
Beispielaufruf:
./mirror.py -u http://downloads.bremen.freifunk.net/firmware