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.

