Beschreibung der Firmware Erstellenung

Ich möchte besser verstehen wie die Freifunk Firmware in Rhein Sieg gebaut wird.

Ich habe jetzt wirklich viel gesucht aber ich habe kein Dokument gefunden das beschreibt wie die Rhein Sieg Firmware gebaut wird.

Gibt es irgendwo so etwas? Ich wäre auch gerne bereit hier bei der Erstellung einer Dokumentation mitzuarbeiten möchte dann aber auf existierende Artefakte zurückgreifen. Gerne würde ich auch persönliche Notizen übernehmen die vielleicht nicht auf Schönheit getrimmt worden sind.

Grundsätzliches:

Wie man auf Gluon basierende Firmware Images baut zeigt dir die Freifunkthek:

Derzu benötigst du die site.conf deiner Community:
https://github.com/Freifunk-Rhein-Sieg/sites-rsk

Diese musst an die jeweilige Gluon Version angepasst sein.

Wie das geht steht hier:
https://gluon.readthedocs.org/

Zuerst unten links die passende Gluon Versionsnummer auswählen (letzte stable war 2015.1.2, Github Master Branch ist latest), dann sind die nötigen Anpassungen unter site configuration beschrieben. Die Scriptsprache der site.* Dateien ist JSON.

Das ist schon alles.

2 Likes

Hi @hbauer,

die Firmware(s) baue ich. Eigentlich genau wie @anon68922371 das oben geschrieben hat.

Da wir im Rhein Sieg Kreis für jede Gemeinde/Stadt eine eigene Firmware haben, um später einmal einfacher Splitten zu können gibt es hier https://github.com/Freifunk-Rhein-Sieg/sites-rsk für jede Stadt die ein Image hat einen eigenen Branch mit der site.conf

Leider habe ich da auch zu wenig Zeit für das Ordentlich zu Dokumentieren, du darfst das aber gerne machen.

Für den Build Prozess habe ich ein „kleines“ Script, welches mit der Zeit immer wieder gewachsen ist, und dadurch nicht umbedingt übersichtlicher wird. Aber ich glaube man kann durchblicken:

#!/usr/bin/env bash

# Beende das Skript, sobald ein Fehler bei einem Kommando auftritt
set -e
set -o pipefail

# Überprüfe, ob alle notwendigen Tools zur Verfügung stehen
for tool in git make
do
    command -v $tool >/dev/null 2>&1 \
        || { echo >&2 "\"$tool\" nicht installiert. Abbruch"; exit 1; }
done
rsync_opt="-aP --delete" # default rsync options
# Bedingungen setzen
gluon_pfad=$WORKSPACE/
case $input_community in
    lohmar)
        community=lohmar
        site_code=lo
        firmware_pfad=/home/gluon/firmware/lohmar/;;
    sanktaugustin)
        community=sanktaugustin
        site_code=sa
        firmware_pfad=/home/gluon/firmware/sanktaugustin/;;
    niederkassel)
        community=niederkassel
        site_code=ndk
        firmware_pfad=/home/gluon/firmware/niederkassel/;;
    siegburg)
        community=siegburg
        site_code=su
        firmware_pfad=/home/gluon/firmware/siegburg/;;
    rheinbach)
        community=rheinbach
        site_code=rb
        firmware_pfad=/home/gluon/firmware/rheinbach/;;
     wachtberg)
        community=wachtberg
        site_code=wb
        firmware_pfad=/home/gluon/firmware/wachtberg/;;
     meckenheim)
        community=meckenheim
        site_code=me
        firmware_pfad=/home/gluon/firmware/meckenheim/;;
     much)
        community=much
        site_code=mu
        firmware_pfad=/home/gluon/firmware/much/;;
     neunkirchen)
        community=neunkirchen
        site_code=ne
        firmware_pfad=/home/gluon/firmware/neunkirchen/;;
    *)
        echo "Keine gültige Auswahl für Community!"
        exit 1;;
esac
case $input_branch in
    stable*|s*)
        gluon_version=v2015.1.2
        site_version=v2015.1
        gluon_version_name=2015.1.2
        branch=stable
        gluon_options=""
        branch_name=stable;;
    beta*|b*)
        gluon_version=master
        site_version=v2015.2
        gluon_version_name=2015.2
        branch=beta
        gluon_options=""
        branch_name=beta;;
    experimental*|e*)
        gluon_version=master
        site_version=v2015.2
        gluon_version_name=v2015.2
        branch=experimental
        gluon_options="BROKEN=1"
        branch_name=exp;;
    *)
        echo "Keine gültige Auswahl für Branch!"
        exit 1;;
esac
# Task/Feature ausführen
echo -e "Repositorys werden Aktualisiert"
#Update Gluon
cd $gluon_pfad
git checkout $gluon_version
git pull origin $gluon_version
#Update Site.conf
if ! [ -d "./site" ] ; then
git clone https://github.com/Freifunk-Rhein-Sieg/sites-rsk site
fi
cd "$gluon_pfad""site"
git pull
git checkout $community-$site_version
git pull origin $community-$site_version
cd $gluon_pfad
#make dirclean

#Firmware Bauen
lastversion=`/bin/cat lastversion.log`
if [ "$lastversion" != "$gluon_version" ] ; then
echo $lastversion
echo $gluon_version
echo clean
make dirclean
fi
echo $gluon_version > lastversion.log
make update
make V=s GLUON_BRANCH=$branch GLUON_TARGET=ar71xx-generic DEFAULT_GLUON_RELEASE=$gluon_version_name-$branch_name-$input_version $gluon_options
make -j5 GLUON_BRANCH=$branch GLUON_TARGET=ar71xx-nand DEFAULT_GLUON_RELEASE=$gluon_version_name-$branch_name-$input_version $gluon_options
make -j5 GLUON_BRANCH=$branch GLUON_TARGET=mpc85xx-generic DEFAULT_GLUON_RELEASE=$gluon_version_name-$branch_name-$input_version $gluon_options
make -j5 GLUON_BRANCH=$branch GLUON_TARGET=x86-generic DEFAULT_GLUON_RELEASE=$gluon_version_name-$branch_name-$input_version $gluon_options
make -j5 GLUON_BRANCH=$branch GLUON_TARGET=x86-kvm_guest DEFAULT_GLUON_RELEASE=$gluon_version_name-$branch_name-$input_version $gluon_options
make manifest GLUON_BRANCH=$branch
		if ! [ -d $JENKINS_HOME/troisdorf/images ] ; then
			mkdir $JENKINS_HOME/troisdorf/images
		fi
		if ! [ -d $JENKINS_HOME/troisdorf/images/$community ] ; then
			mkdir $JENKINS_HOME/troisdorf/images/$community
		fi
		if [ -d $JENKINS_HOME/troisdorf/images/$community/$branch ] ; then
			rm -rf $JENKINS_HOME/troisdorf/images/$community/$branch
		fi
        if [ $input_branch = stable ]; then
 		cp -r "$gluon_pfad"images $JENKINS_HOME/troisdorf/images/$community/$branch
        rm -rf "$gluon_pfad"images
        else
        cp -r "$gluon_pfad"output/images/ $JENKINS_HOME/troisdorf/images/$community/$branch
        rm -rf "$gluon_pfad"output/images
        fi
        chmod 775 -R $JENKINS_HOME/troisdorf/images/$community/$branch/