From: Jeff Kletsky <[email protected]>

Targets that use nand_do_platform_check() can't use SUPPORTED_DEVICES
as the check requires ./sysupgrade-legacy_boardname/CONTROL to be
non-zero length as extracted from the tar file. Previously, only
./sysupgrade-new_boardname/CONTROL was present.

This prevents upgrade without --force from, for example, ar71xx to ath79

Add an optional alt-board= parameter to parsing of sysupgrade-tar that
creates a directory at the expected location for the alt-board name,
copying over the CONTROL file.

The contents of CONTROL are unmodified by this commit.

Careful ordering of the tar file is required as existing builds
expect the kernel and root assets to be in the first directory
returned by tar -tf that matches sysupgrade-*/

Run-tested-on: EA8300, GL-AR300M, GL-AR750S

Signed-off-by: Jeff Kletsky <[email protected]>
---
 include/image-commands.mk |  1 +
 scripts/sysupgrade-tar.sh | 40 +++++++++++++++++++++++++++++++++------
 2 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/include/image-commands.mk b/include/image-commands.mk
index 5dfd6a2c2f..011e30a7e3 100644
--- a/include/image-commands.mk
+++ b/include/image-commands.mk
@@ -321,6 +321,7 @@ endef
 define Build/sysupgrade-tar
        sh $(TOPDIR)/scripts/sysupgrade-tar.sh \
                --board $(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)) \
+               --alt-boards "$(call param_get,alt-board,$(1))" \
                --kernel $(call param_get_default,kernel,$(1),$(IMAGE_KERNEL)) \
                --rootfs $(call param_get_default,rootfs,$(1),$(IMAGE_ROOTFS)) \
                $@
diff --git a/scripts/sysupgrade-tar.sh b/scripts/sysupgrade-tar.sh
index b93b2584bb..5071a2f5f8 100755
--- a/scripts/sysupgrade-tar.sh
+++ b/scripts/sysupgrade-tar.sh
@@ -3,11 +3,17 @@
 . $TOPDIR/scripts/functions.sh
 
 board=""
+alt_boards=""
 kernel=""
 rootfs=""
 outfile=""
 err=""
 
+do_exit() {
+       [ -d "$tmpdir" ] && rm -rf "$tmpdir"
+       exit $err
+}
+
 while [ "$1" ]; do
        case "$1" in
        "--board")
@@ -16,6 +22,12 @@ while [ "$1" ]; do
                shift
                continue
                ;;
+       "--alt-boards")
+               alt_boards="$2"
+               shift
+               shift
+               continue
+               ;;
        "--kernel")
                kernel="$2"
                shift
@@ -39,7 +51,7 @@ while [ "$1" ]; do
 done
 
 if [ ! -n "$board" -o ! -r "$kernel" -a  ! -r "$rootfs" -o ! "$outfile" ]; then
-       echo "syntax: $0 [--board boardname] [--kernel kernelimage] [--rootfs 
rootfs] out"
+       echo "syntax: $0 [--board boardname] [--alt-boards 'alt board list'] 
[--kernel kernelimage] [--rootfs rootfs] out"
        exit 1
 fi
 
@@ -54,6 +66,7 @@ if [ -z "$tmpdir" ]; then
 fi
 
 mkdir -p "${tmpdir}/sysupgrade-${board}"
+
 echo "BOARD=${board}" > "${tmpdir}/sysupgrade-${board}/CONTROL"
 if [ -n "${rootfs}" ]; then
        case "$( get_fs_type ${rootfs} )" in
@@ -67,18 +80,33 @@ if [ -n "${rootfs}" ]; then
 fi
 [ -z "${kernel}" ] || cp "${kernel}" "${tmpdir}/sysupgrade-${board}/kernel"
 
-mtime=""
+# "Legacy" nand_upgrade_tar() finds asset directory with
+# $(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+# and doesn't use CONTROL at all; add the "real" files first
+
+tar_args="--directory ${tmpdir} --sort=name --owner=0 --group=0 
--numeric-owner \
+        -vf ${tmpdir}/sysupgrade.tar"
 if [ -n "$SOURCE_DATE_EPOCH" ]; then
-       mtime="--mtime=@${SOURCE_DATE_EPOCH}"
+       tar_args="${tar_args} --mtime=@${SOURCE_DATE_EPOCH}"
 fi
 
-(cd "$tmpdir"; tar --sort=name --owner=0 --group=0 --numeric-owner -cvf 
sysupgrade.tar sysupgrade-${board} ${mtime})
+tar -c $tar_args $(ls -A "${tmpdir}")
 err="$?"
+[ "$err" != 0 ] && do_exit
+
+for ab in $alt_boards ; do
+       [ "$ab" = "$board" ] && continue
+       mkdir "${tmpdir}/sysupgrade-${ab}/"
+       cp -vp "${tmpdir}/sysupgrade-${board}/CONTROL" 
"${tmpdir}/sysupgrade-${ab}/"
+       tar -r $tar_args "sysupgrade-${ab}/CONTROL"
+       err="$?"
+       [ "$err" != 0 ] && do_exit
+done
+
 if [ -e "$tmpdir/sysupgrade.tar" ]; then
        cp "$tmpdir/sysupgrade.tar" "$outfile"
 else
        err=2
 fi
-rm -rf "$tmpdir"
 
-exit $err
+do_exit
-- 
2.20.1


_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to