base-files: add support for staged sysupgrades from failsafe mode
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
This commit is contained in:
		| @@ -5,8 +5,12 @@ | |||||||
| run_failsafe_hook() { | run_failsafe_hook() { | ||||||
|     [ "$pi_preinit_no_failsafe" = "y" ] && return |     [ "$pi_preinit_no_failsafe" = "y" ] && return | ||||||
|     if [ "$FAILSAFE" = "true" ]; then |     if [ "$FAILSAFE" = "true" ]; then | ||||||
|  | 	lock /tmp/.failsafe | ||||||
| 	boot_run_hook failsafe | 	boot_run_hook failsafe | ||||||
|  | 	while [ ! -e /tmp/sysupgrade ]; do | ||||||
| 	    lock -w /tmp/.failsafe | 	    lock -w /tmp/.failsafe | ||||||
|  | 	done | ||||||
|  | 	exit | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,10 +8,13 @@ failsafe_netlogin () { | |||||||
| } | } | ||||||
|  |  | ||||||
| failsafe_shell() { | failsafe_shell() { | ||||||
| 	lock /tmp/.failsafe | 	local console="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | head -1 | sed -e 's/^console=//' -e 's/,.*//')" | ||||||
| 	ash --login | 	[ -n "$console" ] || console=console | ||||||
| 	echo "Please reboot system when done with failsafe network logins" | 	[ -c "/dev/$console" ] || return 0 | ||||||
| 	while true; do sleep 1; done | 	while true; do | ||||||
|  | 		ash --login <"/dev/$console" >"/dev/$console" 2>"/dev/$console" | ||||||
|  | 		sleep 1 | ||||||
|  | 	done & | ||||||
| } | } | ||||||
|  |  | ||||||
| boot_hook_add failsafe failsafe_netlogin | boot_hook_add failsafe failsafe_netlogin | ||||||
|   | |||||||
| @@ -251,8 +251,16 @@ run_hooks "" $sysupgrade_pre_upgrade | |||||||
|  |  | ||||||
| install_bin /sbin/upgraded | install_bin /sbin/upgraded | ||||||
| v "Commencing upgrade. All shell sessions will be closed now." | v "Commencing upgrade. All shell sessions will be closed now." | ||||||
|  |  | ||||||
|  | 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 "{ | 	ubus call system sysupgrade "{ | ||||||
| 	\"prefix\": \"$RAM_ROOT\", | 		\"prefix\": $(json_string "$RAM_ROOT"), | ||||||
| 		\"path\": $(json_string "$IMAGE"), | 		\"path\": $(json_string "$IMAGE"), | ||||||
| 	\"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\" | 		\"command\": $(json_string "$COMMAND") | ||||||
| 	}" | 	}" | ||||||
|  | fi | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Matthias Schiffer
					Matthias Schiffer