Zum Inhalt springen

Berlin:Tutorials/Falter Firmware selber bauen

Aus wiki.freifunk.net
___.         .__.__   __                
\_ |_Freifunk|__|  |_/  |_  Berlin_____ 
 | __ \|  |  \  |  |\   __\/ __ \_  __ \
 | \_\ \  |  /  |  |_|  | \  ___/|  | \/
 |___  /____/|__|____/__|  \___  >__|   
     \/ build your own Falter! \/       


Mit den Falter-Releases wurde ein neues Build-System eingeführt: Firmware und Pakete werden nicht mehr generell aus dem Quelltext gebaut, sondern aus vorkompilierten Dateien zusammengesetzt. Dieses Vorgehen spart sehr viel Zeit und Ressourcen. Statt rund 2 Stunden lang (systemabhängig) alle Quellen zu bauen, um ein einzelnes Firmware-Image zu erhalten, kann ein Image nun innerhalb weniger Minuten erzeugt werden.

Der zugrundeliegende Mechanismus ist der OpenWrt-Imagebuilder.

Da Falter ein Packagefeed ist, kann für jeden Router, der in der zugrunde liegenden OpenWrt-Version unterstützt wird, ein Falter-Image erzeugt werden. Wie das geht, zeigt dieser Artikel.

Builter, Imagebuilder und Buildsystem laufen nativ nur auf x64-Linux (amd64/x86_64, kein nativer aarch64/arm-Support). Falls Du nur Windows zur Verfügung hast, kannst Du Dir eine Linux-VM erstellen oder mit WSL2 zum Beispiel Ubuntu direkt in Windows installieren. Auf Apple Silicon gelingt der Falter-Build, indem man mit Colima eine x86_64-Linux-VM startet, Docker auf deren Socket zeigt und darin den Falter-Builter ausführt; siehe Apple Silicon: Build mit Colima / Docker.

Howto

Abhängigkeiten installieren

OpenWrt braucht zum Bauen der Images bestimmte Pakete. Installieren kann man diese auf Debian/Ubuntu-Systemen mit:

sudo apt update
sudo apt install build-essential libncurses5-dev libncursesw5-dev \
zlib1g-dev flex rsync curl sqlite3 gawk git gettext libssl-dev \
xsltproc wget unzip python3 python3-setuptools python3-pip zstd

und auf RedHat/Fedora-Systemen mit:

sudo dnf install make automake gcc gcc-c++ kernel-devel \
ncurses-devel zlib-devel openssl-devel libxslt gawk git wget unzip \
python3 python3-setuptools zstd perl-FindBin

Buildsystem herunterladen

Wir laden das Buildsystem direkt von GitHub herunter:

git clone https://github.com/freifunk-berlin/falter-builter.git falter-image-builder

Und wechseln in das Verzeichnis:

cd falter-image-builder

Wenn es zu einem späteren Zeitpunkt Updates gibt, kann man diese mit git pull herunterladen.

Image bauen

Das aktuelle Build-Script liegt im Repository unter build/build.sh und wird so aufgerufen:

build/build.sh <version> <target> <profile> [destination]
version
Die Falter-Version, welche Du bauen möchtest, zum Beispiel 1.6.0. Wenn Du nicht weißt, welche Version Du nehmen sollst, wähle am besten die aktuelle Falter-Version. In diesem Artikel ist das 1.6.0.
target
Das OpenWrt-Target/Subtarget, in dem sich der gewünschte Router befindet, zum Beispiel ramips/mt7621.
profile
Der Profilname Deines Routers. Er weicht häufig etwas vom Handelsnamen ab. Für den Genexis Pulse EX400 ist das Profil genexis_pulse-ex400.
destination
Optionales Zielverzeichnis für die fertigen Images. Wenn es nicht angegeben wird, schreibt der Builter nach out/.

Man kann version, target oder profile weglassen, um sich die jeweils verfügbaren Optionen anzeigen zu lassen.

Die Variante wird über FALTER_VARIANT gesetzt. Für ein Tunneldigger-Image:

export FALTER_VARIANT=tunneldigger

Beispiel: Genexis Pulse EX400, Falter 1.6.0, tunneldigger

Um ein Tunneldigger-Falter-Image für einen Genexis Pulse EX400 zu erzeugen, sieht der Aufruf so aus:

FALTER_VARIANT=tunneldigger build/build.sh 1.6.0 ramips/mt7621 genexis_pulse-ex400

Das fertige Sysupgrade-Image heißt ungefähr:

openwrt-25.12-snapshot-...-freifunk-falter-1.6.0-ramips-mt7621-genexis_pulse-ex400-sysupgrade.bin

Target und Routerprofil finden

Den Parameter target musst Du für Deinen Router recherchieren. Das Target hängt vom Chipsatz ab, der im Router verbaut ist, und ist deshalb von Routermodell zu Routermodell verschieden. Am besten schaust Du dafür auf der Routerseite im OpenWrt-Wiki nach.

Wenn Du das Target kennst, kannst Du Dir die verfügbaren Profile anzeigen lassen. Beispiel für Falter 1.6.0 und ramips/mt7621:

build/build.sh 1.6.0 ramips/mt7621

In der Ausgabe suchst Du den Profilnamen Deines Routers. Bitte achte sehr genau auf die Details. Insbesondere Hardware-Versionen müssen übereinstimmen.

Beispielprofil für den Genexis Pulse EX400:

genexis_pulse-ex400

Images kopieren/sichern

Die fertigen Images landen standardmäßig unter out/. Falls Du die Images aufheben möchtest, solltest Du sie an einen anderen Ort kopieren.

Apple Silicon: Build mit Colima / Docker

Auf Apple-Silicon-Macs läuft macOS nativ auf ARM/aarch64. Für den Falter-Builter beziehungsweise den OpenWrt-Imagebuilder wird jedoch eine x86_64/amd64-Linux-Umgebung benötigt. Das geht mit Colima, Docker und einem x86_64-Profil.

Colima und Docker installieren

Mit Homebrew:

brew install colima docker docker-buildx qemu lima-additional-guestagents

Colima als x86_64 starten

colima start falter \
  --arch x86_64 \
  --cpu 4 \
  --memory 8 \
  --disk 60 \
  --runtime docker

Danach den Docker-Client auf den Colima-Socket zeigen lassen:

export DOCKER_HOST="unix://${HOME}/.colima/falter/docker.sock"

Prüfen:

docker run --rm debian:bookworm uname -m

Die Ausgabe muss sein:

x86_64

Falls hier aarch64 steht, läuft die Umgebung falsch für diesen Build.

Dockerfile erstellen

Lege einen Arbeitsordner an:

mkdir -p ~/falter-build
cd ~/falter-build

Erstelle ein Dockerfile:

FROM debian:bookworm

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
  bash ca-certificates git wget curl build-essential file gawk gettext grep \
  libncurses5-dev libncursesw5-dev libssl-dev \
  python3 python3-setuptools python3-pip \
  rsync sqlite3 tar unzip xz-utils zstd zlib1g-dev flex xsltproc time \
  perl patch diffutils bzip2 gzip coreutils findutils util-linux \
  && rm -rf /var/lib/apt/lists/*

WORKDIR /work
RUN git clone https://github.com/freifunk-berlin/falter-builter.git
WORKDIR /work/falter-builter

CMD ["bash"]

Docker-Image bauen:

docker build -t falter-builter-local .

Falter 1.6.0 für Genexis Pulse EX400 mit tunneldigger bauen

mkdir -p out

docker run --rm -it \
  -e FALTER_VARIANT=tunneldigger \
  -v "${PWD}/out:/work/falter-builter/out" \
  falter-builter-local \
  build/build.sh 1.6.0 ramips/mt7621 genexis_pulse-ex400

Das fertige Sysupgrade-Image liegt danach unter out/.

Weiterführende Links

Der Quellcode und eine englische Anleitung befinden sich im Falter-Builter-Repo auf GitHub.