Diese Seite erklärt die internen Abläufe nach der nächtlichen Image Erstellung bei Freifunk Westpfalz. Sie ist als Hilfestellung für die agierenden Personen und zur Dokumentation gedacht.
Schlüssel
Die Images werden mittels ecdsautils signiert.
https://github.com/tcatm/ecdsautils
Diese sind auf GW01 eingerichtet und finden sich unter /usr/local/bin
- ecdsakeygen
- ecdsasign
- ecdsaverify
Sie sollten demnach ohne Pfadangabe aufrufbar sein, ggf. ist die PATH-Variable in ~/.bashrc zu ergänzen.
Die öffentlichen Schlüssel nachfolgender Personen, sind in der Firmware hinterlegt:
- (autobuilder)
- little.ben
- paalsteek
- zaunei – ab Version 0.2.0
Banches
Wir verwenden aktuell drei BRANCHES:
- NIGHTLY – automatisch nächtlich erzeugt, signiert durch autobuilder – ungetest
- BETA – Kopie eines NIGHTLYs, signiert durch eine weitere Person – Testphase
- STABLE – Kopie einer BETA, signiert durch noch eine weitere Person – Produktiv
Versionierung
Die Versionsnummern setzen sich nach folgendem Schema zusammen
gluon-ffwp-X.Y.Z-JJMMDD-HHMM-modellkennung-version
X: derzeit 0
Y: hochgezählt bei neuem STABLE
Z: hochgezählt bei neuem BETA, wird genullt nach STABLE
JJMMDD: Tagesstempel
HHMM: Uhrzeit
Signieren
Der nächtliche Built-Prozess findet auf GW01 statt und erzeugt aus einem ausgewählten Release von Gluon sowie dem jeweils aktuellen Master aus site-ffwp die NIGHTLY-Images für die Router und signiert diese automatisch.
Die Images finden sich unter /home/benjamin/clones/img
Um aus einem NIGHTLY ein BETA zu machen, werden die Ordner factory und sysupgrade samt Inhalt aus dem NIGHTLY Ordner zunächst nach PRE_BETA kopiert. Dort werden sie (ggf. durch mehrere Personen) signiert und schließlich von PRE_BETA nach BETA kopiert. Ab dann sind sie für das Autoupdate und den manuellen Download verfügbar.
Das Bereitstellen eines STABLEs funktioniert analog im PRE_STABLE Ordner.
sign.sh
Zum Signieren liefert Gluon ein Skript mit /home/benjamin/clones/gluon/contrib/sign.sh. Dieses Skript benötigt die MANIFEST-Datei (z.B. /home/benjamin/clones/img/.pre_beta/sysupgrade/beta.manifest) sowie eine Datei mit dem privaten Schlüssel der signierenden Person als Übergabeparameter.
sign_in.sh
Wir haben diesen Prozess erweitert (sign_in.sh), so dass der private Schlüssel über STDIN eingesteuert werden kann. So kann der Schlüssel z.B. mittels Zwischenablage eingesteuert werden und muss nicht in einer Datei gespeichert sein. Nach der Eingabe wird der Schlüssel im STDOUT angezeigt, taucht aber nicht in der Prozessliste o.ä. auf.
Rechte und Ordner
Derzeit liegt der Built-Prozess noch in einem USER-HOME Verzeichnis. Das werden wir noch umbauen. Aktuell haben wir eine Linux-Group ffadm. Diese hat u.a. Schreibechte auf die vorgenannten Built-Ordner. Sollte etwas nicht passen, müssen wir hier nachbessern.
Signierungsprozess
Es sollte genügen, wenn man folgende Befehl (eine Zeile) ausführt, das Skript fragt dann nach dem privaten Key (auf STDIN):
Beta:
/home/benjamin/clones/gluon/contrib/sign_in.sh /home/benjamin/clones/img/.pre_beta/sysupgrade/beta.manifest
Stable:
/home/benjamin/clones/gluon/contrib/sign_in.sh /home/benjamin/clones/img/.pre_stable/sysupgrade/stable.manifest
Im Ergebnis wird in der jeweiligen MANIFEST-Datei eine weitere Zeile mit der Signatur angefügt (unter der Zeile mit den drei Strichen „—„).
Veröffentlichen
Ist die letzte Signatur hinzugefügt, so kann
- der Inhalt aus PRE_BETA nach BETA
- bzw. der Inhalt aus PRE_STABLE nach STABLE
kopiert und somit veröffentlicht werden.