Freifunk Hennef Firmware Downloader

Hallo Allerseits,

ich möchte euch unseren „Firmware Downloader“ vorstellen, der es gerade Anfängern erleichtern soll die passende Firmware für ihren Router zu finden und zu verwenden.

Ein paar Features:

  • Es gibt eine 2 Stufige Vorauswahl bevor man auf die Firmwareauswahl Seite kommt für Meta-Communities zum Beispiel, oder Communitys die eine Vorauswahl benötigen (Technik L2TP/fastd Auswahl), diese Vorwauswahl lässt sich automatisch übergehen bei einer Einzelcommunity ohne Vorauswahl
  • das Firmware Verzeichnis wird automatisch geparst, keine manuellen Eingriffe nötig wenn es eine neue Firmware auf dem Server gibt
  • die Webseite ist responsive (basiert auf Bootstrap)
  • die Webseite lässt sich sehr einfach vom Design anpassen an die entsprechende Community da Bootstrap zum Layout verwendet wurde
  • die Webseite lässt sich in großen Teilen individualisieren für einzelne Communities (Titel, Logo, etc.)
  • viele der Router werden auch Bildlich dargestellt zur Kontrolle ob man auch den richtigen Router hat - danke an @danielkrah für seine Routerbilder!

Ein paar Bedingungen müssen aktuell noch erfüllt sein:

  • der Firmware Downloader muss auf dem gleichen Server liegen wie die Firmware selber, damit er die Verzeichnisse parsen kann
  • der Webserver muss auf *nix (Linux, BSD, etc.) Basis laufen, für eine Windowstypische Verzeichnisstruktur ist der Parser bisher nicht angepasst
  • die Firmware muss in der typischen Gluon Build Struktur (Verzeichnis & Namen) vorliegen damit der Parser funktioniert

Installation:

Um den Firmware Downloader mal auszuprobieren könnt ihr gerne unsere Seite ansurfen: http://images.freifunk-hennef.de/downloader/ oder um die Vorauswahl zu sehen: http://downloader.freifunk-rhein-sieg.de/

Unsere Firmware-Images finden sich unter: Index of /firmware/ falls sich jemand nicht sicher ist wie die Dateistruktur auszusehen hat. Aktuell gibt es bei uns keinen „broken“ Ordner, aber auch der wird unterstützt (wenn er denn da ist) und im Ordner liegende „manifest“-Dateien stören ihn auch nicht.

Struktur der community-config.inc.php:
1 Community ohne Vorauswahl:

$community = array(
	0  => array(
		"community_id" => 0,
		"name" => "Freifunk Hennef",
		"head_titel" => "Freifunk Hennef Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Firmware für ihren Router in Hennef auswählen und herunterladen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://www.freifunk-hennef.de/",
		"logo_alt" => "Freifunk Hennef Logo",
		"logo_url" => "images/Freifunk-logo-hennef-klein-200.png",
		"lang_titel" => "Freifunk Hennef Firmware Auswahl",
		"lang_text" => "Bitte suchen Sie den passenden Router aus, indem Sie den Hersteller, das Modell und die Version auswählen.<br />Legen Sie anschließend fest, ob sie den Router zum ersten Mal mit einer Freifunk Firmware flashen und welches Entwicklungsstadium die Firmware haben soll.<br /><br />Bitte wählen Sie -stable- im Entwicklungsstadium aus, wenn Sie nicht genau wissen was Sie sonst erwartet!",
		"download_path" => "",
		"sub_auswahl" => ""
	)
);

Mehrere Communities mit Sub-Communities/Technik als Vorauswahl:

$community = array(
	0  => array(
		"community_id" => 0,
		"name" => "Freifunk Rhein-Sieg",
		"head_titel" => "Freifunk Rhein-Sieg Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Community für die Firmware für ihren Router aus dem Rhein-Sieg-Kreis auswählen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://www.freifunk-rhein-sieg.de/",
		"logo_alt" => "Freifunk Rhein-Sieg-Kreis Logo",
		"logo_url" => "images/Freifunk-logo-rhein-sieg-klein-200.png",
		"lang_titel" => "Freifunk Rhein-Sieg Community Auswahl",
		"lang_text" => "Bitte suchen Sie die passende Community aus, indem Sie die Community und gegebenenfalls noch einen Bereich in der Community auswählen.<br />Sie werden dann weitergeleitet auf die eigentliche Firmware Download Seite für die gewähle Community.",
		"download_path" => "",
		"sub_auswahl" => ""
	),
	1  => array(
		"community_id" => 1,
		"name" => "Freifunk Hennef",
		"head_titel" => "Freifunk Hennef Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Firmware für ihren Router in Hennef auswählen und herunterladen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://downloader.freifunk-rhein-sieg.de/",
		"logo_alt" => "Freifunk Hennef Logo",
		"logo_url" => "images/Freifunk-logo-hennef-klein-200.png",
		"lang_titel" => "Freifunk Hennef Firmware Auswahl",
		"lang_text" => "Bitte suchen Sie den passenden Router aus, indem Sie den Hersteller, das Modell und die Version auswählen.<br />Legen Sie anschließend fest, ob sie den Router zum ersten Mal mit einer Freifunk Firmware flashen und welches Entwicklungsstadium die Firmware haben soll.<br /><br />Bitte wählen Sie -stable- im Entwicklungsstadium aus, wenn Sie nicht genau wissen was Sie sonst erwartet!",
		"download_path" => "../fwuploads/hennef/",
		"sub_auswahl" => ""
	),
	2 => array(
		"community_id" => 2,
		"name" => "Freifunk Troisdorf",
		"head_titel" => "Freifunk Troisdorf Fußgängerzone Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Firmware für ihren Router in der Troisdorfer Fußgängerzone auswählen und herunterladen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://downloader.freifunk-rhein-sieg.de/",
		"logo_alt" => "Freifunk Troisdorf Logo",
		"logo_url" => "images/Freifunk-logo-troisdorf-klein-200.png",
		"lang_titel" => "Freifunk Troisdorf Fußgängerzone Firmware Auswahl",
		"lang_text" => "Bitte suchen Sie den passenden Router aus, indem Sie den Hersteller, das Modell und die Version auswählen.<br />Legen Sie anschließend fest, ob sie den Router zum ersten Mal mit einer Freifunk Firmware flashen und welches Entwicklungsstadium die Firmware haben soll.<br /><br />Bitte wählen Sie -stable- im Entwicklungsstadium aus, wenn Sie nicht genau wissen was Sie sonst erwartet!",
		"download_path" => "../fwuploads/troisdorf/inn/",
		"sub_auswahl" => "Fußgängerzone"
	),
	3 => array(
		"community_id" => 2,
		"name" => "Freifunk Troisdorf",
		"head_titel" => "Freifunk Troisdorf Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Firmware für ihren Router in Troisdorf auswählen und herunterladen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://downloader.freifunk-rhein-sieg.de/",
		"logo_alt" => "Freifunk Troisdorf Logo",
		"logo_url" => "images/Freifunk-logo-troisdorf-klein-200.png",
		"lang_titel" => "Freifunk Troisdorf Firmware Auswahl",
		"lang_text" => "Bitte suchen Sie den passenden Router aus, indem Sie den Hersteller, das Modell und die Version auswählen.<br />Legen Sie anschließend fest, ob sie den Router zum ersten Mal mit einer Freifunk Firmware flashen und welches Entwicklungsstadium die Firmware haben soll.<br /><br />Bitte wählen Sie -stable- im Entwicklungsstadium aus, wenn Sie nicht genau wissen was Sie sonst erwartet!",
		"download_path" => "../fwuploads/troisdorf/tdf/",
		"sub_auswahl" => "Troisdorf"
	),
	4 => array(
		"community_id" => 2,
		"name" => "Freifunk Troisdorf",
		"head_titel" => "Freifunk Troisdorf Soziale Projekte Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Firmware für ihren Router für Troisdorfer Soziale Projekte auswählen und herunterladen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://downloader.freifunk-rhein-sieg.de/",
		"logo_alt" => "Freifunk Troisdorf Logo",
		"logo_url" => "images/Freifunk-logo-troisdorf-klein-200.png",
		"lang_titel" => "Freifunk Troisdorf Soziale Projekte Firmware Auswahl",
		"lang_text" => "Bitte suchen Sie den passenden Router aus, indem Sie den Hersteller, das Modell und die Version auswählen.<br />Legen Sie anschließend fest, ob sie den Router zum ersten Mal mit einer Freifunk Firmware flashen und welches Entwicklungsstadium die Firmware haben soll.<br /><br />Bitte wählen Sie -stable- im Entwicklungsstadium aus, wenn Sie nicht genau wissen was Sie sonst erwartet!",
		"download_path" => "../fwuploads/troisdorf/flu/",
		"sub_auswahl" => "Soziale Projekte"
	),
	5 => array(
		"community_id" => 3,
		"name" => "Freifunk Wachtberg",
		"head_titel" => "Freifunk Wachtberg Firmware",
		"head_text" => "Auf dieser Seite können Sie die passende Firmware für ihren Router in Wachtberg auswählen und herunterladen!",
		"link_text" => "Zurück zur Startseite",
		"link_url" => "http://downloader.freifunk-rhein-sieg.de/",
		"logo_alt" => "Freifunk Wachtberg Logo",
		"logo_url" => "images/Freifunk-logo-wachtberg-klein-200.png",
		"lang_titel" => "Freifunk Wachtberg Firmware Auswahl",
		"lang_text" => "Bitte suchen Sie den passenden Router aus, indem Sie den Hersteller, das Modell und die Version auswählen.<br />Legen Sie anschließend fest, ob sie den Router zum ersten Mal mit einer Freifunk Firmware flashen und welches Entwicklungsstadium die Firmware haben soll.<br /><br />Bitte wählen Sie -stable- im Entwicklungsstadium aus, wenn Sie nicht genau wissen was Sie sonst erwartet!",
		"download_path" => "../fwuploads/wachtberg/",
		"sub_auswahl" => ""
	)
);

Aktueller Stand / Dinge die noch zu tun sind:

  • :white_check_mark: 2 Stufige Vorauswahl
  • :white_check_mark: Design Anpassungen (maximale Breite gesetzt, form_control hinzugefügt, danke an @xaver für die Hinweise
  • :white_check_mark: automatisches Überspringen der 2. Auswahlstufe bei nicht vorhanden sein
  • :white_check_mark: überspringen der Vorauswahl bei nur einer Community
  • überspringen von unnötigen Auswahlstufen (Version: Alle - zum Beispiel)
  • irgendeine Art von Caching für die JSON Daten

Ich freue mich über konstruktive Kritik und vor allem wenn andere Communities den Firmware Downloader einsetzen möchten. Postet hier im Thread, oder per PM falls ihr Unterstützung bei der Einrichtung benötigt.

Gruß

Caspar

7 Likes

ja wenn die Prüfungen dann rum sind zeichne ich noch die restlichen Bilder

1 Like

Sieht super aus!
Das ist der Stil, wie ich ihn eignetlich lieber mag als dieses neumodische „MaterialDesign“ (was immer aussieht, wie einem App-Store entsprungen)

Wenn jetzt zusätzlich eveventuell noch zusätzliche Verzeichnislevel für „VPN-Techik“ aka „L2TP“/„fastd“ möglich wären.
Und/oder für „Sub-Community“ („Mettmann“/„Erkrath“/„Velbert“)

Danke für das Feedback!

Ein weiterer Verzeichnislevel sollte machbar sein, ich dazu eben @stefan eine PM geschrieben, da die Troisdorfer für den Großteil des Rhein-Sieg-Kreis die Firmware bauen, aber wir (Hennefer) die Rhein-Sieg-Webseite betreiben, ob er mir da einen Zugriff zur Verfügung stellt und wir das auf Basis des Rhein-Sieg-Kreises einmal abbilden, dort gibt es ein Dutzend verschiedene „Subcommunities“.

Wenn man den dann flexibel anlegt sollte es egal sein ob man „Much/Siegburg/Neunkirchen“ oder „L2TP/Fastd“ auswählt… Ich denke ich werde das als eine Art „Vorauswahl“ machen, damit ich nicht alle Verzeichnisse parse, sondern erstmal die Subcommunity auswählen, dann den entsprechenden Firmware Ordner parsen und dann die Subauswahl präsentieren.

Wäre bei mir halt der Wunsch nach zwei Ebenen

  1. Community
  2. VPN-Typ

Was den Parsing-Aufwand betrifft: Ich würde ggf. zwei scripte nehmen, ggf. ein php/bash/python/whatsoever, was per Cron aufgerufen wird, damit die Struktur nicht beim jedem Besuch des GoogleBots neu gelesen werden muss.

Aus Troisdorf kam eben ein ähnlicher Wunsch nach 2 Ebenen, allerdings dort um neben der Stadt noch den Stadtteil zu bestimmen (die splitten gerade ihr Netz). Damit wären wir bei:

Landingpage:

  1. Ebene: Community
  2. Ebene: Subcommunity oder Technologie

Detailauswahlseite:
3. Ebene: Hersteller
4. und so weiter wie bisher

Ich denke dazu mal was an und baue eine entsprechende Struktur auch in der Config um dort die entsprechenden Daten anzulegen. Kann aber ein paar Tage dauern :wink:

1 Like

Hallo,

schaut ganz brauchbar aus (Result nicht code) Mir sind es persönlich zu viele Auswahlfelder die Pflicht sind. Alle Auswählen weil es keine Revisionen gibt ist nervig.

Bug

  • Raspberry Pi hat keine Auswahl

Feature

  • Mapping - Beispiel Loco mit einem LAN sollten Bullet-M nutzten.
  • Datalist für schnelle suche

Frage

  • Klappt es mit anderen Webservern aus oder Fancyindex mit extra verlinktem Bild (duplicate)?

Wir haben sowas mit Mapping in einer JSON um Multiple Router auf eine Firmware zu Mappen oder Name anzupassen. Ansonsten auch Regex Indexparser.
https://regensburg.freifunk.net/mitmachen/router-aufstellen/#c191

Gruss
Xaver

Verstehe ich gut, dann könnte man abkürzen. Kommt auf die ToDo Liste.

Ich liste am Anfang alle (schon mal verwendeten) Hersteller auf ohne zu schauen ob es dafür aktuell überhaupt eine Firmware gibt. Das lässt sich natürlich überprüfen und Hersteller ohne aktuelle Firmware können übergangen werden. Kommt auch auf die ToDo Liste.

Ich wollte erst einmal so wenig wie möglich manuell eingreifen, da sich solche Dinge gerne irgendwann mal ändern, ohne das man noch auf dem Schirm hat, das man in der Vergangenheit einmal manuell eingegriffen hat. Eigentlich ist das ein Upstream Problem, warum wird denn dann nicht für die Loco, mit nur einem LAN Port, die passende Firmware von Gluon erzeugt?

Geht zur Zeit nur auf dem Webserver der auch Dateizugriff auf die Images hat, da ich „scandir()“ verwende. Was Du mir mit Fancyindex sagen möchtest musst Du bitte genauer erläutern, ich möchte ja gerade keine reine Verzeichnisstruktur anbieten (auch wenn die aufgehübscht würde).

Ziel ist es für uns genau 1 Download Link am Ende anzubieten um Einsteigern die Angst zu nehmen die falsche Firmware zu verwenden. Danke auch für den Hinweis auf eure Lösung!

Wenn eine Firmware für multiple Geräte geht, da der Unterbau der gleiche ist es für mich OK.

Falls jemand eine Firmware gebacken bekommen möchte, weil es noch keine von der lokalen Community gibt, dann finden sich hier im Forum bestimmt auch Freiwillige, die das mit der passenden site.conf machen würden. Ich würde das z. B. in solchen Fällen machen, ist ja kein Hexenwerk. Benötigt nur etwas Zeit.

1 Like

Ich habe das Eingangsposting geupdated:

  • Meta Communities werden nun unterstützt mit einer 2 Stufigen Vorauswahl
  • die 2. Stufe ist dabei optional und wird übersprungen wenn es dort keine Angabe zu gibt
  • die Texte sind völlig frei in der community-config.inc.php veränderbar, d.h. die 2. Stufe kann zum Beispiel eine Sub-Community sein (Ortsteil?), oder eine Technikauswahl (L2TP oder fastd?), oder was auch immer euch einfällt und ihr benötigt
  • es ist weiterhin natürlich möglich den Firmware Downloader nur für 1 Community zu verwenden - wird nur 1 Community eingetragen dann wird die Vorauswahl automatisch übersprungen.
  • die entsprechenden Unterseiten für die einzelnen Communities&Sub-Communities werden dynamisch erzeugt und sind völlig frei konfigurierbar von Text und Logo
  • ich habe ein wenig am Design angepasst, danke an @xaver, die maximale Breite passt nun auch auf 4k Displays und dank form-control wird die Auswahl etwas hübscher/praktischer.

Als Beispiel läuft der Downloader nun für unsere Meta-Community Rhein-Sieg. Dort sieht man schön das diverse Communities eigene Logos verwenden auf den Unterseiten und es sowohl Communities mit Sub-Community gibt (Troisdorf mal ausprobieren), oder auch ohne (Hennef zum Beispiel): http://downloader.freifunk-rhein-sieg.de/

Vielleicht findet sich die ein oder andere Community die den Firmware Downloader noch einsetzen mag, ich stehe da gerne für Fragen zur Einrichtung zur Verfügung und bin auch auf dem Freifunk Tag in Köln nächstes Wochenende.

2 Likes

Hallo Drasek,
ich habe den Downloader ausprobiert, gefällt mir sehr gut. Leider erhalte ich eine Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at /.../freifunk/downloader/index.php:1)

Wenn ich manuell auf firmware.php?id=0 wechlse, geht’s.

Bruno

Hallo Bruno,

kannst Du bitte kontrollieren ob Du in der community-config.inc.php irgendwo in einer der leeren Zeilen ein Leerzeichen erzeugt hast?

Der Fehler kommt daher das schon html Daten übertragen werden bevor ich per „header(‚Location: firmware.php?id=0‘);“ umleite auf die folge Seite und dann wird der header doppelt übertragen = Fehlermeldung. Dafür reicht es wenn irgendetwas übertragen wird (auch Leerzeichen gelten). Da bei mir der Fehler nicht auftaucht tippe ich auf die config Dateien.

Du kannst mir auch Deine Config zu senden und ich schaue da einmal rein ob alles passt und wenn es daran gelegen haben sollte werde ich das fett in die Anleitung schreiben müssen…

Danke Dir!

Problem Dank Drasek gelöst.

Danke.

Das Problem lag wahrscheinlich an einer falschen Dateikodierung von mir und ich sollte das (nun auch im git) gefixt haben auf UTF8 ohne BOM, damit die header() Weiterleitung auch funktioniert, danke @BrunoW für das Finden des Bugs!

Hallo Drasek,
der Downloader ist seit Monaten auf unserer Hompage aktiv und ein gern genutztes Tool.

Mit Gluon v2016.2 erscheint scheinbar ein neuer Hersteller in der Liste (in diesem Falle für GL-AR150), aber in Wirklichkeit handelt es sich auch um GL.iNet:

gluon-ffhgw-2016.2~2016-09-24-gl-ar150-sysupgrade.bin
gluon-ffhgw-2016.2~2016-09-24-gl-inet-6408a-v1-sysupgrade.bin

Lässt sich da was in der config.inc.php ändern, dass beide Varianten unter ein und demselben Hersteller gelistet werden?

Bruno

Ergänzug: Der Nutzer sieht eine Fehlermeldung, dass ein „unbekannter Hersteller“ erkannt wurde. Als Workaround habe ich Datei erstmal gelöscht, um keinen zu irritieren.

Danke für den Hinweis! Werde ich am Wochenende nachschauen woran das liegt und die config.inc.php updaten, ich poste dann hier damit Du die Meldung bekommst wenn das Update da ist!

1 Like

Das Problem ist gefixt, die Firmware für die neuen GL-Inet Router beinhalten nicht mehr „inet“ im Namen, sondern nach dem „gl“ direkt das Kürzel für das Produkt, auch fehlt nun eine Versionierung, die es bei den alten Routermodellen noch gab, daher habe ich kurzerhand die Modelle in „GL-Inet (alt)“ und „GL-Inet“ aufgeteilt, die alten Modelle gibt es glaube ich ehh nicht mehr im Handel.

2 Dateien (config.inc.php und ffrouter_parsen.function.php) musste ich dafür anpassen und sind nun aktuell im Github zu finden.

Danke, läuft wieder.

1 Like

EDIT: Performance gefixt, und alle anderen Fehler nun auch.

Moin ich habe mal den Downloader mit der Funktion ein Remote HTTP Verzeichnis zu nutzen erweitert. Kurz gesagt: Nix ändert sich an den configs. Nur der Parser ist so angepasst wenn nun eine http:// oder https:// Seite als Download Verzeichnis angegeben ist diese gecheckt und genutzt wird.

Das ganze wurde nicht im laufenden Betrieb getestet.

(Test lief unter PHP5.5 Curl ist benötigt!!!)

Link zur bearbeiteten Datei: ffhef-fw-dl/ffrouter_parsen.function.php at master · MTRNord/ffhef-fw-dl · GitHub

3 Likes