ipq806x: fix ZyXEL NBG6817 sysupgrade
authorMathias Kresin <dev@kresin.me>
Wed, 17 Jan 2018 19:40:55 +0000 (20:40 +0100)
committerMathias Kresin <dev@kresin.me>
Thu, 18 Jan 2018 06:22:37 +0000 (07:22 +0100)
Use the first found directory in the tar archive instead of relying on
a directory named according to the userspace boardname.

It allows to change the boardname without adding another compatibility
layer to the zyxel sysupgrade.

Fixes: 33f09cf15178 ("ipq806x: convert to dt-based board-detection")
Signed-off-by: Mathias Kresin <dev@kresin.me>
target/linux/ipq806x/base-files/lib/upgrade/zyxel.sh

index 466d8c616c7e35616dad476d0981c7577a9bc5cf..3efef8f0ba58e11bdde674f243b402e5ed1baae3 100644 (file)
@@ -19,9 +19,8 @@ zyxel_get_rootfs() {
 
 zyxel_do_flash() {
        local tar_file=$1
-       local board=$2
-       local kernel=$3
-       local rootfs=$4
+       local kernel=$2
+       local rootfs=$3
 
        # keep sure its unbound
        losetup --detach-all || {
@@ -29,14 +28,18 @@ zyxel_do_flash() {
                reboot -f
        }
 
+       # use the first found directory in the tar archive
+       local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+       board_dir=${board_dir%/}
+
        echo "flashing kernel to /dev/${kernel}"
-       tar xf $tar_file sysupgrade-$board/kernel -O >/dev/$kernel
+       tar xf $tar_file ${board_dir}/kernel -O >/dev/$kernel
 
        echo "flashing rootfs to ${rootfs}"
-       tar xf $tar_file sysupgrade-$board/root -O >"${rootfs}"
+       tar xf $tar_file ${board_dir}/root -O >"${rootfs}"
 
        # a padded rootfs is needed for overlay fs creation
-       local offset=$(tar xf $tar_file sysupgrade-$board/root -O | wc -c)
+       local offset=$(tar xf $tar_file ${board_dir}/root -O | wc -c)
        [ $offset -lt 65536 ] && {
                echo Wrong size for rootfs: $offset
                sleep 10
@@ -92,7 +95,7 @@ zyxel_do_upgrade() {
                ;;
        esac
 
-       zyxel_do_flash $tar_file $board $kernel $rootfs
+       zyxel_do_flash $tar_file $kernel $rootfs
 
        return 0
 }