Signed-off-by: André Valentin <[email protected]>
---
package/base-files/files/lib/upgrade/common.sh | 32 +++++++++++++++---------
package/base-files/files/sbin/sysupgrade | 13 ++++++++++
2 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/package/base-files/files/lib/upgrade/common.sh
b/package/base-files/files/lib/upgrade/common.sh
index ecf1a98..03a647e 100644
--- a/package/base-files/files/lib/upgrade/common.sh
+++ b/package/base-files/files/lib/upgrade/common.sh
@@ -108,18 +108,26 @@ kill_remaining() { # [ <signal> ]
# Skip kernel threads
[ -n "$cmdline" ] || continue
- case "$name" in
- # Skip essential services
-
*procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*)
: ;;
-
- # Killable process
- *)
- if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then
- echo -n "$name "
- kill -$sig $pid 2>/dev/null
- fi
- ;;
- esac
+ if [ $$ -eq 1 ]; then
+ # Running as init process, kill everything except me
+ if [ $pid -ne $$ ]; then
+ echo -n "$name "
+ kill -$sig $pid 2>/dev/null
+ fi
+ else
+ case "$name" in
+ # Skip essential services
+
*procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*)
: ;;
+
+ # Killable process
+ *)
+ if [ $pid -ne $$ ] && [ $ppid -ne $$ ];
then
+ echo -n "$name "
+ kill -$sig $pid 2>/dev/null
+ fi
+ ;;
+ esac
+ fi
done
echo ""
}
diff --git a/package/base-files/files/sbin/sysupgrade
b/package/base-files/files/sbin/sysupgrade
index 479cbad..5159367 100755
--- a/package/base-files/files/sbin/sysupgrade
+++ b/package/base-files/files/sbin/sysupgrade
@@ -19,6 +19,8 @@ export NEED_IMAGE=
export HELP=0
export FORCE=0
export TEST=0
+export RUN_AS_INIT=0
+export ALL_ARGS="$*"
# parse options
while [ -n "$1" ]; do
@@ -33,6 +35,7 @@ while [ -n "$1" ]; do
-r|--restore-backup) export CONF_RESTORE="$2" NEED_IMAGE=1;
shift;;
-l|--list-backup) export CONF_BACKUP_LIST=1; break;;
-f) export CONF_IMAGE="$2"; shift;;
+ -s) export RUN_AS_INIT=1;;
-F|--force) export FORCE=1;;
-T|--test) export TEST=1;;
-h|--help) export HELP=1; break;;
@@ -62,6 +65,9 @@ upgrade-option:
-i interactive mode
-c attempt to preserve all changed files in /etc/
-n do not save configuration over reflash
+ -s run the upgrade process as init (PID 0)
+ this allows ubifs upgrades i.e.
+ important: use full image path like /tmp/xx.bin
-T | --test
Verify image and config .tar.gz but do not actually flash.
-F | --force
@@ -220,6 +226,13 @@ if [ $TEST -eq 1 ]; then
exit 0
fi
+# should we inform procd to run this script
+if [ $RUN_AS_INIT -eq 1 ] && [ $$ -ne 1 ]; then
+ ubus call system upgrade_as_init \
+ '{ "command": "/sbin/sysupgrade", "arguments": "'$ARGV'" }'
+ exit 0
+fi
+
run_hooks "" $sysupgrade_pre_upgrade
ubus call system upgrade
--
1.7.10.4
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel