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

gluon-autoupdater: Refactor code.

Move building blocks of the update into seperate functions.
parent 1b924d62
No related branches found
No related tags found
No related merge requests found
...@@ -49,82 +49,109 @@ fi ...@@ -49,82 +49,109 @@ fi
my_version="$(cat "$VERSION_FILE")" my_version="$(cat "$VERSION_FILE")"
fw_image=$(mktemp)
manifest=$(mktemp)
manifest_upper=$(mktemp)
manifest_lower=$(mktemp)
wget -O$manifest "$BASE"/manifest fetch_manifest() {
local MIRROR=$1
wget -O$manifest "$MIRROR"/manifest
if test $? -ne 0; then if test $? -ne 0; then
echo "Couldn't fetch manifest" >&2 echo "Couldn't fetch manifest from $MIRROR" >&2
exit 1 return 1
fi fi
}
awk "BEGIN { sep=0 } verify_and_analyse_manifest() {
awk "BEGIN { sep=0 }
/^---\$/ { sep=1; next } /^---\$/ { sep=1; next }
{ if(sep==0) print > \"$manifest_upper\"; { if(sep==0) print > \"$manifest_upper\";
else print > \"$manifest_lower\"}" \ else print > \"$manifest_lower\"}" \
$manifest $manifest
signatures="" local signatures=""
while read sig; do while read sig; do
echo "$sig" | grep -q "^[0-9a-f]\{128\}$" echo "$sig" | grep -q "^[0-9a-f]\{128\}$"
if test $? -ne 0; then
continue
fi
signatures="$signatures -s $sig"
done < $manifest_lower
local pubkeys=""
for key in $PUBKEYS; do
pubkeys="$pubkeys -p $key"
done
ecdsaverify -n $GOOD_SIGNATURES $pubkeys $signatures $manifest_upper
if test $? -ne 0; then if test $? -ne 0; then
continue echo "Not enough valid signatures!" >&2
return 1
fi fi
signatures="$signatures -s $sig"
done < $manifest_lower
pubkeys="" grep -q "^BRANCH=${BRANCH}$" $manifest_upper
for key in $PUBKEYS; do
pubkeys="$pubkeys -p $key"
done
ecdsaverify -n $GOOD_SIGNATURES $pubkeys $signatures $manifest_upper if test $? -ne 0; then
echo "Wrong branch. We are on ${BRANCH}" >&2
return 1
fi
if test $? -ne 0; then local my_firmware=$(grep "^${my_model} " $manifest_upper)
echo "Not enough valid signatures!" >&2
exit 1
fi
grep -q "^BRANCH=${BRANCH}$" $manifest_upper if test $? -ne 0; then
echo "No matching firmware found (model ${my_model})" >&2
return 1
fi
if test $? -ne 0; then fw_version=$(echo "${my_firmware}"|cut -d' ' -f2)
echo "Wrong branch. We are on ${BRANCH}" >&2 fw_md5=$(echo "${my_firmware}"|cut -d' ' -f3)
exit 1 fw_file=$(echo "${my_firmware}"|cut -d' ' -f4)
fi
my_firmware=$(grep "^${my_model} " $manifest_upper) return 0
}
if test $? -ne 0; then fetch_firmware() {
echo "No matching firmware found (model ${my_model})" >&2 local MIRROR=$1
exit 1
fi
fw_version=$(echo "${my_firmware}"|cut -d' ' -f2) wget -O$fw_image "${MIRROR}/${fw_file}"
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 if test $? -ne 0; then
echo "Error downloading image" >&2 echo "Error downloading image from $MIRROR" >&2
exit 1 return 1
else
return 0
fi fi
}
autoupdate() {
local MIRROR=$1
image_md5=$(md5sum "$fw_image"|cut -b-32) fw_image=$(mktemp)
if test "$image_md5" != "$fw_md5"; then manifest=$(mktemp)
echo "Invalid image checksum" >&2 manifest_upper=$(mktemp)
exit 1 manifest_lower=$(mktemp)
fetch_manifest $MIRROR || return 1
verify_and_analyse_manifest || return 1
if newer_than "$fw_version" "$my_version"; then
echo "New version available"
fetch_firmware $MIRROR || return 1
image_md5=$(md5sum "$fw_image"|cut -b-32)
if test "$image_md5" != "$fw_md5"; then
echo "Invalid image checksum" >&2
return 1
fi
echo "Upgrading firmware."
sysupgrade "${fw_image}"
else
echo "No new firmware available"
fi fi
echo "Upgrading firmware." return 0
}
sysupgrade "${fw_image}"
else
echo "No new firmware available"
fi
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