From d027b8bdd116a2a2e33c8a237a2cd669dd8371b4 Mon Sep 17 00:00:00 2001 From: jjm2473 <1129525450@qq.com> Date: Wed, 15 Dec 2021 14:35:48 +0800 Subject: [PATCH] target/realtek: auto fix opkg status after dirty upgrading (cherry picked from commit 10cf9aebadd800e29db4e348660ec167d9c632b3) --- .../realtek/base-files/etc/init.d/rtk_upgrade | 60 +++++++++++++++++++ .../base-files/etc/uci-defaults/09_realtek | 2 + .../base-files/lib/upgrade/platform.sh | 6 ++ 3 files changed, 68 insertions(+) create mode 100755 target/linux/realtek/base-files/etc/init.d/rtk_upgrade diff --git a/target/linux/realtek/base-files/etc/init.d/rtk_upgrade b/target/linux/realtek/base-files/etc/init.d/rtk_upgrade new file mode 100755 index 0000000000..642dd2441b --- /dev/null +++ b/target/linux/realtek/base-files/etc/init.d/rtk_upgrade @@ -0,0 +1,60 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2016 OpenWrt.org + +START=14 + +split_opkg_status() { + local line + local of=/dev/null + rm -rf $2 + mkdir -p $2 + cat $1 | while read; do + line="$REPLY" + if [ -z "$line" ]; then + echo >>$of + of=/dev/null + else + if [ "x/dev/null" = "x$of" ] && echo "$line" | grep -q "^Package: "; then + of=$2/`echo "$line"|cut -d' ' -f2` + fi + echo "$line" >>$of + fi + done +} + +split_both_status() { + split_opkg_status /usr/lib/opkg/status /tmp/newopkgstatus & + split_opkg_status /rom/usr/lib/opkg/status /tmp/romopkgstatus & + wait +} + +ls_all_pkgs() { + ( cd /usr/lib/opkg/info ; find . -maxdepth 1 -name '*.control' | sed -E 's#./(.*).control#\1#g' ) +} + +rebuild_opkg_status() { + local line + ls_all_pkgs | while read line; do + if [ -f /overlay/upper/usr/lib/opkg/info/$line.control ]; then + cat /tmp/newopkgstatus/$line + else + cat /tmp/romopkgstatus/$line + fi + done +} + +clean_tmp_files() { + rm -rf /tmp/newopkgstatus + rm -rf /tmp/romopkgstatus +} + +boot() { + [ -f /.recovery_mode ] && return 0 + + if [ -f /usr/lib/opkg/.upgrading ]; then + rm -f /usr/lib/opkg/.upgrading + split_both_status + rebuild_opkg_status > /usr/lib/opkg/status + clean_tmp_files + fi +} diff --git a/target/linux/realtek/base-files/etc/uci-defaults/09_realtek b/target/linux/realtek/base-files/etc/uci-defaults/09_realtek index eb76300828..2c887d6553 100644 --- a/target/linux/realtek/base-files/etc/uci-defaults/09_realtek +++ b/target/linux/realtek/base-files/etc/uci-defaults/09_realtek @@ -53,4 +53,6 @@ fi uci commit dockerman +rm -f /usr/lib/opkg/.upgrading + exit 0 diff --git a/target/linux/realtek/base-files/lib/upgrade/platform.sh b/target/linux/realtek/base-files/lib/upgrade/platform.sh index 4606bed9f4..dae16fd5ed 100755 --- a/target/linux/realtek/base-files/lib/upgrade/platform.sh +++ b/target/linux/realtek/base-files/lib/upgrade/platform.sh @@ -14,6 +14,12 @@ platform_check_image() { return 0 } +platform_pre_upgrade() { + [ -n "$UPGRADE_BACKUP" ] && { + touch /overlay/upper/usr/lib/opkg/.upgrading && sync /overlay + } +} + platform_do_upgrade() { # $1: image path/url echo "platform_do_upgrade start"