gluon/package/gluon-autoupdater/files/usr/sbin/autoupdater
Nils Schneider 61171c8c25 gluon-autoupdater: remove dead code
Recently the autoupdater contained a case statement to distinguish
between TP-Link WDR3600 and TP-Link WDR4300. This was left over from
previous development versions of autoupdater that relied on the board
name instead of the model. It is thus no longer needed and be removed
safely.
2014-01-12 21:18:27 +01:00

132 lines
2.7 KiB
Bash
Executable File

#!/bin/sh
if test $(uci get autoupdater.settings.enabled) != 1; then
echo "autoupdater is disabled"
exit 0
fi
BRANCH=$(uci get autoupdater.settings.branch)
PROBABILITY=$(uci get autoupdater.${BRANCH}.probability)
if test "a$1" != "a-f"; then
echo | awk "END{srand();exit rand() > $PROBABILITY}"
if test $? -ne 0; then
echo "No autoupdate this time. Use -f to override"
exit 0
fi
fi
BASE=$(uci get autoupdater.${BRANCH}.url)
PUBKEYS=$(uci get autoupdater.${BRANCH}.pubkey)
GOOD_SIGNATURES=$(uci get autoupdater.${BRANCH}.good_signatures)
VERSION_FILE=/lib/gluon/release
newer_than() {
local old="$(printf '%s\n%s\n' "$1" "$2" | sort -n | head -n 1)"
test "$1" != "$old"
}
cleanup() {
rm -f $manifest
rm -f $fw_image
rm -f $manifest_upper
rm -f $manifest_lower
}
trap cleanup INT TERM EXIT PIPE
my_model="$(cat /tmp/sysinfo/model | sed 's/ /-/g' | tr '[A-Z]' '[a-z]')"
if [ ! -f "$VERSION_FILE" ]; then
echo "Couldn't determine firmware version!" >&2
exit 1
fi
my_version="$(cat "$VERSION_FILE")"
fw_image=$(mktemp)
manifest=$(mktemp)
manifest_upper=$(mktemp)
manifest_lower=$(mktemp)
wget -O$manifest "$BASE"/manifest
if test $? -ne 0; then
echo "Couldn't fetch manifest" >&2
exit 1
fi
seperator_line=$(cat $manifest|grep -n "^---$"|cut -d: -f1|head -n1)
if test -z "$seperator_line"; then
echo "Couldn't find --- marker!" >&2
exit 1
fi
head -n$(($seperator_line-1)) $manifest > $manifest_upper
tail -n+$(($seperator_line+1)) $manifest > $manifest_lower
signatures=""
while read sig; do
echo "$sig" | grep -q "^[0-9a-f]\{128\}$"
if test $? -ne 0; then
continue
fi
signatures="$signatures -s $sig"
done < $manifest_lower
pubkeys=""
for key in $PUBKEYS; do
pubkeys="$pubkeys -p $key"
done
ecdsaverify -n $GOOD_SIGNATURES $pubkeys $signatures $manifest_upper
if test $? -ne 0; then
echo "Not enough valid signatures!" >&2
exit 1
fi
grep -q "^BRANCH=${BRANCH}$" $manifest_upper
if test $? -ne 0; then
echo "Wrong branch. We'are on ${BRANCH}" >&2
exit 1
fi
my_firmware=$(grep "^${my_model} " $manifest_upper)
if test $? -ne 0; then
echo "No matching firmware found (model ${my_model})" >&2
exit 1
fi
fw_version=$(echo "${my_firmware}"|cut -d' ' -f2)
fw_md5=$(echo "${my_firmware}"|cut -d' ' -f3)
fw_file=$(echo "${my_firmware}"|cut -d' ' -f4)
if newer_than "$fw_version" "$my_version"; then
echo "New version available"
wget -O$fw_image "${BASE}/${fw_file}"
if test $? -ne 0; then
echo "Error downloading image" >&2
exit 1
fi
image_md5=$(md5sum "$fw_image"|cut -b-32)
if test "$image_md5" != "$fw_md5"; then
echo "Invalid image checksum" >&2
exit 1
fi
echo "Upgrading firmware."
sysupgrade "${fw_image}"
else
echo "No new firmware available"
fi
exit 0