Skip to content
Snippets Groups Projects

Firmware von Freifunk Hochstift

Dieses Repository beherbergt die Skripte, um die Firmware von Freifunk Paderborn zu bauen. Die Inhalte dieses Repositories werden unter einer "2-clause BSD" Lizenz veröffentlicht, Details sind der Datei LICENSE zu entnehmen.

Beim Bauen der Firmware werden weitere Git-Repositories heruntergeladen und benutzt:

Vorbereitung / Umgebung

Es gibt zwei Möglichkeiten, die Firmware zu bauen. Entweder in einem Docker-Container oder "nativ" auf einem Debian/Ubuntu-System. Der Weg über Docker ist der empfohlene Weg für alle, die die Firmware nur nachbauen wollen - der Docker-Weg ermöglicht vergleichbare Builds.

Hinweis für MacOS-Nutzer: derzeit scheint die Volume-Mount-Funktionalität defekt zu sein (siehe auch docker issue #4023), bis ein Workaround existiert wird die Nutzung von Linux empfohlen.

Docker-Container

Man benötigt Docker, gawk und git:

sudo apt-get install gawk git
sudo apt-get install docker.io || wget -qO- https://get.docker.com/ | sh
docker pull ffpb/build

Das Docker-Repository ffpb/build kann auch selbst erstellt werden: docker build -t ffpb/build docker (wenn das Git-Repository, in dem diese ReadMe liegt, ausgecheckt wurde)

Entwickler-System

Als Requirements sind die allgemeinen Build-Tools sowie libfaketime nötig. Zum Bauen des gcc in der Toolchain sind noch drei weitere Bibliotheken notwendig:

sudo apt-get install build-essential git gawk python subversion unzip p7zip-full \
  faketime lib{gmp,mpfr,mpc}-dev zlib1g-dev ncurses-dev

Bauen

Klone das Repository in dem diese ReadMe liegt, falls noch nicht geschehen und wechsle in das Verzeichnis:

git clone https://git.c3pb.de/freifunk-pb/firmware.git
cd firmware

Rufe build.sh bzw. docker-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 (BRANCH=stable/testing default: "dirclean", BRANCH=experimental default: "clean")
  • FAKETIME_LIB gibt den Pfad zu libfaketime.so.1 an (default: "/usr/lib/{MACHTYPE}-{OSTYPE}/faketime/libfaketime.so.1")
  • 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)
  • NO_FAKETIME falls "1", wird ohne Faketime gebaut (default: "0")
  • PRIORITY spezifiziert die maximale Anzahl an Tagen, die ein Knoten das Einspielen des Updates verzögern darf (default: $(DEFAULT_GLUON_PRIORITY))
  • SITE_ID gibt die Commit-ID des Site-Repos an (default: HEAD)
  • SITE_REPO_FETCH_METHOD wählt die Methode zum Klonen des Site-Repos ('git' oder 'http', default: 'http')
  • 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")

Beispiele

# 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 (nur für Experten)
BASE=master BRANCH=experimental ./build.sh

Nach erfolgreichem Build-Vorgang liegt die Firmware fertig paketiert im output/ Verzeichnis und in versions/ wurde (außer bei BRANCH=experimental) eine Versions-Informationsdatei abgelegt. Mit dieser (nur der Name) kann build-version.sh die gegebene Version erneut bauen.

Kontroll-Build einer Firmware

Klone das Repository in dem diese ReadMe liegt, falls noch nicht geschehen und wechsle in das Verzeichnis:

git clone https://git.c3pb.de/freifunk-pb/firmware.git
cd firmware

Im Verzeichnis versions liegen alle bekannten Firmware-Versionen. Durch Aufruf von build-version.sh und Übergabe des Dateinamens (ohne Pfad) wird diese Version erneut gebaut. Es werden zwei Umgebungsvariablen unterstützt:

  • VERBOSE=1 funktioniert wie beim normalen Build und aktiviert Debug-Ausgaben
  • NO_DOCKER=1 benutzt build.sh statt docker-build.sh zum Bau

Die Nutzung von Docker zur Überprüfung von Builds wird dringend empfohlen, da Docker Unterschiede zwischen den Build-Rechnern ausgleicht und die Binaries so einfacher überprüfbar werden.

Beispiele

./build_version.sh 0.6.1_stable # baut Version '0.6.1_stable' erneut
NO_DOCKER=1 ./build_version.sh 0.6.1_stable # ohne Docker-Umgebung erneut bauen