Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| technik:software:firmware_selbst_kompilieren_und_signieren [01.05.2019 - 12:46] – [Firmware-Image für vorbereiten Autoupdate] Wilhelm | technik:software:firmware_selbst_kompilieren_und_signieren [27.05.2019 - 15:42] (aktuell) – nrb | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ==== Zielgruppe ==== | + | siehe https://wiki.freifunk-stuttgart.net/ |
| - | Interessierte, | + | |
| - | + | ||
| - | + | ||
| - | ==== Voraussetzungen ==== | + | |
| - | Bevor die Firmware für Freifunk Stuttgart kompiliert werden kann, müssen folgende Voraussetzungen erfüllt sein. Es müssen die genannten Pakete auf dem verwendeten System installiert sein und die Build-Umgebung eingerichtet werden. | + | |
| - | + | ||
| - | * Linux System (getestet mit Ubuntu 14.04 LTS) | + | |
| - | + | ||
| - | ===== Firmware bauen ===== | + | |
| - | ==== Benötigte Pakete ==== | + | |
| - | + | ||
| - | Um die Firmware kompilieren zu können, müssen folgende Pakete auf dem System vorhanden sein: | + | |
| - | * git (to get Gluon and other dependencies) | + | |
| - | * subversion | + | |
| - | * python (Python 3 doesn’t work) | + | |
| - | * build-essential | + | |
| - | * gawk | + | |
| - | * unzip | + | |
| - | * libncurses-dev (actually libncurses5-dev) | + | |
| - | * libz-dev (actually zlib1g-dev) | + | |
| - | * libssl-dev | + | |
| - | * wget | + | |
| - | + | ||
| - | Hiermit werden alle installiert: | + | |
| - | < | + | |
| - | + | ||
| - | ==== Build-Umgebung einrichten ==== | + | |
| - | Wir haben ein Bash-Script erstellt, um die Erstellung der Freifunk-Stuttgart-Firmware zu vereinfachen. Die Build-Umgebung wird eingerichtet, | + | |
| - | Grundlage hiefür ist das Gluon Repository [[https://github.com/ | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | set -e | + | |
| - | + | ||
| - | GLUON_VERSION=v2017.1.4 | + | |
| - | CORES=$(expr $(nproc) + 1) | + | |
| - | + | ||
| - | git clone https:// | + | |
| - | cd gluon/ | + | |
| - | git clone https:// | + | |
| - | make update | + | |
| - | + | ||
| - | OPTIONS=" | + | |
| - | make -j$CORES GLUON_TARGET=ar71xx-generic $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ar71xx-tiny $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ar71xx-nand $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=brcm2708-bcm2708 $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=brcm2708-bcm2709 $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=mpc85xx-generic $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=x86-generic $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=x86-geode $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=x86-64 $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ar71xx-mikrotik $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ipq806x $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=mvebu $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ramips-mt7621 $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ramips-mt7628 $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=ramips-rt305x $OPTIONS | + | |
| - | make -j$CORES GLUON_TARGET=sunxi $OPTIONS | + | |
| - | + | ||
| - | make manifest GLUON_BRANCH=stable | + | |
| - | make manifest GLUON_BRANCH=beta | + | |
| - | make manifest GLUON_BRANCH=nightly | + | |
| - | # | + | |
| - | # | + | |
| - | # | + | |
| - | </ | + | |
| - | + | ||
| - | Die fertigen Firmware-Images befinden sich anschließend im Verzeichnis: | + | |
| - | < | + | |
| - | + | ||
| - | + | ||
| - | ==== Firmware-Image manuell flashen ==== | + | |
| - | Prinzipiell ist so vorzugehen, wie auf der Seite [[anleitungen: | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ====== Firmware-Image für Autoupdate vorbereiten | + | |
| - | Damit die Firmware an alle Stuttgart-Knoten verteilt wird, muss die Firmware noch signiert werden. Die folgenden Schritte sind nicht notwendig wenn die Images nur selbst manuell auf die Router gespielt werden. | + | |
| - | Für das signieren muss zuerst eine Manifest-Datei erzeugt werden, welche die Signaturen enthalten wird. | + | |
| - | + | ||
| - | + | ||
| - | ==== Benötigte Pakete ==== | + | |
| - | pkg-config (wird für ECDSA-Utils benötigt) | + | |
| - | cmake (wird für ECDSA-Utils benötigt) | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | ===ECDSA-Utils=== | + | |
| - | | + | |
| - | + | ||
| - | < | + | |
| - | cd | + | |
| - | git clone http:// | + | |
| - | cd libuecc | + | |
| - | cmake ./ | + | |
| - | | + | |
| - | sudo make install | + | |
| - | sudo ldconfig | + | |
| - | cd | + | |
| - | git clone https:// | + | |
| - | cd ecdsautils | + | |
| - | mkdir build | + | |
| - | cd build/ | + | |
| - | cmake ../ | + | |
| - | | + | |
| - | sudo make install | + | |
| - | </ | + | |
| - | + | ||
| - | == Eventuelle Probleme == | + | |
| - | + | ||
| - | Falls eine Shared Library libuecc.so.0 nicht gefunden werden kann, könnte es sein, dass die Umgebungsvariable LD_LIBRARY_PATH noch nicht vorhanden ist. Diese kann so gesetzt werden: | + | |
| - | + | ||
| - | LD_LIBRARY_PATH=/ | + | |
| - | export LD_LIBRARY_PATH | + | |
| - | + | ||
| - | ====== Privaten und öffentlichen Schlüssel zum Signieren erzeugen ====== | + | |
| - | Privaten Schlüssel in Datei ' | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | Öffentlichen Schlüssel aus privatem erzeugen: | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | Der Schlüssel sollte nur für den eigenen Benutzer lesbar sein: | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | + | ||
| - | ==== Firmware signieren ==== | + | |
| - | Die Manifestdateien wurden durch das oben aufgeführte Build Skript bereits erzeugt. | + | |
| - | + | ||
| - | Nun muss für die gewünschte GLUON_BRANCH noch das Signieren vorgenommen werden: | + | |
| - | + | ||
| - | < | + | |
| - | cd gluon | + | |
| - | contrib/ | + | |
| - | contrib/ | + | |
| - | contrib/ | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | Quellen: | + | |
| - | + | ||
| - | - [[http:// | + | |
| - | - [[https:// | + | |
| - | - [[http:// | + | |
| - | - [[http:// | + | |