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.
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.
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/