Skip to content
Snippets Groups Projects
Commit cb6c025a authored by Daniel Ehlers's avatar Daniel Ehlers
Browse files

gluon-autoupdater: Less global variables.

This also removes the need for the cleanup function. Instead the cleanup
code is moved in place.
parent f0b63da8
No related branches found
No related tags found
No related merge requests found
...@@ -30,37 +30,24 @@ newer_than() { ...@@ -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() { ...@@ -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() { ...@@ -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() { ...@@ -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() { ...@@ -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() { ...@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment