octeon: determine sysupgrade-* directory for upgrade automatically
authorDonald Hoskins <grommish@gmail.com>
Sat, 15 Aug 2020 11:50:43 +0000 (13:50 +0200)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Sun, 16 Aug 2020 00:14:34 +0000 (02:14 +0200)
So far, the sysupgrade-* folder used during upgrade in octeon was
hardcoded to contain the board name. Therefore, changing board name
or BOARD_NAME variable in image/Makefile might have broken upgrade.

Improve this by adding a step to determine the folder name via
a wildcard, as it is done for generic nand_upgrade_tar() in
lib/upgrade/nand.sh.

While this still does not remove the problem for existing devices
(which still have the old script), it will entirely remove the
issue on newly added devices on this platform.

Signed-off-by: Donald Hoskins <grommish@gmail.com>
[split into separate patch, add commit message, add return values]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
target/linux/octeon/base-files/lib/upgrade/platform.sh

index 2de0f7a47ef925a88164e438af6988c7937d547a..c137609d7fca372210af9ba1c3e4d30895f68650 100755 (executable)
@@ -37,6 +37,10 @@ platform_do_flash() {
        local kernel=$3
        local rootfs=$4
 
+       local board_dir=$(tar tf "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
+       board_dir=${board_dir%/}
+       [ -n "$board_dir" ] || return 1
+
        mkdir -p /boot
        mount -t vfat /dev/$kernel /boot
 
@@ -46,10 +50,10 @@ platform_do_flash() {
        }
 
        echo "flashing kernel to /dev/$kernel"
-       tar xf $tar_file sysupgrade-$board/kernel -O > /boot/vmlinux.64
+       tar xf $tar_file $board_dir/kernel -O > /boot/vmlinux.64
        md5sum /boot/vmlinux.64 | cut -f1 -d " " > /boot/vmlinux.64.md5
        echo "flashing rootfs to ${rootfs}"
-       tar xf $tar_file sysupgrade-$board/root -O | dd of="${rootfs}" bs=4096
+       tar xf $tar_file $board_dir/root -O | dd of="${rootfs}" bs=4096
        sync
        umount /boot
 }
@@ -80,13 +84,17 @@ platform_do_upgrade() {
 
 platform_check_image() {
        local board=$(board_name)
+       local tar_file="$1"
+
+       local board_dir=$(tar tf "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
+       board_dir=${board_dir%/}
+       [ -n "$board_dir" ] || return 1
 
        case "$board" in
        er | \
        erlite)
-               local tar_file="$1"
-               local kernel_length=$(tar xf $tar_file sysupgrade-$board/kernel -O | wc -c 2> /dev/null)
-               local rootfs_length=$(tar xf $tar_file sysupgrade-$board/root -O | wc -c 2> /dev/null)
+               local kernel_length=$(tar xf $tar_file $board_dir/kernel -O | wc -c 2> /dev/null)
+               local rootfs_length=$(tar xf $tar_file $board_dir/root -O | wc -c 2> /dev/null)
                [ "$kernel_length" = 0 -o "$rootfs_length" = 0 ] && {
                        echo "The upgrade image is corrupt."
                        return 1