Freifunk Firmware Update OTA

Aus Freifunk Hannover

Diese Anleitung beschreibt die notwendigen Schritte, die Firmware eines Gerätes über WLAN ("over the Air") zu aktualisieren.

Die Aktualisierung der Firmware auf die hier beschriebene Weise erfolgt auf eigene Gefahr - ist aber meistens völlig unkompliziert und problemlos durchzuführen.

Inhaltsverzeichnis

Einleitung

Normalerweise wird ein Freifunk Router zum Aktualisieren der Firmware über das Webinterface im Read-Only Modus neu gestartet und danach ebenfalls über das Webinterface aktualisiert. Der Zugriff darauf ist sowohl über WLAN als auch über LAN erreichbar.

Leider wird aus Platzgründen im Read-Only Modus das WLAN Kernel Modul bei 8Mb Geräten nicht gestartet, um sicher zu gehen, dass das Firmwareupdate genug RAM für eine erfolgreiche Aktualisierung vorfindet.

Befindet sich ein 8Mb Geräte nun aber "ausser Reichweite", z.B. steht verpackt auf dem Dach etc., und der Zugriff über LAN ist nicht möglich, so hat man zunächst keine Möglichkeit eine neue Firmware auf zu spielen, da der Router im Read-Only Modus nicht übers WLAN erreichbar ist.

Trotzdem ist es möglich, mit einigen Vorbereitungen, eine Aktualisierung durchzuführen. Der Router wird dazu nicht im Read-Only Modus gestartet, da der Zugriff über WLAN gewahrt werden muss. Um die Schritte durchzuführen werden die folgenden Programme benötigt:

Sie auch SSH

Belegten Speicher freigeben

Zunächst muss genug Speicher freigegeben werden, damit sowohl die neue Firmware hochgeladen werden, als auch der Aktualisierungsprozess durchlaufen kann. Dazu muss man sich auf dem Router per ssh einloggen und Prozesse beenden und Kernelmodule entladen.

Ziel ist es, nachdem das Firmwareupdate hochgeladen wurde, noch mindestens 444Kb freien Speicher zu haben, da das Programm zum Schreiben des Updates in den Flashspeicher eine 444Kb große CHROOT-Umgebung lädt.

Nicht benötigte Prozesse beenden

Auf dem Router laufen einige Prozesse, die für das Aktualisieren der Firmware nicht zwingend notwendig und beendet werden können. Mit der Freifunk Firmware 1.4.4 und DNSMASQ sieht die Prozessliste ungefähr so aus:

root@SE505:~# ps ax
  PID  Uid     VmSize Stat Command
    1 root        324 S   init       
    2 root            SW  [keventd]
    3 root            RWN [ksoftirqd_CPU0]
    4 root            SW  [kswapd]
    5 root            SW  [bdflush]
    6 root            SW  [kupdated]
    8 root            SW  [mtdblockd]
   43 root            SWN [jffs2_gcd_mtd4]
  635 root        180 S   /usr/sbin/httpd -c /var/etc/httpd.conf -p 80 
  778 root        172 S   /usr/sbin/udhcpd 
  791 root        340 S   /usr/sbin/crond -L /dev/null 
  797 root        304 S   /usr/bin/dropbear 
 1055 root        320 S   init       
28661 root        416 S   olsrd -f /var/etc/olsrd.conf -d 0 
19407 root        552 S   /usr/bin/dropbear 
19408 root        420 S   -ash 
19413 root        324 R   ps ax 

Es werden zunächst alle Prozesse, bis auf dropbear (der ssh Prozess) und olsrd, beendet.

Der OLSRD darf nur dann beendet werden, wenn der "Weg" zu dem Router nicht über andere Router läuft, da sonst die Route zusammenbricht.

Nicht benötigte Kernelmodule beenden

Dies ist eine Liste der geladenen Kernelmodule in einer Freifunk Firmware ohne zusätzliche Software:

root@SE505:~# lsmod
Module                  Size  Used by
wlcompat               16560   0 (unused)
wl                    385184   0 (unused)
switch-adm              6196   0 (unused)
switch-core             4896   0 [switch-adm]
ff-diag                 4336   0 (unused)

Da für das Update über WLAN die LAN Anschlüsse des Routers nicht gebraucht werden, können die Module switch-adm, switch-core unf dd-diag entladen werden.

root@SE505:~# rmmod switch-adm
usw...

Es sollten nur noch die WLAN Module geladen sein:

root@SE505:~# lsmod
Module                  Size  Used by
wlcompat               16560   0 (unused)
wl                    385184   0 (unused)

Firmware kopieren

Die Firmware wird vom lokalen Computer mittels scp auf den Router nach /tmp kopiert. Dazu muss sich die Firmware bereits auf dem Computer befinden.

Unter Linux und Linux ähnlichen Umgebungen kann die Firmware mit folgendem Befehl auf den Router kopiert werden:

scp /pfad/zu/openwrt-freifunk-1.6.20-hannover-1.trx root@<ROUTER-IP>:/tmp

Unter Windows kann für das Kopieren z.B. WinSCP oder PSCP verwendet werden.

Aktualisierung starten

Bevor die Aktualisierung endgültig durchgeführt wird, sollte nocheinmal kontrolliert werden, ob wirklich noch mindestens 444Kb freier Speicher zur Verfügung stehen. Die Summe von "free" und "buffers" sollte also größer als 444Kb sein.

root@SE505:~# free
             total         used         free       shared      buffers
 Mem:         6316         6096          220            0          296


Reicht der freie Speicher nicht aus, so besteht die Möglichkeit noch einen weiteren laufenden Prozess, einen von beiden dropbear Prozessen, zu beenden. Allerdings ist dabei etwas "raten" angesagt: Es muss derjenige Prozess am leben gehalten werden, der für die aktuelle SSH Verbindung verantwortlich ist. Dies ist der Prozess mit der höheren Prozessnummer. Der Prozess mit der niedrigeren Prozessnummer kann also ebenfalls beendet werden.


Der Aktualisierungsprozess wird dann durch die Eingabe des folgenden Befehls eingeleitet:

root@SE505:~# firmware-burn /tmp/openwrt-freifunk-1.6.20-hannover-1.trx
ok

Hat alles funktioniert, sollte der Router nach einiger Zeit wieder erreichbar sein und mit der aktualisierten Firmware gestartet haben.