Benutzer-Werkzeuge

Webseiten-Werkzeuge


freifunk:anleitungen:rollout

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
freifunk:anleitungen:rollout [2018-06-28 16:16]
tux [Firmware bauen]
freifunk:anleitungen:rollout [2018-07-24 21:31] (aktuell)
tux [Firmware hochladen]
Zeile 1: Zeile 1:
 +====== Firmware Rollout ======
  
 +Wie kommen kompilierte Firmware-Images auf Server und Geräte?
 +
 +===== Checkliste =====
 +  * Firmware als stable bauen
 +  * Manifest signieren lassen (Wahl der Schlüssel so, dass für alle aktiven Versionen gültige Signaturen vorhanden sind)
 +  * Firmware und signiertes Manifest ablegen (gw1, /​var/​www/​firmware/​stable/​0.xx)
 +  * Symlink latest auf entsprechende Firmware setzen
 +  * Info über Mailingliste
 +  * Blogeintrag schreiben
 +  * Ankündigung auf Twitter/ Facebook
 +  * Anpassung der Download-Seite (https://​md.freifunk.net/​mitmachen/​firmware/​),​ Links und Changelog
 +
 +===== Firmware bauen =====
 +
 +Wir nutzen [[https://​gluon.readthedocs.io/​|Gluon]] als Firmware für unsere Knoten. Das erfordert einige angepasste Dateien im Unterordner ''​site''​ des geklonten Gluon-Repositories,​ für Freifunk Magdeburg liegen diese [[https://​github.com/​FreifunkMD/​site-ffmd|bei GitHub]] derzeit. In der entsprechenden ''​README.md''​ ist eine Anleitung zum Bauen der Firmware für FFMD.
 +
 +  * [[https://​github.com/​FreifunkMD/​gluon-docker|Build mit Docker]]
 +
 +
 +Per default wird für //​experimental//​ gebaut. Für die anderen Branches muss das Argument //beta// oder //stable// angegeben werden:
 +
 +  site/​build.sh beta
 +
 +
 +===== Firmware signieren =====
 +
 +In der ''​site.conf''​ sind kryptografische Schlüssel der Entwickler hinterlegt. Für ein //​experimental//​ build ist die Signatur eines Entwicklers,​ für //beta// und //stable// jeweils zwei Signaturen nötig, damit [[http://​gluon.readthedocs.io/​en/​latest/​features/​autoupdater.html|Autoupdate]] auf den Knoten funktioniert.
 +
 +Gluon enthält ein Skript zum Signieren, Voraussetzung sind die //​ecdsautils//:​
 +
 +  contrib/​sign.sh $SECRETKEY output/​images/​sysupgrade/​experimental.manifest
 +
 +Wie die Entwickler die Manifest-Dateien zum Hinzufügen mehrerer Signaturen austauschen,​ bleibt ihnen überlassen. Eine Möglichkeit ist bspw.: der erste Entwickler lädt alle Images plus Manifest auf den Webserver. Weitere Entwickler laden sich das Manifest von dort, signieren, laden die neue Version wieder auf den Webserver.
 +
 +==== Schlüsselerzeugung mit ecdsautils ====
 +
 +Installation kann aus dem [[https://​packages.debian.org/​search?​keywords=ecdsautils|Debian-Paket]],​ dem Paket der gewünschten Distribution oder aus dem [[https://​github.com/​tcatm/​ecdsautils|Quellcode]] erfolgen.
 +
 +=== bis 0.3.2 ===
 +
 +<​code>​
 +% ecdsakeygen -h
 +ecdsautils 0.3.2
 +
 +Usage: ecdsakeygen [-s] [-p] [-h]
 +        -s      generate a new secret on stdout
 +        -p      output public key of secret read from stdin
 +        -h      display this short help and exit
 +</​code>​
 +
 +<​code>​
 +% ecdsakeygen -s > secret ​
 +% cat secret ​
 +68b12c0eaf88bf17fbcdf560780136b9cc4be352fb8aa7148215fbd65887db7b
 +</​code>​
 +
 +<​code>​
 +% ecdsakeygen -p < secret ​
 +1f63ef7450760af9062ff697995eb536eef25a555822087fa4cfd9a82d9faa79
 +</​code>​
 +
 +=== ab 0.4.0 ===
 +
 +<​code>​
 +% ecdsautil generate-key > secret
 +% cat secret
 +68b12c0eaf88bf17fbcdf560780136b9cc4be352fb8aa7148215fbd65887db7b
 +</​code>​
 +
 +<​code>​
 +% ecdsautil show-key < secret
 +1f63ef7450760af9062ff697995eb536eef25a555822087fa4cfd9a82d9faa79
 +</​code>​
 +
 +=== Schlüssel sicher speichern ===
 +
 +Der erzeugte Schlüssel ist ebenso sorgfältig abzulegen wie private Schlüssel von PGP oder SSH. Leserechte sollte nur der Nutzer haben:
 +
 +<​code>​
 +% chmod go-rwx secret
 +% ls -l secret ​
 +-rw------- 1 adahl adahl 65 Jan 31 15:07 secret
 +</​code>​
 +
 +===== Firmware hochladen =====
 +
 +Die Firmware-Images plus Manifest mit Signatur(en) wird vom Build-Rechner auf den Webserver kopiert, dazu kann bspw. //rsync// genutzt werden.
 +
 +  rsync -rlthcvz output/​images/​ gw1.md.freifunk.net:/​var/​www/​firmware/​stable/​0.37
 +
 +Anschließend auf dem Webserver kontrollieren,​ dass die Rechte korrekt gesetzt sind und ggf. symbolische Links anpassen.
 +
 +Der Webserver hat die Images in einer Ordnerstruktur liegen (nicht doppelt), liefert aber je nach VHOST ggf. unterschiedliche Seiten/​Pfade aus. Über http://​firmware.md.freifunk.net/​ bspw. Images zum Download durch Nutzer über das Internet und den Webbrowser und über http://​experimental.updates.firmware.ffmd/​ bspw. experimental Updates für die Knoten. Im Freifunk-Netz muss dementsprechend die Zone ''​.ffmd''​ korrekt auf den Webserver aufgelöst werden und der Webserver muss intern im Freifunk-Netz erreichbar sein (nicht (nur) aus dem Freifunk-Netz über das Internet).
 +
 +Symlinks:
 +  * LATEST im Firmware-Oberverzeichnis (z.B. stable/​LATEST)
 +  * manifest auf z.B. manifest.stable