Images bauen

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:

  1. NIGHTLY – automatisch nächtlich erzeugt, signiert durch autobuilder – ungetest
  2. BETA – Kopie eines NIGHTLYs, signiert durch eine weitere Person – Testphase
  3. 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.