[openwrt/openwrt] octeon: determine sysupgrade-* directory for upgrade automatically

LEDE Commits lede-commits at lists.infradead.org
Sat Aug 15 20:19:00 EDT 2020


adrian pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/591767fc0152ffd02954e359e33f575271b9089e

commit 591767fc0152ffd02954e359e33f575271b9089e
Author: Donald Hoskins <grommish at gmail.com>
AuthorDate: Sat Aug 15 13:50:43 2020 +0200

    octeon: determine sysupgrade-* directory for upgrade automatically
    
    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 at gmail.com>
    [split into separate patch, add commit message, add return values]
    Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
 target/linux/octeon/base-files/lib/upgrade/platform.sh | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/target/linux/octeon/base-files/lib/upgrade/platform.sh b/target/linux/octeon/base-files/lib/upgrade/platform.sh
index 2de0f7a47e..c137609d7f 100755
--- a/target/linux/octeon/base-files/lib/upgrade/platform.sh
+++ b/target/linux/octeon/base-files/lib/upgrade/platform.sh
@@ -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



More information about the lede-commits mailing list