gluon-autoupdater: Less global variables.

This also removes the need for the cleanup function. Instead the cleanup
code is moved in place.
This commit is contained in:
Daniel Ehlers 2014-01-20 00:50:37 +01:00
parent f0b63da868
commit cb6c025a7f

View File

@ -30,37 +30,24 @@ newer_than() {
test "$1" != "$old" 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
. /lib/gluon/functions/model.sh
my_model="$(get_model | tr '[A-Z]' '[a-z]' | sed -r 's/[^a-z0-9]+/-/g;s/-$//')"
if [ ! -f "$VERSION_FILE" ]; then
echo "Couldn't determine firmware version!" >&2
exit 1
fi
my_version="$(cat "$VERSION_FILE")"
fetch_manifest() { fetch_manifest() {
local MIRROR=$1 local MIRROR=$1
local manifest=$2
wget -O$manifest "$MIRROR"/manifest wget -O$manifest "$MIRROR"/manifest
if test $? -ne 0; then if test $? -ne 0; then
echo "Couldn't fetch manifest from $MIRROR" >&2 echo "Couldn't fetch manifest from $MIRROR" >&2
return 1 return 1
fi fi
return 0
} }
verify_and_analyse_manifest() { verify_manifest() {
local manifest=$1
local manifest_upper=$2
local manifest_lower=$(mktemp)
awk "BEGIN { sep=0 } awk "BEGIN { sep=0 }
/^---\$/ { sep=1; next } /^---\$/ { sep=1; next }
{ if(sep==0) print > \"$manifest_upper\"; { if(sep==0) print > \"$manifest_upper\";
@ -81,6 +68,8 @@ verify_and_analyse_manifest() {
pubkeys="$pubkeys -p $key" pubkeys="$pubkeys -p $key"
done done
rm -f $manifest_lower
ecdsaverify -n $GOOD_SIGNATURES $pubkeys $signatures $manifest_upper ecdsaverify -n $GOOD_SIGNATURES $pubkeys $signatures $manifest_upper
if test $? -ne 0; then if test $? -ne 0; then
@ -88,6 +77,12 @@ verify_and_analyse_manifest() {
return 1 return 1
fi fi
return 0
}
analyse_manifest() {
local manifest_upper=$1
grep -q "^BRANCH=${BRANCH}$" $manifest_upper grep -q "^BRANCH=${BRANCH}$" $manifest_upper
if test $? -ne 0; then if test $? -ne 0; then
@ -95,7 +90,8 @@ verify_and_analyse_manifest() {
return 1 return 1
fi fi
local my_firmware=$(grep "^${my_model} " $manifest_upper) local my_firmware
my_firmware=$(grep "^${my_model} " $manifest_upper)
if test $? -ne 0; then if test $? -ne 0; then
echo "No matching firmware found (model ${my_model})" >&2 echo "No matching firmware found (model ${my_model})" >&2
@ -111,36 +107,41 @@ verify_and_analyse_manifest() {
fetch_firmware() { fetch_firmware() {
local MIRROR=$1 local MIRROR=$1
local fw_image=$2
wget -O$fw_image "${MIRROR}/${fw_file}" wget -O$fw_image "${MIRROR}/${fw_file}"
if test $? -ne 0; then if test $? -ne 0; then
echo "Error downloading image from $MIRROR" >&2 echo "Error downloading image from $MIRROR" >&2
return 1 return 1
else
return 0
fi fi
return 0
} }
autoupdate() { autoupdate() {
local MIRROR=$1 local MIRROR=$1
fw_image=$(mktemp) local manifest=$(mktemp)
manifest=$(mktemp) fetch_manifest $MIRROR $manifest || { rm -f $manifest; return 1; }
manifest_upper=$(mktemp)
manifest_lower=$(mktemp)
fetch_manifest $MIRROR || return 1 local manifest_upper=$(mktemp)
verify_and_analyse_manifest || return 1 verify_manifest $manifest $manifest_upper || { rm -f $manifest $manifest_upper; return 1; }
rm -f $manifest
analyse_manifest $manifest_upper || { rm -f $manifest_upper; return 1; }
rm -f $manifest_upper
if newer_than "$fw_version" "$my_version"; then if newer_than "$fw_version" "$my_version"; then
echo "New version available" echo "New version available"
fetch_firmware $MIRROR || return 1 local fw_image=$(mktemp)
fetch_firmware $MIRROR $fw_image || { rm -f $fw_image; return 1; }
image_md5=$(md5sum "$fw_image"|cut -b-32) image_md5=$(md5sum "$fw_image"|cut -b-32)
if test "$image_md5" != "$fw_md5"; then if test "$image_md5" != "$fw_md5"; then
echo "Invalid image checksum" >&2 echo "Invalid image checksum" >&2
rm -f $fw_image
return 1 return 1
fi fi
echo "Upgrading firmware." echo "Upgrading firmware."
@ -153,5 +154,16 @@ autoupdate() {
return 0 return 0
} }
trap 'echo Signal ignored.' INT TERM PIPE
. /lib/gluon/functions/model.sh
my_model="$(get_model | tr '[A-Z]' '[a-z]' | sed -r 's/[^a-z0-9]+/-/g;s/-$//')"
if [ ! -f "$VERSION_FILE" ]; then
echo "Couldn't determine firmware version!" >&2
exit 1
fi
my_version="$(cat "$VERSION_FILE")"
autoupdate $BASE && exit 0 autoupdate $BASE && exit 0