Firmware/Releaseprozess

< Firmware
Version vom 25. Dezember 2019, 14:48 Uhr von Tata (Diskussion | Beiträge) (→‎Sign-Request auf Dev-Mailingliste veröffentlichen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)


Auf dieser Wikiseite werden die notwendigen Schritte zum Release einer neuen Firmware dokumentiert.

Release taggen

Jedes Release wird mit einem PGP-signierten Tag (-s) versehen. Dabei enthält die Tag-Message jeweils eine kurze Zusammenfassung der Änderungen. Beachte bei der Erstellung des Tags bitte unsere Dokumentation zur Versionierung. Wichtig Hier erst weiter machen wenn ein release tag gemäß der Versionierung Seite vorhanden ist.

Vorlage für die Tag-Message:

Release firmware version <VERSION>.

Changes:
 * Short list of bullet points with changes made in this version

Befehle zum taggen:

git tag -s VERSION #tag anlegen
git show VERSION #tag anzeigen
git push origin --tags #tag hochladen

Git message editor ändern:

git config --global core.editor "vim"

Firmware kompilieren

Siehe Firmware/Kompilieren.

Wichtig Firmwares + Manifest auf den Server hochladen und auch die modules für die opkg packages!

Firmware signieren

Es gab am 29.01.2017 den Vorschlag von Eike, den Wert good_signatures nicht wie bisher auf >50% aller Signaturen zu setzen, sondern hier einen konstanten Wert (5) zu setzen. Dieser Vorschlag wurde in der Diskussion um den sign-request für das Release 20171126 von Tarek wieder aufgegriffen, allerdings mit good_signatures=4 (siehe Dev-ML vom 09.12.2017). Es wurde mit der Mehrheit für diese Änderung gestimmt. Somit Ist nun ein konstanter Signatur wert von 4 gesetzt.

Hinweis zur Erstsignatur

Die erste Signatur in einer Manifest Datei stammt immer von der Person, die die Firmware kompiliert hat und wird von dieser noch vor dem Upload der Firmware hinzugefügt. Nachfolgende Signateure sind angehalten diese Signatur zu validieren.

Siehe dazu auch die Diskussion auf der Dev-Liste "0.5.6.2 die zweite" vom 17.06.2015.

Signatur durchführen

Vor einem Release wird die Firmware signiert, damit das Autoupdate prüfen kann, ob es sich um eine valide Firmware der Freifunkentwickler handelt. Es werden gültige Signaturen von mindestens X Entwicklern benötigt. Im folgenden wird der Signaturprozess beschrieben. Es wird ein Linux-System mit installierten ecdsautils benötigt.

Zuerst wird ein Arbeitsverzeichnis firmware erstellt und darin ein Vereichnis release_keys angelegt

mkdir firmware
cd firmware
mkdir release_keys

Im Verzeichnis release_keys legen wir unser Zertifikat und unseren Privaten Signatur-Key ab (ecdsa-privatekey und ecdsa-publickey). Anschließend legen wir die das Manifest stable.manifest in unseren Arbeitsordner firmware.

Dann laden wir das Manifest herunter, welches wir signieren möchten:

scp firmware.ffnw.de:/var/www/dev/firmware/<l2tp/fastd>/<VERSION>/sysupgrade/stable.manifest stable.manifest

Dann holen wir uns die zum Signieren notwendigen Scripte aus dem Gluon-Repo und signieren das manifest:

git clone https://github.com/freifunk-gluon/gluon.git
./gluon/contrib/sign.sh ./release_keys/ecdsa-privatekey ./stable.manifest

Nach erfolgreicher Signatur, müssen wir das Manifest wieder hochladen:

scp stable.manifest firmware.ffnw.de:~
ssh firmware.ffnw.de
sudo -s
mv stable.manifest /var/www/dev/firmware/<l2tp/fastd>/<VERSION>/sysupgrade/stable.manifest

Einen Versuch, das oben stehende so weit wie möglich zu automatisieren und somit den Signaturprozess und unkompliziert wie möglich zu machen stellt dieses shell-script dar

Sign-Request auf Dev-Mailingliste veröffentlichen

Auf der Dev-Mailingliste sollte eine Aufforderung an die Entwickler zur Signierung der Firmware veröffentlicht werden. Dieser sollte enthalten:

* Version der Firmware
* Versionsnummer der Gluon-Basis
* Commit ID der Gluon-Basis
* Einen Link auf den Download der Firmware
* Kurzbeschreibung der Änderungen
* Eine explizite Bitte die Änderungen zu prüfen und die Signatur durchzuführen 
* Einen Link auf die Dokumentation zur Durchführung der Signatur

Kopiervorlage:

Hi,

Ich habe heute eine neue Firmware gebaut. Basisdaten:
 * Firmware-Version:
 * Gluon-Version:
 * Commit ID:
 * Download:

Folgende Gluon spezifischen Änderungen gab es unter anderen:

* HIER PUNKTE [0]
* HIER PUNKTE

Die upstream Änderungen findet ihr hier:

https://github.com/freifunk-gluon/gluon/compare/<alte commit ID>...<neu commit ID>

Folgende Comunnity spezifischen Änderungen gab es im package repo:

 * HIER PUNKTE
 * HIER PUNKTE [1]

Die Änderungen an unseren eigenen Paketen können im Packages-Repository hier eingesehen werden:

https://git.nordwest.freifunk.net/ffnw-firmware/packages/compare/<alte Version>...<neue Version>

Folgende Comunnity spezifischen Änderungen gab es im siteconf repo:

 * HIER PUNKTE
 * HIER PUNKTE

Die Änderungen an der Siteconf können im Siteconf-Repo hier eingesehen werden:

https://git.nordwest.freifunk.net/ffnw-firmware/siteconf/compare/<alte Version>...<neue Version>

Ich bitte euch die Änderungen zu prüfen und die Firmware im Anschluss zu
signieren. Die Dokumentation zum Signaturprozess findet ihr im Wiki unter:
https://wiki.nordwest.freifunk.net/Firmware/Releaseprozess#Firmware_signieren

Ein Script zum vereinfachten signieren findet ihr hier:
https://git.ffnw.de/lrnzo/firmware-signing-made-easy

Viele Grüße

[0]
[1]

Release-Announcement auf Blog veröffentlichen

Auf dem Blog sollte ein Release-Announcement veröffentlicht werden. Dieses sollte folgende Informationen enthalten:

Symlink umbiegen

Sind genügen Signaturen vorhanden, muss der Symlink, der auf die aktuelle Firmware aus dem Stable-Channel zeigt auf die neue Version umgebogen werden:

cd /var/www/dev/firmware/
unlink stable
ln -s VERSION stable

Das symlinken des manifest ist nicht mehr nötig, da der Firmware-bot dies tut.

Allgemeines zu Signaturen

Signaturkeys erstellen

Dieser Prozess ist nur einmal beim Beitritt in das Dev-Team notwendig. Es wird Schreibzugriff auf das Siteconf Git Repository benötigt.

Privaten Key erstellen:

% ecdsakeygen -s > ecdsa-privatekey
% cat ecdsa-privatekey
68b12c0eaf88bf17fbcdf560780136b9cc4be352fb8aa7148215fbd65887db7b

Öffentlichen Key erstellen:

% ecdsakeygen -p < ecdsa-privatekey
1f63ef7450760af9062ff697995eb536eef25a555822087fa4cfd9a82d9faa79

Beide Keys speichern wir uns sicher ab, da diese Keys in Zukunft bei jedem Signaturprozess benötigt werden. Den öffentlichen Key tragen wir in der site.conf in den Abschnitt Autoupdater->Pubkeys ein.

Signatur manuell prüfen

Ob eine bestimmte Signatur in der Manifest Datei gültig ist, kann wie folgt geprüft werden:

* Signaturen aus manifest Datei entfernen (Die Signaturen am Ende der Datei inklusive der "---" müssen entfernt werden)
* ecdsaverify -s ZuPrüfendeSignatur -p PassenderPublicKey stable.manifest
* echo $?

Ist das Ergebnis 0 ist die Signatur korrekt, ist das Ergebnis 1 ist die Signatur falsch. Siehe https://github.com/tcatm/ecdsautils