#!/bin/sh . /usr/share/shlib.sh version webif interface export DATE="$(version_get_releasedate '$LastChangedDate: 2008-04-27 12:28:55 +0200 (Sun, 27 Apr 2008) $')";SCRIPT=${0#/rom} export TITLE="Verwaltung: Firmware Update" . ${SCRIPT%/*}/cgi-bin-pre.sh cat<Verwaltung: Fern-Update EOF # read query string webif_parse_urlquery # Mirror for Firmwareupdate test -f /etc/freifunk-urls && . /etc/freifunk-urls mirror="${FW_REPO:-http://firmware.leipzig.freifunk.net/nightly}" versions="${FW_VERSIONS:-http://firmware.leipzig.freifunk.net/nightly/versions}" # Check availability available="$(ping -c 1 -q firmware.leipzig.freifunk.net 2>&- | grep 'packets received' | cut -d' ' -f4)" # Firmwareselect firmware_select() { if [ "$available" -gt 0 ]; then wget -q "$versions" -O /tmp/versions 2>/dev/null webif_parse_keyval /tmp/versions "version_" version_local=$(version_get_fullversion) fi cat<
EOF if [ -n "$version_stable" -o -n "$version_testing" -o -n "$version_unstable" ]; then echo " EOF else cat< EOF fi cat<
Die auf diesem Gerät installierte Version $version_local
" fw_updatecheck=$(version_compare "$version_local" "$version_stable") if [ "$fw_updatecheck" = 1 ]; then echo "ist veraltet. Die Version $version_stable ist verfügbar!" elif [ "$fw_updatecheck" = 0 ]; then echo "ist aktuell. Es ist kein Aktualisierung notwendig!" else echo "ist nicht die empfohlene stabile Version $version_stable.
\ Du weißt hoffentlich was du tust...!?" fi cat<
 
Zu installierende Version:
Updateserver ist im Moment leider nicht erreichbar.
Zeile leer lassen für Online-Update oder IP-Adresse von
Node mit aktueller Firmware in der Umgebung eintragen:
 
   
Achtung: Der Update-Vorgang ist nach spätestens 5 Minuten abgeschlossen.
Das Gerät startet mit der neuen Firmware normalerweise selbstständig.
Bei eventuellen Problemen bitte Ruhe bewahren und lieber noch ein paar Minuten warten.
Dann den eigenen Computer ggf. neustarten bzw. den Accesspoint. EOF } packages_select() { cat<
EOF updates=$(ls /tmp/updatecheck-* 2>/dev/null) if [ -z "$updates" ]; then echo "" elif [ -n "$(echo $updates | grep 'firmware')" ]; then echo "" else echo "" for update in $(ls /tmp/updatecheck-* 2>/dev/null); do test "${update#*-}" = "firmware" && continue release="$(cat $update 2>&- | head -1)" [ -n "$release" ] && set $release || continue echo "" plist="${plist:+$plist,}${update#*-}" done cat< EOF fi cat<
Es sind keine Paket-Updates verfügbar.Die installierte Firmware ist veraltet. Bitte erst die aktuelle Firmware installieren!Folgende Paket-Updates sind verfügbar:
${update#*-}installiert $(version_get_packageversion ${update#*-})
verfügbar $1
EOF } firmware_update() { cat< Das Update wird jetzt auf das Gerät heruntergeladen und installiert.
Anschließend folgt ein automatischer Neustart. Bitte warten...
EOF

	if [ -n "$firmip" ]; then
		# download from neighbour node
		echo "Lade http://$firmip/cgi-bin-download.bin?trx"
		wget "http://$firmip/cgi-bin-download.bin?trx" -O /tmp/firmware.trx 1>/dev/null

	else
		# download from official mirror
		echo "Lade $mirror/${firmversion:-stable}/current.trx"
	 	wget "$mirror/${firmversion:-stable}/current.trx" -O /tmp/firmware.trx 1>/dev/null
		echo ""
		
		# check for image size > 0 and successful wget exit code
		if [ -s /tmp/firmware.trx -a $? = 0 ]; then
			# get remote checksum
			src_sum=$(wget -q -O- "$mirror/${firmversion:-stable}/md5sums" | grep current.trx | cut -d' ' -f1)

			# check...
			if [ $? = 0 -a -n "$src_sum" ]; then
				# get local checksum
				dst_sum=$(md5sum /tmp/firmware.trx | cut -d' ' -f1)
	
				# check...
				if [ "$src_sum" = "$dst_sum" ]; then
					echo "Prüfsumme verifiziert ($src_sum)"

				else
					echo "Fehler beim Verifizieren der Prüfsummen (Server:$src_sum, Lokal:$dst_sum)! Breche ab."
					test -f /tmp/firmware.trx && rm /tmp/firmware.trx
				fi
			else
				echo "Fehler beim Download der Prüfsummen! Breche ab."
				test -f /tmp/firmware.trx && rm /tmp/firmware.trx
			fi
		else
			echo "Fehler beim Download des Firmware-Images! Breche ab."
			test -f /tmp/firmware.trx && rm /tmp/firmware.trx
		fi
	fi

	# check for image size > 0 and successful wget exit code
	if [ -s /tmp/firmware.trx -a $? = 0 ]; then
		if [ -x /usr/sbin/nvbackup -a "$(nvram get ff_nvbackup)" ]; then
			nvbackup -b "$(nvram get ff_nvbackup)"
			# JoW: this is now handled by ipvergabe.html, disable nvrestore on boot
			#nvram set ff_nvrestore_on_boot=1
			nvram commit 2>/dev/null
		fi
		echo '
' webif_progressbar 300 "$(interface_get_localip $REMOTE_ADDR)" echo -n "
Schreibe Firmware-Image ... "
		/usr/sbin/firmware-burn /tmp/firmware.trx
		echo "Das Gerät wird jetzt neu gestartet, bitte 5 Minuten warten ..."
	else
		echo "Fehler beim Download! Breche ab."
		test -f /tmp/firmware.trx && rm /tmp/firmware.trx
	fi
	echo '
' } package_update() { cat<
EOF

	ipkg update

	# check...
	if [ $? = 0 ]; then

		IFS=,
		for package in $plist; do
			echo -n "Installiere $package ... "
			ipkg install $package
		done

		rm -f /tmp/updatecheck-*
		cat<

Info: Je nach installierten Paket(en) kann ein Neustart erforderlich sein. EOF else echo "Fehler beim Download der Paketlisten! Breche ab." fi } # if post if [ "$post_firm" -o "$post_pack" ]; then # update if [ "$post_firm" ]; then firmware_update else package_update; fi # show select else # generate tabs export display="${display:-firm}" webif_gentabs 'firm=Firmware;pack=Pakete' # generate update-pages if [ "${display:-firm}" = firm ]; then firmware_select else packages_select; fi fi . ${SCRIPT%/*}/cgi-bin-post.sh