diff options
author | Felix Fietkau <nbd@nbd.name> | 2016-11-14 17:30:51 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2016-11-19 11:24:09 +0100 |
commit | cc853810a4aae04f1afcad3439bf9db6fc1f4852 (patch) | |
tree | d653a4bcd195f6571df8d0d70e893df0978fc6ca | |
parent | 929641fa1fb23942581f64e6fa75ba87ba6111af (diff) | |
download | upstream-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>
-rw-r--r-- | package/base-files/Makefile | 2 | ||||
-rw-r--r-- | package/base-files/files/lib/upgrade/fwtool.sh | 40 | ||||
-rwxr-xr-x | package/base-files/files/sbin/sysupgrade | 3 |
3 files changed, 43 insertions, 2 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile index ef62db29bd..637d88b5ad 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -30,7 +30,7 @@ endif define Package/base-files SECTION:=base CATEGORY:=Base system - DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +fstools + DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +fstools +fwtool TITLE:=Base filesystem for Lede URL:=http://openwrt.org/ VERSION:=$(PKG_RELEASE)-$(REVISION) 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 +} diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index 2f441f868b..c095ca81c5 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -128,7 +128,8 @@ add_overlayfiles() { } # hooks -sysupgrade_image_check="platform_check_image" +sysupgrade_image_check="fwtool_check_image platform_check_image" +sysupgrade_pre_upgrade="fwtool_pre_upgrade" [ $SAVE_OVERLAY = 0 -o ! -d /overlay/etc ] && \ sysupgrade_init_conffiles="add_uci_conffiles" || \ sysupgrade_init_conffiles="add_overlayfiles" |