# Firmware von Freifunk Hochstift Dieses Repository beherbergt die Skripte, um die Firmware von Freifunk Hochstift zu bauen. Die Inhalte dieses Repositories werden unter einer "2-clause BSD" Lizenz veröffentlicht. Details sind der Datei [LICENSE](./LICENSE) zu entnehmen. Beim Bauen der Firmware werden weitere Git-Repositories heruntergeladen und benutzt: * Basis: [Gluon (Fork)](https://git.ffho.net/freifunkhochstift/gluon) * Site-Repository: [FFHO-Site](https://git.ffho.net/freifunkhochstift/ffho-site) ## Vorbereitung / Umgebung Für das Build-System werden die gennerell für [Gluon](https://gluon.readthedocs.io) notwendigen Pakete, sowie lua5.1 benötigt. ```bash sudo apt-get install git subversion python build-essential gawk unzip \ libncurses-dev libz-dev libssl-dev lua5.1 ``` ## Bauen Klone das Repository in dem diese ReadMe liegt (falls noch nicht geschehen) und wechsle in das Verzeichnis: ```bash git clone https://git.ffho.net/freifunkhochstift/ffho-firmware-build.git build cd build ``` Rufe `build.sh` auf und übergebe folgende Umgebungsvariablen: * **BASE** gibt die Gluon-Version an, die als Basis benutzt werden soll (z.B. 'v2014.4') * **BRANCH** ist der Name des Firmware-Branches (also 'stable', 'testing' oder 'experimental') * **VERSION** wird die Versions-Nr. der neuen Firmware (kann bei BRANCH=experimental weggelassen werden) optional: * **AUTOUPDATER** setzt den Autoupdater auf einen anderen Branch als bei **BRANCH** angegeben ('stable', 'testing', 'experimental' oder 'off', default: **BRANCH**) * **BROKEN** falls "1", erzeuge zusätzlich Firmware-Images für ungetestete Plattformen (default: "0") * **BUILD_TS** setzt den Zeitstempel für den Build-Prozess (format: %Y-%m-%d %H:%M:%S) * **CLEAN** falls "dirclean", wird `make dirclean` ausgeführt, falls "clean" wird `make clean` ausgeführt, ansonsten keins von beidem (default: "none") * **DEVICES** baut nur die Images für die angegebenen Devices und nicht für das gesamte Target * **KEY_DIR** gibt das Verzeichnis für gluon-opkg-key an (default: ./opkg-keys) * **MAKEJOBS** spezifiziert die Anzahl der parallel laufenden Compiler-Prozesse (default: ein Prozess pro CPU/Kern) * **PRIORITY** spezifiziert die maximale Anzahl an Tagen, die ein Knoten das Einspielen des Updates verzögern darf (default: $(DEFAULT_GLUON_PRIORITY)) * **UPLOAD** falls "1", lade die neue Firmware auf den Webserver hoch * **UPDATEGIT** falls "1", bereite das Firmware-Git auf die neue Version vor * **SITE** gibt die Site-Version an, die für den Build genutzt werden soll (default: identisch zu **BRANCH**) * **TARGETS** ein Liste durch Leerzeichen separierter Hardware-Zielplattformen (default: alle bekannten Plattformen) * **VERBOSE** falls "1", schaltet Debug-Ausgaben mit an - dies ist nur notwendig wenn Fehler beim Build auftreten (default: "0") * **VERSIONS_DIR** gibt das Verzeichnis für die Versions-Dateien an (default: ./versions) ### Beispiele ```bash # Baut eine testing-Firmware auf Basis von Gluon 2014.4 BASE=v2014.4 BRANCH=testing VERSION=0.6~rc1 ./build.sh # Baut eine experimental-Firmware auf Basis des aktuellen Gluon-Master BASE=master BRANCH=experimental ./build.sh ``` Nach erfolgreichem Build-Vorgang liegt die Firmware fertig paketiert im `src/output/` Verzeichnis und in `versions/` wurde eine Versions-Informationsdatei abgelegt. Unter Angabe dieser Datei kann mit `build-version.sh` die Version erneut gebaut werden. (siehe auch: Kontroll-Build einer Firmware) ## Kontroll-Build einer Firmware Klone das Repository in dem diese ReadMe liegt, falls noch nicht geschehen und wechsle in das Verzeichnis: ```bash git clone https://git.ffho.net/freifunkhochstift/ffho-firmware-build.git cd firmware ``` Durch Aufruf von `build-version.sh` und Übergabe des Versions-Datei kann eine Firmware erneut gebaut werden. Es werden folgende Umgebungsvariablen optional unterstützt: * **BROKEN** falls "1", erzeuge zusätzlich Firmware-Images für ungetestete Plattformen (default: "0") ### Beispiel für Firmware 1.0.6 ```bash wget -O versions/1.0.6 https://firmware.hochstift.freifunk.net/1.0.6/build-info.txt ./build_version.sh ./versions/1.0.6 ```