[source] base-files: add support for staged sysupgrades from failsafe mode

LEDE Commits lede-commits at lists.infradead.org
Mon May 29 14:57:07 PDT 2017


neoraider pushed a commit to source.git, branch master:
https://git.lede-project.org/a5428244d969fda2b32e24b7cda589c2c65cbf7c

commit a5428244d969fda2b32e24b7cda589c2c65cbf7c
Author: Matthias Schiffer <mschiffer at universe-factory.net>
AuthorDate: Mon Apr 24 01:31:04 2017 +0200

    base-files: add support for staged sysupgrades from failsafe mode
    
    Signed-off-by: Matthias Schiffer <mschiffer at universe-factory.net>
---
 .../base-files/files/lib/preinit/40_run_failsafe_hook  |  6 +++++-
 .../base-files/files/lib/preinit/99_10_failsafe_login  | 11 +++++++----
 package/base-files/files/sbin/sysupgrade               | 18 +++++++++++++-----
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/package/base-files/files/lib/preinit/40_run_failsafe_hook b/package/base-files/files/lib/preinit/40_run_failsafe_hook
index 7301f77..533b0a9 100644
--- a/package/base-files/files/lib/preinit/40_run_failsafe_hook
+++ b/package/base-files/files/lib/preinit/40_run_failsafe_hook
@@ -5,8 +5,12 @@
 run_failsafe_hook() {
     [ "$pi_preinit_no_failsafe" = "y" ] && return
     if [ "$FAILSAFE" = "true" ]; then
+	lock /tmp/.failsafe
 	boot_run_hook failsafe
-	lock -w /tmp/.failsafe
+	while [ ! -e /tmp/sysupgrade ]; do
+	    lock -w /tmp/.failsafe
+	done
+	exit
     fi
 }
 
diff --git a/package/base-files/files/lib/preinit/99_10_failsafe_login b/package/base-files/files/lib/preinit/99_10_failsafe_login
index 3147cdc..728c63b 100644
--- a/package/base-files/files/lib/preinit/99_10_failsafe_login
+++ b/package/base-files/files/lib/preinit/99_10_failsafe_login
@@ -8,10 +8,13 @@ failsafe_netlogin () {
 }
 
 failsafe_shell() {
-	lock /tmp/.failsafe
-	ash --login
-	echo "Please reboot system when done with failsafe network logins"
-	while true; do sleep 1; done
+	local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')"
+	[ -n "$console" ] || console=console
+	[ -c "/dev/$console" ] || return 0
+	while true; do
+		ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console"
+		sleep 1
+	done &
 }
 
 boot_hook_add failsafe failsafe_netlogin
diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
index 200a0e5..809e789 100755
--- a/package/base-files/files/sbin/sysupgrade
+++ b/package/base-files/files/sbin/sysupgrade
@@ -251,8 +251,16 @@ run_hooks "" $sysupgrade_pre_upgrade
 
 install_bin /sbin/upgraded
 v "Commencing upgrade. All shell sessions will be closed now."
-ubus call system sysupgrade "{
-	\"prefix\": \"$RAM_ROOT\",
-	\"path\": $(json_string "$IMAGE"),
-	\"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\"
-}"
+
+COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
+
+if [ -n "$FAILSAFE" ]; then
+	printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade
+	lock -u /tmp/.failsafe
+else
+	ubus call system sysupgrade "{
+		\"prefix\": $(json_string "$RAM_ROOT"),
+		\"path\": $(json_string "$IMAGE"),
+		\"command\": $(json_string "$COMMAND")
+	}"
+fi



More information about the lede-commits mailing list