From 07bc9014fcca953c9ab8ea48939e4ee724e908f7 Mon Sep 17 00:00:00 2001 From: jjm2473 <1129525450@qq.com> Date: Fri, 17 Dec 2021 14:13:18 +0800 Subject: [PATCH] target/realtek: fix upgrade hang (cherry picked from commit fc2db101bcf238dc2faad6ed5a24ffbbeb5921fc) --- package/base-files/files/lib/upgrade/stage2 | 6 +++--- .../realtek/base-files/etc/init.d/rtk_upgrade | 18 ++++++++++++------ .../realtek/base-files/lib/upgrade/platform.sh | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index 00a3e6926f..f2d1c46152 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -115,8 +115,8 @@ killall -9 ash kill_remaining TERM sleep 3 sync -/usr/bin/umount -R -d /mnt -/usr/bin/umount -R -d /overlay +/usr/bin/umount -R -d /mnt & +sleep 5 kill_remaining KILL 1 sleep 1 @@ -135,7 +135,7 @@ fi grep /overlay /proc/mounts > /dev/null && { /bin/mount -o noatime,remount,ro /overlay - /bin/umount -l /overlay + /usr/bin/umount -R -d -l /overlay || /bin/umount -l /overlay } # Exec new shell from ramfs diff --git a/target/linux/realtek/base-files/etc/init.d/rtk_upgrade b/target/linux/realtek/base-files/etc/init.d/rtk_upgrade index 642dd2441b..3c8a5a9bd1 100755 --- a/target/linux/realtek/base-files/etc/init.d/rtk_upgrade +++ b/target/linux/realtek/base-files/etc/init.d/rtk_upgrade @@ -5,21 +5,27 @@ START=14 split_opkg_status() { local line - local of=/dev/null + local gap=1 + exec 3>/dev/null rm -rf $2 mkdir -p $2 cat $1 | while read; do line="$REPLY" if [ -z "$line" ]; then - echo >>$of - of=/dev/null + echo >&3 + exec 3>&- + exec 3>/dev/null + gap=1 else - if [ "x/dev/null" = "x$of" ] && echo "$line" | grep -q "^Package: "; then - of=$2/`echo "$line"|cut -d' ' -f2` + if [ "x1" = "x$gap" ] && echo "$line" | grep -q "^Package: "; then + exec 3>&- + exec 3>$2/`echo "$line"|cut -d' ' -f2` + gap=0 fi - echo "$line" >>$of + echo "$line" >&3 fi done + exec 3>&- } split_both_status() { diff --git a/target/linux/realtek/base-files/lib/upgrade/platform.sh b/target/linux/realtek/base-files/lib/upgrade/platform.sh index dae16fd5ed..02873d4832 100755 --- a/target/linux/realtek/base-files/lib/upgrade/platform.sh +++ b/target/linux/realtek/base-files/lib/upgrade/platform.sh @@ -1,7 +1,7 @@ # bins for install_a RAMFS_COPY_BIN="/usr/bin/cat /usr/bin/chmod /usr/bin/cp /usr/bin/dd \ -/usr/bin/echo /usr/bin/mkdir /usr/bin/rm" +/usr/bin/echo /usr/bin/mkdir /usr/bin/rm /usr/bin/umount" platform_check_image() { echo "platform_check_image"