base-files: more robust sysupgrade on NAND
authorDaniel Golle <daniel@makrotopia.org>
Wed, 13 Apr 2022 13:51:34 +0000 (14:51 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Fri, 15 Apr 2022 13:11:59 +0000 (14:11 +0100)
Make sure sysupgrade on NAND also works in case of UBI volumes having
index >9. While at it, also make sure UBI device is detected and abort
in case it isn't. Use Shell built-in shorthand ':' instead of 'true'.

Fixes #9708
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 0dbca1b2baf9c26514b517a1e5860f6a5b04d5ae)

package/base-files/files/lib/upgrade/nand.sh

index 19be9dd730d688b08912c71e0881c8878bfdd29d..8720a78b4b4d98e87b06cf974073e4f2aae9d143 100644 (file)
@@ -143,6 +143,7 @@ nand_upgrade_prepare_ubi() {
                ubiattach -m "$mtdnum"
                sync
                ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+               [ ! "$ubidev" ] && return 1
                [ "$has_env" -gt 0 ] && {
                        ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
                        ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
@@ -154,8 +155,13 @@ nand_upgrade_prepare_ubi() {
        local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
 
        local ubiblk ubiblkvol
-       for ubiblk in /dev/ubiblock*_? ; do
+       for ubiblk in /dev/ubiblock${ubidev:3}_* ; do
                [ -e "$ubiblk" ] || continue
+               case "$ubiblk" in
+               /dev/ubiblock*_*p*)
+                       continue
+                       ;;
+               esac
                echo "removing ubiblock${ubiblk:13}"
                ubiblkvol=ubi${ubiblk:13}
                if ! ubiblock -r /dev/$ubiblkvol; then
@@ -165,9 +171,9 @@ nand_upgrade_prepare_ubi() {
        done
 
        # kill volumes
-       [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || true
-       [ "$root_ubivol" -a "$root_ubivol" != "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_ROOTPART || true
-       [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
+       [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || :
+       [ "$root_ubivol" -a "$root_ubivol" != "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_ROOTPART || :
+       [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || :
 
        # update kernel
        if [ -n "$kernel_length" ]; then