ipq806x: fix ZyXEL NBG6817 sysupgrade
[openwrt/openwrt.git] / target / linux / ipq806x / base-files / lib / upgrade / zyxel.sh
index 466d8c6..3efef8f 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
 }