From 6fb979d380594a150ca8915c43ae3bed9a4a13a9 Mon Sep 17 00:00:00 2001 From: Serhii Voloshynov Date: Mon, 22 May 2023 13:05:41 +0300 Subject: failed to perform firmware upgrade and reset to factory defaults when there is no space on /var/persistent GP-1997 use u-boot env as erase persistent flag --- recipes-core/multitech/overlayfs-init-ubi/overlayfs.init | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init index f19abef..9e60961 100644 --- a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init +++ b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init @@ -10,7 +10,7 @@ LOWERDIR="/" USER_ORIG="$UPPERDIR/orig" USER_PARTITION="ubi0:user-data" # Erase the file system -DO_ERASE_PERSISTENT="/mnt/user/.persistent/mts_do_erase_persistent" +DO_ERASE_PERSISTENT=$(fw_printenv erase_persistent_f | cut -d '"' -f2 | grep -Eo '[0-9]+$' || true) # Remove files not hidden DO_CLEAR_PERSISTENT=$(fw_printenv default_reset_f | cut -d '"' -f2 | grep -Eo '[0-9]+$' || true) @@ -34,7 +34,7 @@ mnt_user() { fs="/run /dev /proc /sys /sys/kernel/security /dev/shm /dev/pts /sys/fs/cgroup /sys/fs/cgroup/unified /sys/fs/cgroup/systemd /sys/fs/cgroup/devices /sys/fs/cgroup/freezer /sys/fs/cgroup/pids /sys/fs/cgroup/memory /dev/mqueue /sys/kernel/debug /tmp /sys/fs/fuse/connections /sys/kernel/config /var/volatile" - + my_switch_root() { NEW_ROOT=$1 loginfo mountinfo @@ -88,6 +88,7 @@ do_erase_old() { ubiupdatevol ${DEV} -t 2>&1 | logpipe mnt_user + fw_setenv erase_persistent_f 0 } do_rw_mount() { @@ -97,8 +98,9 @@ do_rw_mount() { mnt_user # user_data is now accessible do_remove_old - if [[ -f $DO_ERASE_PERSISTENT ]] ; then + if [[ "$DO_ERASE_PERSISTENT" -eq 1 ]] ; then do_erase_old + fw_setenv default_reset_f 0 elif [[ "$DO_CLEAR_PERSISTENT" -eq 1 ]] ; then do_clear_old fi -- cgit v1.2.3 From 778a912b4c0f78af3793a6c2a9cbe10c08fd6175 Mon Sep 17 00:00:00 2001 From: Serhii Voloshynov Date: Fri, 26 May 2023 13:02:47 +0300 Subject: improve removing nonpersistent data --- .../multitech/overlayfs-init-ubi/overlayfs.init | 28 +++++----------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init index 9e60961..263aa62 100644 --- a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init +++ b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init @@ -52,28 +52,13 @@ my_switch_root() { /sbin/pivot_root $NEW_ROOT $NEW_ROOT/orig } -do_remove_old() { - shopt -s dotglob - rm -rf $MNT_USER/*.old - shopt -u dotglob -} - -# select files for deletion -do_clear_old() { - # when "clear user data" is requested - mark all non-hidden files for deletion +do_remove_nonpersistent() { loginfo "Clearing user data. Persistent data will be left " - - for FILE_PATH in "$MNT_USER"/*; do - FILE_NAME=$(basename "$FILE_PATH") - # rename all files and folders that exist in /mnt/user - mv "$FILE_PATH" "$MNT_USER/$FILE_NAME.old" 2>&1 | logpipe - done - do_remove_old - fw_setenv default_reset_f 0 + rm -rf $MNT_USER/* } # Most efficient way to clear UBIFS file system -do_erase_old() { +do_erase_all() { loginfo "Erasing user data" # Sys must be mounted to use ubifs utilities mount -t sysfs sysfs /sys @@ -96,13 +81,12 @@ do_rw_mount() { mount -t tmpfs inittemp /mnt mnt_user # user_data is now accessible - do_remove_old - if [[ "$DO_ERASE_PERSISTENT" -eq 1 ]] ; then - do_erase_old + do_erase_all fw_setenv default_reset_f 0 elif [[ "$DO_CLEAR_PERSISTENT" -eq 1 ]] ; then - do_clear_old + do_remove_nonpersistent + fw_setenv default_reset_f 0 fi mkdir -p $UPPERDIR $WORKDIR $OVERLAY $USER_ORIG ${MNT_USER}/.persistent -- cgit v1.2.3 From b61797fd00df4dd9f1dbbb10a85c4de9e8a97f35 Mon Sep 17 00:00:00 2001 From: Serhii Voloshynov Date: Mon, 29 May 2023 13:10:06 +0300 Subject: fix after review --- .../multitech/overlayfs-init-ubi/overlayfs.init | 25 +++++++++++----------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init index 263aa62..c5d3d37 100644 --- a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init +++ b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init @@ -12,7 +12,7 @@ USER_PARTITION="ubi0:user-data" # Erase the file system DO_ERASE_PERSISTENT=$(fw_printenv erase_persistent_f | cut -d '"' -f2 | grep -Eo '[0-9]+$' || true) # Remove files not hidden -DO_CLEAR_PERSISTENT=$(fw_printenv default_reset_f | cut -d '"' -f2 | grep -Eo '[0-9]+$' || true) +DO_ERASE_ALL_EXCEPT_PERSISTENT=$(fw_printenv default_reset_f | cut -d '"' -f2 | grep -Eo '[0-9]+$' || true) pid=$$ prefix="<3>overlayrootfs-generator[${pid}]: " @@ -43,22 +43,23 @@ my_switch_root() { for f in $fs ; do if [[ -d $NEW_ROOT/$f ]] ; then loginfo "my_switch_root: mount -o noatime,move --bind $f $NEW_ROOT/$f" - mount -o noatime,move --bind $f $NEW_ROOT/$f + mount -o noatime,move --bind "$f" "$NEW_ROOT"/"$f" else # loginfo "my_switch_root: Skipping $NEW_ROOT/$f" : fi done - /sbin/pivot_root $NEW_ROOT $NEW_ROOT/orig + /sbin/pivot_root "$NEW_ROOT" "$NEW_ROOT"/orig } -do_remove_nonpersistent() { +do_erase_all_except_persistent() { + # Delete all files and folders except for the "${MNT_USER}/.persistent" directory. loginfo "Clearing user data. Persistent data will be left " - rm -rf $MNT_USER/* + rm -rf "${MNT_USER:?}/"* } # Most efficient way to clear UBIFS file system -do_erase_all() { +do_erase_persistent() { loginfo "Erasing user data" # Sys must be mounted to use ubifs utilities mount -t sysfs sysfs /sys @@ -70,10 +71,11 @@ do_erase_all() { umount -l $MNT_USER loginfo "Erase user-data partition $DEV" # Would be nice if ubiupdatevol took volume names instead of numbers - ubiupdatevol ${DEV} -t 2>&1 | logpipe + ubiupdatevol "${DEV}" -t 2>&1 | logpipe mnt_user fw_setenv erase_persistent_f 0 + fw_setenv default_reset_f 0 } do_rw_mount() { @@ -82,10 +84,9 @@ do_rw_mount() { mnt_user # user_data is now accessible if [[ "$DO_ERASE_PERSISTENT" -eq 1 ]] ; then - do_erase_all - fw_setenv default_reset_f 0 - elif [[ "$DO_CLEAR_PERSISTENT" -eq 1 ]] ; then - do_remove_nonpersistent + do_erase_persistent + elif [[ "$DO_ERASE_ALL_EXCEPT_PERSISTENT" -eq 1 ]] ; then + do_erase_all_except_persistent fw_setenv default_reset_f 0 fi @@ -109,7 +110,7 @@ do_rw_mount() { cgroupmnts=$(sed -r -e 's/[^[:space:]]*[[:space:]]//' -e 's/[[:space:]]+.*//g' /proc/mounts | grep '^/orig') for mp in ${cgroupmnts} ; do if [[ $mp != /orig ]] && [[ $mp != /orig/mnt* ]] && [[ -d $mp ]] ; then - umount -l $mp >/dev/null 2>&1 + umount -l "$mp" >/dev/null 2>&1 fi done } -- cgit v1.2.3 From af9ce3ab1722c0ba9f60a2a042cedf5ff5908949 Mon Sep 17 00:00:00 2001 From: Serhii Voloshynov Date: Mon, 29 May 2023 14:43:59 +0300 Subject: yet another fix after review --- recipes-core/multitech/overlayfs-init-ubi/overlayfs.init | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init index c5d3d37..c6a3ace 100644 --- a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init +++ b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init @@ -43,7 +43,7 @@ my_switch_root() { for f in $fs ; do if [[ -d $NEW_ROOT/$f ]] ; then loginfo "my_switch_root: mount -o noatime,move --bind $f $NEW_ROOT/$f" - mount -o noatime,move --bind "$f" "$NEW_ROOT"/"$f" + mount -o noatime,move --bind "$f" "$NEW_ROOT/$f" else # loginfo "my_switch_root: Skipping $NEW_ROOT/$f" : @@ -74,8 +74,6 @@ do_erase_persistent() { ubiupdatevol "${DEV}" -t 2>&1 | logpipe mnt_user - fw_setenv erase_persistent_f 0 - fw_setenv default_reset_f 0 } do_rw_mount() { @@ -85,6 +83,8 @@ do_rw_mount() { mnt_user # user_data is now accessible if [[ "$DO_ERASE_PERSISTENT" -eq 1 ]] ; then do_erase_persistent + fw_setenv erase_persistent_f 0 + fw_setenv default_reset_f 0 elif [[ "$DO_ERASE_ALL_EXCEPT_PERSISTENT" -eq 1 ]] ; then do_erase_all_except_persistent fw_setenv default_reset_f 0 -- cgit v1.2.3