Freifunk Stormarn:Firmware

Aus wiki.freifunk.net
Wechseln zu: Navigation, Suche

Gluon ist die Firmware, die wir bei Freifunk Stormarn für unsere Router verwenden. Entwickelt wurde diese vom Freifunk Lübeck. Die Firmware basiert auf OpenWrt/LEDE und bietet eine einheitliche Konfiguration für die gesamte Community.

Welche Router man verwenden kann, ist in der Liste der mit Gluon kompatiblen Router zu finden.

Fertiges Image herunterladen

Wenn du kein Linux verwendest, du dich nicht mit Linux auskennst oder dir einfach nur die Arbeit ersparen willst, dann kannst du die fertigen Images von stormarn.freifunk.net herunterladen.

Hier findest du eine Anleitung wenn du Einen Knoten einrichten möchtest.

Kompilieren von Gluon

# Um Gluon zu kompilieren installiert man die benötigten Pakete
sudo apt-get install git make gcc g++ unzip libncurses5-dev zlib1g-dev subversion gawk bzip2 libssl-dev wget

Dieses ist nur einmalig erforderlich und sollte nur passieren wenn die Pakete nicht vorhanden sind

# Diese Pakete werden benötigt, um nachher die Toolchain und die Firmware an sich zu kompilieren. Des weitern sollten mind. 7 GB je Target an freiem Speicher auf der Festplatte verfügbar sein. Bei aktuell 7 möglichen Targets sollten bis zu 49 GB an Platz eingeplant werden. Man kann den Freien Speicher im aktuellen Verzeichnis anzeigen mit
df -BG .
# Hinweis: Wer sein gluon Verzeichnis von der Festplatte gelöscht hat, der kann an dieser Stelle fortsetzen.
# Nun lädt man sich die Source-Files für Gluon aus dem GitHub-Repository von Freifunk Lübeck herunter:
git clone https://github.com/freifunk-gluon/gluon.git

Auch dieser Vorgang ist nur einmalig erforderlich. Die wiederholte Ausführung führt zu einem Fehler Wenn das Repository bereits erfolgreich geclont wurde wechselt man bei weiteren Kompilierungsversuchen stattdessen in das Verzeichnis gluon und führt den Befehl git pull aus um das lokale Repository auf den aktuellen Stand zu bringen.

# Wichtig hierbei ist, dass man sich die Dateien NICHT als root und auch ohne sudo herunterlädt, da es sonst später zu Problemen beim Kompilieren kommen kann.
# Als nächstes wechselt man in das automatisch erstellte Verzeichnis
cd gluon #(nicht erforderlich wenn man sich schon im gluon Verzeichnis befindet nach Update des gluon Repositories)
# Bevor man mit dem Kompilieren beginnen kann ist der richtige Versionszweig (branch, englisch revision) auszuwählen.
# Verfügbare Versionen anzeigen
git tag
# z.B. die z.Z. aktuelle stabile Version: v2017.1.5 auswählen
git checkout v2017.1.5
# Wer hier nichts auswählt landet in dem experimentellen Zweig master und riskiert, dass das Kompilieren fehlschlägt.
# Da in diesem Repository noch keine Konfiguration dabei ist, muss diese extra heruntergeladen werden. Hierzu führt man in dem Verzeichnis gluon, wo man sich an dieser Stelle der Anleitung schon befinden sollte, folgenden Befehl aus:
git clone https://github.com/ffod/site.git 

Auch hier gilt Dieser Befehl ist nur einmalig ausführbar. Wer aktualisieren möchte wechselt stattdessen mit cd site in das site Verzeichnis und führt git pull aus

# Auch hier sicherheitshalber noch darauf achten, den richtigen Zweig auszuwählen.
cd site #(nicht erforderlich wenn man sich schon durch ein Update im site Verzeichnis befindet!)
git branch -a
# wähle den richtigen Zweig aus, z.B. '2017.1.5' um die aktuelle Version zu bauen
git checkout 2017.1.5
cd ..
# Nun sind fast alle Dateien vorhanden, um mit dem Kompilieren zu beginnen. Die letzten Dateien erhält man mit dem Befehl
make update #(dieses ist auch nach git pull erforderlich!)
# Dies dauert nur ca eine Minute.
# Nun startet man das Kompilieren
make

Mit dem Befehl make wird nun die Firmware gebaut. Ohne weitere Argumente bekommen wir einen Fehler und eine Liste mit den verfügbaren „Targets“ als Liste:

Please set GLUON_TARGET to a valid target. Gluon supports the following targets:
    * ar71xx-generic
    * ar71xx-tiny
    * ar71xx-nand
    * brcm2708-bcm2708
    * brcm2708-bcm2709
    * mpc85xx-generic
    * x86-generic
    * x86-geode
    * x86-64
Makefile:93: die Regel für Ziel „config“ scheiterte
make: *** [config] Fehler 1

Diese Targets stellen unterschiedliche Hardware-Architekturen dar. ar71xx-tiny ist eine relativ neue Gruppe von Routern mit nur 4MB ROM Speicher welcher ihren Funktionsumfang stark beschränkt. Jede dieser Gruppen können wir einzeln bauen:

 make GLUON_TARGET=ar71xx-tiny

Um das Kompilieren zu beschleunigen können wir -jX angeben X=Anzahl der Threads/Prozesse maximal Anzahl der Kerne des Prozessors +1

make -j4 GLUON_TARGET=ar71xx-tiny
# Wenn das Kompilieren fehlschlägt oder zuschauen möchte was im einzelnen passiert der benutzt
 make V=s

Das komplette Kompilieren dauert ca. 2 Stunden mit einem Kern, bei einem i7-2600k mit der Option "-j9", also mit 8 Kernen nur kanpp 30 Minuten. Diese Option sollte nicht gesetzt werden wenn beim Kompilieren Fehler gesucht werden

# Nun kann man sich einen Kaffee, eine Mate oder sonst etwas holen, ein paar Dehnübungen machen und warten.
# Sobald das Kompilieren ohne Fehler abgeschlossen ist, findet man die Images im gluon-Ordner unter
output/images/factory/ (Version zum Flashen wenn noch die Herstellerfirmware auf dem Router installiert ist)
output/images/sysupgrade 
(Version zum Ersetzen einer älteren oder anderen Gluon Version. Auch zum Ersetzen einer installierten OpenWrt/LEDE Firmware!)

Das Build Script

#!/bin/bash
start=$(date +%s)
CORES=$(expr $(nproc) + 1)
RELEASE=2017.1.5+t$(date +"%Y%m%d")
BRANCH=testing
make update GLUON_RELEASE=$RELEASE
for TARGET in ar71xx-generic ar71xx-tiny ar71xx-nand brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic x86-generic x86-geode x86-64; do
        echo "################# $(date) start building target $TARGET #################"
        make -j$CORES GLUON_TARGET=$TARGET GLUON_RELEASE=$RELEASE GLUON_BRANCH=$BRANCH || exit 1
done
make manifest GLUON_BRANCH=$BRANCH GLUON_RELEASE=$RELEASE
echo "alle Targets wurden erfolgreich erstellt"
echo -n "finished: "; date
echo "Dauer: $((($(date +%s)-start)/60)) Minuten"

Der Parameter BROKEN=1

Mit dem Parameter BROKEN=1 wird das Bauen von Images für experimentell unterstützte Hardware Aktuell z.B. Arcer C5/C7 ermöglicht. Als stable deklarierte Firmware sollte daher niemals mit BROKEN=1 kompiliert werden.

Signieren von Images

Wenn man die Gluon-Images für automatische Updates signieren möchte muss man zuerst eine Manifest-Datei erzeugen, in der die Signaturen enthalten sein werden. Wichtig hierzu ist, dass auf dem System die ECDSA Utils vorhanden sind.

Um die Manifest-Datei zu erzeugen gehen wir in das Gluon Verzeichnis und führen dort den folgenden Befehl aus:

make manifest GLUON_BRANCH=stable

Nun finden wir unter images/sysupgrade eine Datei mit dem Namen "stable.manifest".

Nun müssen wir nur noch den script zum signieren der Images ausführen. Die Befehlsreihenfolge ist die folgende:

./contrib/sign.sh pfad/zur/secret/key/datei pfad/zur/manifest/datei>


Links