Benutzer-Werkzeuge

Webseiten-Werkzeuge


technik:software:firmware_selbst_kompilieren_und_signieren

Zielgruppe

Interessierte, die die Freifunk Images selbst kompilieren wollen. Fertige Images von Freifunk stuttgart sind hier zu finden: http://firmware.freifunk-stuttgart.de

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:

sudo apt-get install git subversion python build-essential gawk unzip libncurses-dev libz-dev libssl-dev wget

Build-Umgebung einrichten

Wir haben ein Bash-Script erstellt, um die Erstellung der Freifunk-Stuttgart-Firmware zu vereinfachen. Die Build-Umgebung wird eingerichtet, indem folgendes Skript ausgeführt wird. Grundlage hiefür ist das Gluon Repository https://github.com/freifunk-gluon/gluon.git und die Stuttgart spezifische site-conf https://github.com/freifunk-stuttgart/site-ffs/

#!/bin/bash
set -e

GLUON_VERSION=v2017.1.4
CORES=$(expr $(nproc) + 1)

git clone https://github.com/freifunk-gluon/gluon.git #-b GLUON_VERSION
cd gluon/
git clone https://github.com/freifunk-stuttgart/site-ffs.git site #-b feature/2017.1.x site
make update

OPTIONS="GLUON_BRANCH=stable BROKEN=1 "
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
#contrib/sign.sh $SECRETKEY output/images/sysupgrade/stable.manifest
#contrib/sign.sh $SECRETKEY output/images/sysupgrade/beta.manifest
#contrib/sign.sh $SECRETKEY output/images/sysupgrade/nightly.manifest

Die fertigen Firmware-Images befinden sich anschließend im Verzeichnis:

gluon/images/

Firmware Image manuell flashen

Prinzipiell ist so vorzugehen, wie auf der Seite router_flashen beschrieben.

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)

sudo apt get install pkg-config cmake

ECDSA-Utils

Wichtig hierzu ist, dass auf dem System die ECDSA-Utils vorhanden sind. So werden diese installiert:

cd
 git clone http://git.universe-factory.net/libuecc
 cd libuecc
 cmake ./
 make
 sudo make install
 sudo ldconfig
 cd
 git clone https://github.com/tcatm/ecdsautils.git
 cd ecdsautils
 mkdir build
 cd build/
 cmake ../
 make
 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=/usr/local/lib
export LD_LIBRARY_PATH

Privaten und öffentlichen Schlüssel zum Signieren erzeugen

Privaten Schlüssel in Datei 'key.secret' erzeugen:

 ecdsautil generate-key > key.secret 

Öffentlichen Schlüssel aus privatem erzeugen:

cat key.secret | ecdsautil show-key > key.public

Der Schlüssel sollte nur für den eigenen Benutzer lesbar sein:

chmod 600 key.secret

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/sign.sh $SECRETKEY output/images/sysupgrade/stable.manifest
contrib/sign.sh $SECRETKEY output/images/sysupgrade/beta.manifest
contrib/sign.sh $SECRETKEY output/images/sysupgrade/nightly.manifest

Quellen:

technik/software/firmware_selbst_kompilieren_und_signieren.txt · Zuletzt geändert: 2017/12/09 09:59 von flip