Technik/Router/unifi_autoinstall

Um Unifi Lite oder Mesh Geräte Automatisch Downzugraden und mit Freifunk Image zu versehen, wurde dieses Script erstellt.
Der PC und das Unifi Gerät müssen im gleichen Netzwerk sein. In meinem Fall den PC mit einer Festen ip 192.168.1.10 (alles außer 192.168.1.20) versehen, am besten mit einem Switch oder Hub verbinden.

Das Programm “dnsmasq” installieren, TFTP aktivieren und die zu bearbeitenden Dateien in den TPTP Ordner ablegen.

Für das Flashen ist das Kommando ‘mtd’ notwendig, dass in aktuellen unifi Firmware fehlt.
Daher muss (in der Regel) die Original Firmware durch eine ältere Variante ersetzt werden.

In meinem Fall:

Die Datei zum UP/Downgrade der Stock Firmware: BZ.qca956x.v3.7.58.6385.170508.0957.bin

und die aktuellen Freifunk Images (hier ein Beispiel für ein AC Lite für die Domain 5 des FF Do) gluon-ffdo-d05-2.2.6-ubiquiti-unifi-ac-lite-sysupgrade.bin

Das Skript wird aktiviert mit den Parametern: expect ubnt-upgrade.exp [ip] [fwupdate] [firmware]

In meinem Fall:

expect ubnt-upgrade.exp 192.168.1.20 BZ.qca956x.v3.7.58.6385.170508.0957.bin gluon-ffdo-d05-2.2.6-ubiquiti-unifi-ac-lite-sysupgrade.bin 

Führe die Datei “ubnt-upgrade.exp” aus. der Unifi AC hört auf IP Adresse “192.168.1.20” Mache eine Stock Firmware UP/Downgrade auf “BZ.qca956x.v3.7.58.6385.170508.0957.bin” danach installiere folgende Freifunk Firmware: “gluon-ffdo-d05-2.2.6-ubiquiti-unifi-ac-lite-sysupgrade.bin”.

Nach erfolgreicher Installation startet der AP neu und ist unter der IP Adresse 192.168.1.1 erreichbar.

Die Anleitung wird noch verfeinert, bis dahin alles gute Marcel

Das Script in “ubnt-upgrade.exp” abspeichern:

#!/usr/bin/expect -f
#

set force_conservative 1  ;# set to 1 to force conservative mode even if
			  ;# script wasn't run conservatively originally
if {$force_conservative} {
	set send_slow {1 .1}
	proc send {ignore arg} {
		sleep .1
		exp_send -s -- $arg
   	}
}

set ip [lindex $argv 0]
set fwupdate [lindex $argv 1]
set firmware [lindex $argv 2]

set timeout -1
spawn $env(SHELL)
match_max 100000
expect "\$ "
send -- "ping $ip\r"
expect "64 Bytes von $ip: icmp_seq"
send -- ""
expect "\$ "
send -- "scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $fwupdate ubnt@$ip:/tmp/fwupdate.bin\r"
expect "password: "
send -- "ubnt\r"
expect "\$ "
send -- "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubnt@$ip\r"
expect "password: "
send -- "ubnt\r"
expect "# "
send -- "syswrapper.sh upgrade2 &\r"
expect "\$ "
sleep 3
send -- "ping $ip\r"
expect "64 Bytes von $ip: icmp_seq"
send -- ""
expect "\$ "
send -- "scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $firmware ubnt@$ip:/tmp/firmware.bin\r"
expect "password: "
send -- "ubnt\r"
expect "\$ "
send -- "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubnt@$ip\r"
expect "password: "
send -- "ubnt\r"
expect "# "
send -- "cd /tmp/\r"
expect "# "
send -- "MTD=\$(cat /proc/mtd | grep bs | awk '{FS=\":\";print \$1}')\r"
expect "# "
send -- "mtd write /tmp/firmware.bin kernel0\r"
expect "# "
send -- "mtd write /tmp/firmware.bin kernel1\r"
expect "# "
send -- "dd if=/dev/zero bs=1 count=1 of=/dev/\$MTD\r"
expect "# "
send -- "reboot\r"
sleep 3
send -- "ping 192.168.1.1\r"
expect "64 Bytes von 192.168.1.1: icmp_seq"
send -- ""
expect "\$ "
send -- "spd-say Finish sag mal was was länger dauert\r"


############
send -- "exit\r"
expect eof