Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
technik:software:firmware_selbst_kompilieren_und_signieren [01.05.2019 - 12:45] – [Firmware Bauen] 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 vorbereiten Autoupdate ====== | + | |
- | 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:// | + |