#!/bin/sh export DATE="5.9.2005" export TITLE="Verwaltung: Firmware" . ${0%/*}/cgi-bin-pre.sh cat<<EOF

# Verwaltung: Firmware

EOF if [ "$REQUEST_METHOD" = "POST" ]; then read QUERY_STRING fi if [ "$REQUEST_METHOD" = "GET" ]; then eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}') if [ "$action" = "refresh_firmware_list" ]; then /usr/sbin/get_firmware_list.sh QUERY_STRING= elif [ "$action" = "refresh_ipkg_list" ]; then echo "

    "
    		ipkg update
    		echo "

" QUERY_STRING= fi fi if [ -z "$QUERY_STRING" ]; then cat<<EOF

## Aktualisierung des Opennet-Firmware-Paketes

mehr Informationen.
Da die "Opennet-Firmware" nun als Paket angeboten wird, brauchst Du nicht mehr ein komplettes Firmware-Update zu machen, um deinen AccessPoint auf den neuesten Stand zu bringen. Du findest hier die Liste der verfügbaren Firmware-Versionen, wenn Du eine auswählst, wird diese sofort installiert. Einmal erstellte OpenVPN-Keys gehen bei dieser Form der Aktualisierung nicht verloren.
Die Liste der vorhandenen Firmware-Pakete wird automatisch täglich gegen Mitternacht aktualisiert. Du kannst die Aktualisierung natürlich auch manuell vornehmen.
Möglicherweise ist für die Aktualisierung des Firmware-Paketes eine Aktualisierung aller für OpenWrt verfügbaren Pakete notwendig. Durch einen Klick auf den entsprechenden Link kannst du auch diese Aktualisierung durchführen
Ein downgrade der Firmware wird an dieser Stelle nicht unterstützt.
EOF if [ -e /tmp/firmware-packages ]; then cat<<EOF ACHTUNG: Bitte informiere Dich im Forum, ob es Probleme bei der Aktualisierung auf eine neue Firmware gibt. Nach einer Aktualisierung musst Du den AccessPoint neu starten, dabei werden alle Internet-Verbindungen unterbrochen.
gefundene Firmware-Pakete (Stand $(date -r /tmp/firmware-packages)):

EOF count=1 old= recent=$(ipkg list_installed opennet-firmware | awk 'BEGIN {FS="-|\\."} /opennet-firmware/ {str = sprintf("%03d%03d%03d%03d", $3, $4, $5, $6); print str }') for line in $(cat /tmp/firmware-packages); do if [ $count -gt 10 ]; then break; fi version=$(echo $line | cut -d':' -f1) paket=$(echo $line | cut -d':' -f2) if [ $version -le $recent ]; then if [ -z "$old" ]; then if [ "$count" != "1" ]; then echo "

"; fi echo "
alte Firmware-Pakete, nicht installierbar
" old="true" fi else if [ "$count" = "1" ]; then echo "
neue Firmware-Pakete, ein Klick auf den Namen installiert das Paket sofort. |
" fi fi echo "
$count. | " if [ -z "$old" ]; then echo "$paket" else echo "$paket" fi echo " | " #if [ -n "$(grep \"$paket.info\" /tmp/firmware-packages.html)" ]; then # echo "info" #fi echo "
" count=$(($count+1)) done cat<<EOF

aktualisiere Liste der Firmware-Pakete
aktualisiere allgemeine Paketliste (ipkg update)
EOF else cat<<EOF

Konnte keine Firmware-Liste vom Server holen. Du solltest Deinen AP mit dem Internet verbinden und die Liste der Firmware-Pakete aktualisieren.

EOF fi cat<<EOF

## Komplettes Firmware-Update

EOF if [ -e /www/cgi-bin/webif/upgrade.sh_bak ]; then echo "Hinweis: Das OpenWrt-Webfrontend zur Firmware-Aktualisierung ist deaktiviert, da sich geheime Schlüssel auf dem AccesPoint befinden.
" fi cat<<EOF anzeigen
EOF if [ -f /etc/openvpn/opennet_user/on_aps.key ]; then cat<<EOF

ACHTUNG: Firmware-update nicht möglich

Auf dem Rechner befindet sich noch ein geheimer Schlüssel. Diesen kannst du unter dem Punkt OpenVPN herunterladen. Speicher diesen, aber auch dein öffentliches Zertifikat, an einem sicheren Ort. Erst wenn der geheime Schlüssel von diesem Rechner gelöscht ist, kannst du die Firmware aktualisieren.
Das Löschen des geheimen Schlüssels auf diesem Accesspoint bestätigst du mit dem Heraufladen deines geheimen Schlüssels.

Geheimen Schlüssel (*.key) zur Bestätigung des Löschvorgangs auf den Accesspoint laden

EOF elif [ -f /etc/openvpn/opennet_ugw/on_ugws.key ]; then cat<<EOF

ACHTUNG: Firmware-update nicht möglich

Auf dem Rechner befindet sich noch ein geheimer Schlüssel vom User-Gateway-Tunnel. Diesen kannst du unter dem Punkt Inet Freigabe herunterladen. Speicher diesen, aber auch dein öffentliches User-Gateway-Tunnel-Zertifikat, an einem sicheren Ort. Erst wenn der geheime Schlüssel von diesem Rechner gelöscht ist, kannst du die Firmware aktualisieren.
Das Löschen des geheimen User-Gateway-Tunnel-Schlüssels auf diesem Accesspoint bestätigst du mit dem Heraufladen deines geheimen User-Gateway-Tunnel-Schlüssels.

Geheimen User-Gateway-Tunnel-Schlüssel (*.key) zur Bestätigung des Löschvorgangs auf den Accesspoint laden

EOF else # (re)aktiviere OpenWRT-Webfrontend zum Firmware-Update mv -f /www/cgi-bin/webif/upgrade.sh_bak /www/cgi-bin/webif/upgrade.sh 2>/dev/null cat<<EOF WARNUNG: Ein Firmware-update kann deinen Router zerstören.

Wichtig falls das Firmware-update fehlschlägt:

- ASUS: Unbedingt die Adresse des Routers im lokalen Netzwerk EOF echo $(nvram get lan_ipaddr) cat<<EOF aufschreiben. Wenn das firmware-update fehlschlägt, ist der Router vielleicht nur unter dieser Adresse (und nicht unter 192.168.1.1) erreichbar.
EOF if [ -z "$(nvram get boot_wait)" ] || [ $(nvram get boot_wait) != "on" ]; then echo "
- Option boot_wait ist nicht aktiviert. Aus Sicherheitsgründen ;) wird diese Option bei einem firmware-update automatisch gesetzt.
" fi cat<<EOF

Wenn Du auf Firmware laden drückst, wird nicht mehr nachgefragt!

Firmware-Datei (*.trx) oder Prüfsummen-Datei (*.md5):

Diese opennet-Version des Firmware-Updates kann nur mit Herstellerunabhängigen *.trx-Dateien umgehen. Andere kannst du an dieser Stelle nicht hochladen. Benutze für andere Firmware-Dateien das OpenWrt Webinterface.
Hinweis: Es ist sinnvoll, vorher eine passende Prüfsummen-Datei auf den AccessPoint zu laden. Wird der Name der heraufgeladenden Firmware in der Prüfsummendatei gefunden, wird der AccessPoint nur geflasht, wenn die Firmware-Datei fehlerfrei ist. Wird der Name nicht gefunden, wird die Datei nicht geprüft und einfach auf den AccessPoint geschrieben. Firmware-Dateien sollten darum nicht umbenannt werden. EOF if [ -f /tmp/firmware.md5 ]; then cat<<EOF

## Prüfsummen-Datei

EOF cat /tmp/firmware.md5 cat<<EOF

EOF fi fi cat<<EOF
EOF elif [ "$REQUEST_METHOD" = "GET" ]; then error= echo "HINWEIS: Den AccessPoint erst neu starten, wenn die Installation mit \"Successfully terminated.\" abgeschlossen ist. Dies kann durchaus eine Weile dauern, bitte Geduld haben." echo "

    "
    	cd /tmp
    	echo -n "lade Firmware-Paket vom server herunter "
    	wget -q http://www.opennet-initiative.de/firmware/packages/$install
    	if ! [ -f  /tmp/$install ]; then
    		error="Datei http://www.opennet-initiative.de/firmware/packages/$install konnte nicht heruntergeladen werden."
    	else
    		echo "[ok]"
    		echo -n "lade Paket-Prüfsumme vom server herunter "
    		wget -q http://www.opennet-initiative.de/firmware/packages/$install.md5
    		if ! [ -f  /tmp/$install.md5 ]; then
    			error="Datei http://www.opennet-initiative.de/firmware/packages/$install.md5 konnte nicht heruntergeladen werden."
    		else
    			echo "[ok]"
    			if [ "$(cat /tmp/$install.md5 | cut -d' ' -f1)" != "$(md5sum /tmp/$install | cut -d' ' -f1)" ]; then
    				error="Prüfsumme des Firmware-Paketes nicht in Ordnung."
    			else
    				echo "Prüfsumme des Firmware-Paketes in Ordnung."
    				ipkg -force-defaults install /tmp/$install
    			fi
    		fi
    	fi

    	echo "

" rm -f /tmp/$install.md5 rm -f /tmp/$install echo "

" if [ -n "$error" ]; then echo "$error Installation abgebrochen" else echo "Installation abgeschlossen, bitte starte den AP jetzt neu" rm -f /www/on.css fi echo "

" elif ! ffout=$(./freifunk-upload 2>&1); then cat<<EOF

$ffout

Der Ladevorgang wurde abgebrochen.

EOF elif [ -n "$ffout" ]; then end=$ffout while [ -n "$(echo $end | cut -s -d'.' -f2-)" ]; do end=$(echo $end | cut -s -d'.' -f2-); done; if [ "$end" = "md5" ]; then mv $ffout /tmp/firmware.md5 cat<<EOF

Prüfsummen-Datei gespeichert.

EOF else # prüfe Checksumme bad_checksum= firmware=$ffout while [ -n "$(echo $firmware | cut -s -d'/' -f2-)" ]; do firmware=$(echo $firmware | cut -s -d'/' -f2-); done; if [ -f /tmp/firmware.md5 ] && [ -n "$(grep $firmware /tmp/firmware.md5)" ]; then if [ "$(awk -v firmware="$firmware" '$2 ~ firmware {print $1; exit}' /tmp/firmware.md5)" != "$(md5sum $ffout | cut -d" " -f1)" ]; then bad_checksum="yes" else cat<<EOF

Prüfsumme der Firmware-Datei in Ordnung.

EOF fi fi MAGIC=$(dd if="$ffout" bs=4 count=1 2>/dev/null) if [ -z "$bad_checksum" ] && [ "HDR0" = "$MAGIC" ]; then cat<<EOF

Schreibe die Firmware-Datei $ffout in den Flash-Speicher. Bitte warten...

EOF echo -n "

    "
    		if [ $(nvram get boot_wait) != "on" ]; then
    			echo "setze boot_wait auf on"
    			nvram set boot_wait=on
    			nvram commit
    		fi
    		echo "Neue Firmware wird installiert. Hab etwas Geduld, das kann durchaus einige Minuten (etwa 5) dauern."
    		echo "Der Fortschrittsbalken ist nicht direkt mit dem Update-Vorgang gekoppelt - Fehler in der Darstellung "
    		echo "sind nicht mit Fehlern im Update-Vorgang gleichzusetzen, bitte einfach weiterwarten"
    		mtd -e linux -r write $ffout linux &>/dev/null
    		echo "

" else rm -f "$ffout" cat<<EOF

EOF if [ -z "$bad_checksum" ]; then echo "Datei hat falsches Format." else echo "Prüfsumme der heraufgeladenen Datei stimmt nicht." fi cat<<EOF

Bitte eine korrekte *.md5-Prüfsummen-Datei oder *.trx-Firmware-Datei heraufladen.

EOF fi fi else cat<<EOF

Keine Datei empfangen.

Der Vorgang wurde nicht ausgeführt.

EOF fi . ${0%/*}/cgi-bin-post.sh