Browse Source

base-files: more robust sysupgrade on NAND

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 <[email protected]>
Daniel Golle 3 years ago
parent
commit
0dbca1b2ba
1 changed files with 10 additions and 4 deletions
  1. 10 4
      package/base-files/files/lib/upgrade/nand.sh

+ 10 - 4
package/base-files/files/lib/upgrade/nand.sh

@@ -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