Browse Source

merge extensions by Julian Kornberger

see https://github.com/digineo/gluon-autoflasher
* more models (WDR3500/3600/4600)
* support for uploading authorized_keys (untested)
* inline configuration extracted into separate file
Helge Jung 9 years ago
parent
commit
0f86bf62ad
4 changed files with 56 additions and 15 deletions
  1. 1 0
      .gitignore
  2. 4 0
      Readme.md
  3. 45 15
      autoflash.sh
  4. 6 0
      config

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 images/**
 !images/.gitkeep
+authorized_keys

+ 4 - 0
Readme.md

@@ -4,6 +4,10 @@ Diese Skripte sind für **Freifunk Paderborn** angepasst. Die benötigte Firmwar
 
 ## Benutzung
 
+Konfiguration:
+
+* **config** enthält die Adresse zum Download der Images, sowie die zu installierende Version.
+
 Es gibt zwei Skripte:
 
 * **autoflash.sh** versucht einen original TP-Link Router zu erkennen. Sobald dieser identifiziert werden konnte wird die neue Firmware automatisch installiert und nach Abschluss das Skript beendet.

+ 45 - 15
autoflash.sh

@@ -1,6 +1,6 @@
 #!/bin/bash
 
-base_fw_name="gluon-ffpb-0.5.1-"
+source ./config
 
 function quit() {
 	if [ x"${BASH_SOURCE[0]}" == x"$0" ]; then
@@ -10,17 +10,27 @@ function quit() {
 	fi
 }
 
+function curl_admin() {
+	curl -fsS --basic -u admin:admin $@
+}
+
 # download missing firmware images
-for model in tp-link-tl-wr841n-nd-v8 tp-link-tl-wr841n-nd-v9; do
-	if [ ! -r "images/${base_fw_name}${model}.bin" ]; then
+models="tp-link-tl-wr841n-nd-v8 tp-link-tl-wr841n-nd-v9"
+models="${models} tp-link-tl-wdr3500-v1"
+models="${models} tp-link-tl-wdr3600-v1"
+models="${models} tp-link-tl-wdr4300-v1"
+for model in models; do
+	filename="${base_fw_name}-${model}.bin"
+	imagefile="images/${filename}"
+	if [ ! -r $imagefile ]; then
 		echo -en "Downloading image for '$model' ... "
-		wget -q "http://firmware.paderborn.freifunk.net/stable/${base_fw_name}${model}.bin" -O "images/${base_fw_name}${model}.bin"
+		wget -q "${base_fw_url}${filename}" -O "$imagefile"
 		if [ $? -eq 0 ]; then
 			echo "OK"
 		else
 			echo "ERROR"
-			rm "images/${base_fw_name}${model}.bin" 2>/dev/null
-			echo "Failed to download firmware. Please ensure the firmware for '${base_fw_name}${model}' is present in images/ directory."
+			rm -f "$imagefile"
+			echo "Failed to download firmware. Please ensure the firmware for '${base_fw_name}-${model}' is present in images/ directory."
 			quit 3
 		fi
 	fi
@@ -32,19 +42,28 @@ if [ $? -ne 0 ]; then
 	quit 1
 fi
 
-model=$(curl --basic -su admin:admin http://192.168.0.1/ | grep -oE "WR[0-9]+N")
+mac=$(arp -i eth0 -a 192.168.0.1 |grep -oE " [0-9a-f:]+ " |tr -d ' ')
+echo "mac address: $mac"
+
+model=$(curl_admin http://192.168.0.1/ | grep -oE "WD?R[0-9]+N?")
 echo "found model: $model"
 
 hwver_page="http://192.168.0.1/userRpm/SoftwareUpgradeRpm.htm"
-hwver=$(curl --basic -su admin:admin -e http://192.168.0.1/userRpm/MenuRpm.htm $hwver_page | grep -oE "$model v[0-9]+")
-echo "hw version: $hwver"
+hwver=$(curl_admin -e http://192.168.0.1/userRpm/MenuRpm.htm $hwver_page | grep -oE "$model v[0-9]+")
+echo "hw version:  $hwver"
 
 uploadurl="http://192.168.0.1/incoming/Firmware.htm"
 image=""
 if [ "$hwver" = "WR841N v9" ]; then
-	image="${base_fw_name}tp-link-tl-wr841n-nd-v9.bin"
+	image="${base_fw_name}-tp-link-tl-wr841n-nd-v9.bin"
 elif [ "$hwver" = "WR841N v8" ]; then
-	image="${base_fw_name}tp-link-tl-wr841n-nd-v8.bin"
+	image="${base_fw_name}-tp-link-tl-wr841n-nd-v8.bin"
+elif [ "$hwver" = "WDR3500 v1" ]; then
+	image="${base_fw_name}-tp-link-tl-wdr3500-v1.bin"
+elif [ "$hwver" = "WDR3600 v1" ]; then
+	image="${base_fw_name}-tp-link-tl-wdr3600-v1.bin"
+elif [ "$hwver" = "WDR4300 v1" ]; then
+	image="${base_fw_name}-tp-link-tl-wdr4300-v1.bin"
 else
 	echo "UNKNOWN MODEL ($hwver), SORRY :("
 	quit 2
@@ -54,16 +73,27 @@ fi
 image="images/$image"
 
 echo -en "flashing image: $image ... "
-curl --basic -su admin:admin -e $hwver_page -F Filename=@$image $uploadurl > /dev/null
-curl --basic -su admin:admin -e $uploadurl http://192.168.0.1/userRpm/FirmwareUpdateTemp.htm > /dev/null
+curl_admin -e $hwver_page -F Filename=@$image $uploadurl > /dev/null
+curl_admin -e $uploadurl http://192.168.0.1/userRpm/FirmwareUpdateTemp.htm > /dev/null
 echo "done :)"
 
 echo -en "waiting for router to come up again "
-
 while ! ping -n -c 1 -W 2 192.168.1.1 > /dev/null; do
 	echo -en "."
 	sleep 1
 done
-
 echo " \o/"
+
+# upload authorized keys if present
+if [ -e authorized_keys ]; then
+	echo -en "uploading authorized_keys ... "
+	keys=`cat authorized_keys`
+	curl -fsS -F cbi.submit=1 -F "cbid.system._keys._data=$keys" http://192.168.1.1/cgi-bin/luci/admin/index > /dev/null
+	if [ $? -eq 0 ]; then
+		echo "OK"
+	else
+		quit 4
+	fi
+fi
+
 echo

+ 6 - 0
config

@@ -0,0 +1,6 @@
+
+# URL of the firmware files
+base_fw_url=http://firmware.paderborn.freifunk.net/stable/
+
+# the current firmware version
+base_fw_name="gluon-ffpb-0.5.1"