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>
This commit is contained in:
parent
929641fa1f
commit
cc853810a4
3 changed files with 43 additions and 2 deletions
|
@ -30,7 +30,7 @@ endif
|
||||||
define Package/base-files
|
define Package/base-files
|
||||||
SECTION:=base
|
SECTION:=base
|
||||||
CATEGORY:=Base system
|
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
|
TITLE:=Base filesystem for Lede
|
||||||
URL:=http://openwrt.org/
|
URL:=http://openwrt.org/
|
||||||
VERSION:=$(PKG_RELEASE)-$(REVISION)
|
VERSION:=$(PKG_RELEASE)-$(REVISION)
|
||||||
|
|
40
package/base-files/files/lib/upgrade/fwtool.sh
Normal file
40
package/base-files/files/lib/upgrade/fwtool.sh
Normal file
|
@ -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
|
||||||
|
}
|
|
@ -128,7 +128,8 @@ add_overlayfiles() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# hooks
|
# 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 ] && \
|
[ $SAVE_OVERLAY = 0 -o ! -d /overlay/etc ] && \
|
||||||
sysupgrade_init_conffiles="add_uci_conffiles" || \
|
sysupgrade_init_conffiles="add_uci_conffiles" || \
|
||||||
sysupgrade_init_conffiles="add_overlayfiles"
|
sysupgrade_init_conffiles="add_overlayfiles"
|
||||||
|
|
Loading…
Reference in a new issue