base-files: fix issues in nand sysupgrade
authorRodrigo Balerdi <lanchon@gmail.com>
Fri, 15 Apr 2022 13:11:52 +0000 (10:11 -0300)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 19 Apr 2022 15:28:25 +0000 (16:28 +0100)
Fix issues while retaining configuration during nand sysupgrade:
- abort configuration saving if data partition is not found
- generate diagnostics if saving fails (eg, because of lack of space)
- do not output "sysupgrade successful" in case of errors

Signed-off-by: Rodrigo Balerdi <lanchon@gmail.com>
package/base-files/files/lib/upgrade/nand.sh

index f941718446dc64694cab07f02313b0f5f9d0af35..d85b2aa24147984c3cdef725c901f0154168dc5e 100644 (file)
@@ -97,21 +97,33 @@ identify_tar() {
 }
 
 nand_restore_config() {
-       sync
        local ubidev=$( nand_find_ubi "$CI_UBIPART" )
        local ubivol="$( nand_find_volume $ubidev rootfs_data )"
-       [ ! "$ubivol" ] &&
+       if [ ! "$ubivol" ]; then
                ubivol="$( nand_find_volume $ubidev "$CI_ROOTPART" )"
+               if [ ! "$ubivol" ]; then
+                       echo "cannot find ubifs data volume"
+                       return 1
+               fi
+       fi
        mkdir /tmp/new_root
        if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
-               echo "mounting ubifs $ubivol failed"
+               echo "cannot mount ubifs volume $ubivol"
                rmdir /tmp/new_root
                return 1
        fi
-       mv "$1" "/tmp/new_root/$BACKUP_FILE"
-       umount /tmp/new_root
-       sync
+       if mv "$1" "/tmp/new_root/$BACKUP_FILE"; then
+               if umount /tmp/new_root; then
+                       echo "configuration saved"
+                       rmdir /tmp/new_root
+                       return 0
+               fi
+       else
+               umount /tmp/new_root
+       fi
+       echo "could not save configuration to ubifs volume $ubivol"
        rmdir /tmp/new_root
+       return 1
 }
 
 nand_remove_ubiblock() {
@@ -223,10 +235,9 @@ nand_upgrade_prepare_ubi() {
 
 nand_do_upgrade_success() {
        local conf_tar="/tmp/sysupgrade.tgz"
-
-       sync
-       [ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
-       echo "sysupgrade successful"
+       if { [ ! -f "$conf_tar" ] || nand_restore_config "$conf_tar"; } && sync; then
+               echo "sysupgrade successful"
+       fi
        umount -a
        reboot -f
 }