aboutsummaryrefslogtreecommitdiffstats
path: root/package/base-files/files/lib
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2016-11-14 17:30:51 +0100
committerFelix Fietkau <nbd@nbd.name>2016-11-19 11:24:09 +0100
commitcc853810a4aae04f1afcad3439bf9db6fc1f4852 (patch)
treed653a4bcd195f6571df8d0d70e893df0978fc6ca /package/base-files/files/lib
parent929641fa1fb23942581f64e6fa75ba87ba6111af (diff)
downloadupstream-cc853810a4aae04f1afcad3439bf9db6fc1f4852.tar.gz
upstream-cc853810a4aae04f1afcad3439bf9db6fc1f4852.tar.bz2
upstream-cc853810a4aae04f1afcad3439bf9db6fc1f4852.zip
base-files: validate metadata of sysupgrade images
Use fwtool to extract it, only require metadata to be present if the platform sysupgrade script sets REQUIRE_IMAGE_METADATA=1 Image metadata is in JSON format and contains a list of supported devices, along with version information that could be displayed by a UI later before the actual upgrade happens. Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/base-files/files/lib')
-rw-r--r--package/base-files/files/lib/upgrade/fwtool.sh40
1 files changed, 40 insertions, 0 deletions
diff --git a/package/base-files/files/lib/upgrade/fwtool.sh b/package/base-files/files/lib/upgrade/fwtool.sh
new file mode 100644
index 0000000000..984c173097
--- /dev/null
+++ b/package/base-files/files/lib/upgrade/fwtool.sh
@@ -0,0 +1,40 @@
+fwtool_pre_upgrade() {
+ fwtool -q -i /dev/null "$1"
+}
+
+fwtool_check_image() {
+ [ $# -gt 1 ] && return 1
+
+ . /usr/share/libubox/jshn.sh
+
+ if ! fwtool -q -i /tmp/sysupgrade.meta "$1"; then
+ echo "Image metadata not found"
+ [ "$REQUIRE_IMAGE_METADATA" = 1 ] && return 1
+ return 0
+ fi
+
+ json_load "$(cat /tmp/sysupgrade.meta)" || {
+ echo "Invalid image metadata"
+ return 1
+ }
+
+ device="$(cat /tmp/sysinfo/board_name)"
+
+ json_select supported_devices || return 1
+
+ json_get_keys dev_keys
+ for k in $dev_keys; do
+ json_get_var dev "$k"
+ [ "$dev" = "$device" ] && return 0
+ done
+
+ echo "Device $device not supported by this image"
+ echo -n "Supported devices:"
+ for k in $dev_keys; do
+ json_get_var dev "$k"
+ echo -n " $dev"
+ done
+ echo
+
+ return 1
+}