base-files: always use staged sysupgrade
Support for the -d and -p options is dropped; it may be added again at some point by adding these flags to the ubus sysupgrade call. A downside of this is that we get a lot less information about the progress of the upgrade: as soon as the actual upgrade starts, all shell sessions are killed to allow unmounting the root filesystem. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
This commit is contained in:
		| @@ -56,7 +56,6 @@ run_ramfs() { # <command> [...] | |||||||
| 		/bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ | 		/bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ | ||||||
| 		/bin/mknod | 		/bin/mknod | ||||||
|  |  | ||||||
| 	install_bin /bin/uclient-fetch /bin/wget |  | ||||||
| 	install_bin /sbin/mtd | 	install_bin /sbin/mtd | ||||||
| 	install_bin /sbin/mount_root | 	install_bin /sbin/mount_root | ||||||
| 	install_bin /sbin/snapshot | 	install_bin /sbin/snapshot | ||||||
| @@ -96,18 +95,16 @@ run_ramfs() { # <command> [...] | |||||||
| 	exec /bin/busybox ash -c "$*" | 	exec /bin/busybox ash -c "$*" | ||||||
| } | } | ||||||
|  |  | ||||||
| kill_remaining() { # [ <signal> ] | kill_remaining() { # [ <signal> [ <loop> ] ] | ||||||
| 	local sig="${1:-TERM}" | 	local sig="${1:-TERM}" | ||||||
|  | 	local loop="${2:-0}" | ||||||
|  | 	local run=true | ||||||
|  | 	local stat | ||||||
|  |  | ||||||
| 	echo -n "Sending $sig to remaining processes ... " | 	echo -n "Sending $sig to remaining processes ... " | ||||||
|  |  | ||||||
| 	local my_pid=$$ | 	while $run; do | ||||||
| 	local my_ppid=$(cut -d' ' -f4  /proc/$my_pid/stat) | 		run=false | ||||||
| 	local my_ppisupgraded= |  | ||||||
| 	grep -q upgraded /proc/$my_ppid/cmdline >/dev/null && { |  | ||||||
| 		local my_ppisupgraded=1 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	local stat |  | ||||||
| 		for stat in /proc/[0-9]*/stat; do | 		for stat in /proc/[0-9]*/stat; do | ||||||
| 			[ -f "$stat" ] || continue | 			[ -f "$stat" ] || continue | ||||||
|  |  | ||||||
| @@ -115,32 +112,20 @@ kill_remaining() { # [ <signal> ] | |||||||
| 			read pid name state ppid rest < $stat | 			read pid name state ppid rest < $stat | ||||||
| 			name="${name#(}"; name="${name%)}" | 			name="${name#(}"; name="${name%)}" | ||||||
|  |  | ||||||
|  | 			# Skip PID1, ourself and our children | ||||||
|  | 			[ $pid -ne 1 -a $pid -ne $$ -a $ppid -ne $$ ] || continue | ||||||
|  |  | ||||||
| 			local cmdline | 			local cmdline | ||||||
| 			read cmdline < /proc/$pid/cmdline | 			read cmdline < /proc/$pid/cmdline | ||||||
|  |  | ||||||
| 			# Skip kernel threads | 			# Skip kernel threads | ||||||
| 			[ -n "$cmdline" ] || continue | 			[ -n "$cmdline" ] || continue | ||||||
|  |  | ||||||
| 		if [ $$ -eq 1 ] || [ $my_ppid -eq 1 ] && [ -n "$my_ppisupgraded" ]; then |  | ||||||
| 			# Running as init process, kill everything except me |  | ||||||
| 			if [ $pid -ne $$ ] && [ $pid -ne $my_ppid ]; then |  | ||||||
| 			echo -n "$name " | 			echo -n "$name " | ||||||
| 			kill -$sig $pid 2>/dev/null | 			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*|*relayd*) : ;; |  | ||||||
|  |  | ||||||
| 				# Killable process | 			[ $loop -eq 1 ] && run=true | ||||||
| 				*) | 		done | ||||||
| 					if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then |  | ||||||
| 						echo -n "$name " |  | ||||||
| 						kill -$sig $pid 2>/dev/null |  | ||||||
| 					fi |  | ||||||
| 				;; |  | ||||||
| 			esac |  | ||||||
| 		fi |  | ||||||
| 	done | 	done | ||||||
| 	echo "" | 	echo "" | ||||||
| } | } | ||||||
| @@ -175,28 +160,31 @@ v() { | |||||||
| 	[ "$VERBOSE" -ge 1 ] && echo "$@" | 	[ "$VERBOSE" -ge 1 ] && echo "$@" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | json_string() { | ||||||
|  | 	local v="$1" | ||||||
|  | 	v="${v//\\/\\\\}" | ||||||
|  | 	v="${v//\"/\\\"}" | ||||||
|  | 	echo "\"$v\"" | ||||||
|  | } | ||||||
|  |  | ||||||
| rootfs_type() { | rootfs_type() { | ||||||
| 	/bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }' | 	/bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }' | ||||||
| } | } | ||||||
|  |  | ||||||
| get_image() { # <source> [ <command> ] | get_image() { # <source> [ <command> ] | ||||||
| 	local from="$1" | 	local from="$1" | ||||||
| 	local conc="$2" | 	local cat="$2" | ||||||
| 	local cmd |  | ||||||
|  |  | ||||||
| 	case "$from" in | 	if [ -z "$cat" ]; then | ||||||
| 		http://*|ftp://*) cmd="wget -O- -q";; | 		local magic="$(dd if="$from" bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" | ||||||
| 		*) cmd="cat";; |  | ||||||
| 	esac |  | ||||||
| 	if [ -z "$conc" ]; then |  | ||||||
| 		local magic="$(eval $cmd \"$from\" 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')" |  | ||||||
| 		case "$magic" in | 		case "$magic" in | ||||||
| 			1f8b) conc="zcat";; | 			1f8b) cat="zcat";; | ||||||
| 			425a) conc="bzcat";; | 			425a) cat="bzcat";; | ||||||
|  | 			*) cat="cat";; | ||||||
| 		esac | 		esac | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	eval "$cmd \"$from\" 2>/dev/null ${conc:+| $conc}" | 	$cat "$from" 2>/dev/null | ||||||
| } | } | ||||||
|  |  | ||||||
| get_magic_word() { | get_magic_word() { | ||||||
| @@ -320,12 +308,14 @@ default_do_upgrade() { | |||||||
| 	fi | 	fi | ||||||
| } | } | ||||||
|  |  | ||||||
| do_upgrade() { | do_upgrade_stage2() { | ||||||
| 	v "Performing system upgrade..." | 	v "Performing system upgrade..." | ||||||
| 	if type 'platform_do_upgrade' >/dev/null 2>/dev/null; then | 	if [ -n "$do_upgrade" ]; then | ||||||
| 		platform_do_upgrade "$ARGV" | 		$do_upgrade "$IMAGE" | ||||||
|  | 	elif type 'platform_do_upgrade' >/dev/null 2>/dev/null; then | ||||||
|  | 		platform_do_upgrade "$IMAGE" | ||||||
| 	else | 	else | ||||||
| 		default_do_upgrade "$ARGV" | 		default_do_upgrade "$IMAGE" | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then | 	if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then | ||||||
| @@ -333,12 +323,11 @@ do_upgrade() { | |||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	v "Upgrade completed" | 	v "Upgrade completed" | ||||||
| 	[ -n "$DELAY" ] && sleep "$DELAY" | 	sleep 1 | ||||||
| 	ask_bool 1 "Reboot" && { |  | ||||||
| 	v "Rebooting system..." | 	v "Rebooting system..." | ||||||
| 	umount -a | 	umount -a | ||||||
| 	reboot -f | 	reboot -f | ||||||
| 	sleep 5 | 	sleep 5 | ||||||
| 	echo b 2>/dev/null >/proc/sysrq-trigger | 	echo b 2>/dev/null >/proc/sysrq-trigger | ||||||
| } | } | ||||||
| } |  | ||||||
|   | |||||||
| @@ -283,7 +283,16 @@ nand_upgrade_tar() { | |||||||
| } | } | ||||||
|  |  | ||||||
| # Recognize type of passed file and start the upgrade process | # Recognize type of passed file and start the upgrade process | ||||||
| nand_do_upgrade_stage2() { | nand_do_upgrade() { | ||||||
|  | 	if [ -n "$IS_PRE_UPGRADE" ]; then | ||||||
|  | 		# Previously, nand_do_upgrade was called from the platform_pre_upgrade | ||||||
|  | 		# hook; this piece of code handles scripts that haven't been | ||||||
|  | 		# updated. All scripts should gradually move to call nand_do_upgrade | ||||||
|  | 		# from platform_do_upgrade instead. | ||||||
|  | 		export do_upgrade=nand_do_upgrade | ||||||
|  | 		return | ||||||
|  | 	fi | ||||||
|  |  | ||||||
| 	local file_type=$(identify $1) | 	local file_type=$(identify $1) | ||||||
|  |  | ||||||
| 	if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then | 	if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then | ||||||
| @@ -299,45 +308,6 @@ nand_do_upgrade_stage2() { | |||||||
| 	esac | 	esac | ||||||
| } | } | ||||||
|  |  | ||||||
| nand_upgrade_stage2() { |  | ||||||
| 	[ $1 = "nand" ] && { |  | ||||||
| 		[ -f "$2" ] && { |  | ||||||
| 			touch /tmp/sysupgrade |  | ||||||
|  |  | ||||||
| 			killall -9 telnetd |  | ||||||
| 			killall -9 dropbear |  | ||||||
| 			killall -9 ash |  | ||||||
|  |  | ||||||
| 			kill_remaining TERM |  | ||||||
| 			sleep 3 |  | ||||||
| 			kill_remaining KILL |  | ||||||
|  |  | ||||||
| 			sleep 1 |  | ||||||
|  |  | ||||||
| 			if [ -n "$(rootfs_type)" ]; then |  | ||||||
| 				v "Switching to ramdisk..." |  | ||||||
| 				run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2" |  | ||||||
| 			else |  | ||||||
| 				nand_do_upgrade_stage2 $2 |  | ||||||
| 			fi |  | ||||||
| 			return 0 |  | ||||||
| 		} |  | ||||||
| 		echo "Nand upgrade failed" |  | ||||||
| 		exit 1 |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| nand_upgrade_stage1() { |  | ||||||
| 	[ -f /tmp/sysupgrade-nand-path ] && { |  | ||||||
| 		path="$(cat /tmp/sysupgrade-nand-path)" |  | ||||||
| 		[ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] && |  | ||||||
| 			rm $CONF_TAR |  | ||||||
|  |  | ||||||
| 		ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }" |  | ||||||
| 		exit 0 |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Check if passed file is a valid one for NAND sysupgrade. Currently it accepts | # Check if passed file is a valid one for NAND sysupgrade. Currently it accepts | ||||||
| # 3 types of files: | # 3 types of files: | ||||||
| # 1) UBI - should contain an ubinized image, header is checked for the proper | # 1) UBI - should contain an ubinized image, header is checked for the proper | ||||||
| @@ -364,13 +334,3 @@ nand_do_platform_check() { | |||||||
|  |  | ||||||
| 	return 0 | 	return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| # Start NAND upgrade process |  | ||||||
| # |  | ||||||
| # $(1): file to be used for upgrade |  | ||||||
| nand_do_upgrade() { |  | ||||||
| 	echo -n $1 > /tmp/sysupgrade-nand-path |  | ||||||
| 	install_bin /sbin/upgraded |  | ||||||
| 	ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded |  | ||||||
| 	nand_upgrade_stage1 |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										50
									
								
								package/base-files/files/lib/upgrade/stage2
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										50
									
								
								package/base-files/files/lib/upgrade/stage2
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,50 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | . /lib/functions.sh | ||||||
|  | . /lib/functions/system.sh | ||||||
|  |  | ||||||
|  | export IMAGE="$1" | ||||||
|  | COMMAND="$2" | ||||||
|  |  | ||||||
|  | export ARGV="$IMAGE" | ||||||
|  | export ARGC=1 | ||||||
|  |  | ||||||
|  | export SAVE_CONFIG=1 | ||||||
|  | export SAVE_PARTITIONS=1 | ||||||
|  |  | ||||||
|  | export INTERACTIVE=0 | ||||||
|  | export VERBOSE=1 | ||||||
|  | export CONFFILES=/tmp/sysupgrade.conffiles | ||||||
|  | export CONF_TAR=/tmp/sysupgrade.tgz | ||||||
|  |  | ||||||
|  |  | ||||||
|  | [ -f "$CONF_TAR" ] || export SAVE_CONFIG=0 | ||||||
|  | [ -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap ] && export SAVE_PARTITIONS=0 | ||||||
|  |  | ||||||
|  | include /lib/upgrade | ||||||
|  |  | ||||||
|  |  | ||||||
|  | killall -9 telnetd | ||||||
|  | killall -9 dropbear | ||||||
|  | killall -9 ash | ||||||
|  |  | ||||||
|  | kill_remaining TERM | ||||||
|  | sleep 3 | ||||||
|  | kill_remaining KILL 1 | ||||||
|  |  | ||||||
|  | sleep 1 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if [ -n "$IMAGE" ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then | ||||||
|  | 	IS_PRE_UPGRADE=1 platform_pre_upgrade "$IMAGE" | ||||||
|  |  | ||||||
|  | 	# Needs to be unset again because of busybox weirdness ... | ||||||
|  | 	IS_PRE_UPGRADE= | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ -n "$(rootfs_type)" ]; then | ||||||
|  | 	echo "Switching to ramdisk..." | ||||||
|  | 	run_ramfs "$COMMAND" | ||||||
|  | else | ||||||
|  | 	exec /bin/busybox ash -c "$COMMAND" | ||||||
|  | fi | ||||||
| @@ -1,4 +1,7 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  |  | ||||||
|  | [ "$1" = "nand" ] && exec /lib/upgrade/stage2 "$2" "$3" | ||||||
|  |  | ||||||
| . /lib/functions.sh | . /lib/functions.sh | ||||||
| . /lib/functions/system.sh | . /lib/functions/system.sh | ||||||
|  |  | ||||||
| @@ -11,7 +14,6 @@ export VERBOSE=1 | |||||||
| export SAVE_CONFIG=1 | export SAVE_CONFIG=1 | ||||||
| export SAVE_OVERLAY=0 | export SAVE_OVERLAY=0 | ||||||
| export SAVE_PARTITIONS=1 | export SAVE_PARTITIONS=1 | ||||||
| export DELAY= |  | ||||||
| export CONF_IMAGE= | export CONF_IMAGE= | ||||||
| export CONF_BACKUP_LIST=0 | export CONF_BACKUP_LIST=0 | ||||||
| export CONF_BACKUP= | export CONF_BACKUP= | ||||||
| @@ -25,7 +27,6 @@ export TEST=0 | |||||||
| while [ -n "$1" ]; do | while [ -n "$1" ]; do | ||||||
| 	case "$1" in | 	case "$1" in | ||||||
| 		-i) export INTERACTIVE=1;; | 		-i) export INTERACTIVE=1;; | ||||||
| 		-d) export DELAY="$2"; shift;; |  | ||||||
| 		-v) export VERBOSE="$(($VERBOSE + 1))";; | 		-v) export VERBOSE="$(($VERBOSE + 1))";; | ||||||
| 		-q) export VERBOSE="$(($VERBOSE - 1))";; | 		-q) export VERBOSE="$(($VERBOSE - 1))";; | ||||||
| 		-n) export SAVE_CONFIG=0;; | 		-n) export SAVE_CONFIG=0;; | ||||||
| @@ -50,10 +51,9 @@ done | |||||||
| export CONFFILES=/tmp/sysupgrade.conffiles | export CONFFILES=/tmp/sysupgrade.conffiles | ||||||
| export CONF_TAR=/tmp/sysupgrade.tgz | export CONF_TAR=/tmp/sysupgrade.tgz | ||||||
|  |  | ||||||
| export ARGV="$*" | IMAGE="$1" | ||||||
| export ARGC="$#" |  | ||||||
|  |  | ||||||
| [ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && { | [ -z "$IMAGE" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && { | ||||||
| 	cat <<EOF | 	cat <<EOF | ||||||
| Usage: $0 [<upgrade-option>...] <image file or URL> | Usage: $0 [<upgrade-option>...] <image file or URL> | ||||||
|        $0 [-q] [-i] <backup-command> <file> |        $0 [-q] [-i] <backup-command> <file> | ||||||
| @@ -90,7 +90,7 @@ EOF | |||||||
| 	exit 1 | 	exit 1 | ||||||
| } | } | ||||||
|  |  | ||||||
| [ -n "$ARGV" -a -n "$NEED_IMAGE" ] && { | [ -n "$IMAGE" -a -n "$NEED_IMAGE" ] && { | ||||||
| 	cat <<-EOF | 	cat <<-EOF | ||||||
| 		-b|--create-backup and -r|--restore-backup do not perform a firmware upgrade. | 		-b|--create-backup and -r|--restore-backup do not perform a firmware upgrade. | ||||||
| 		Do not specify both -b|-r and a firmware image. | 		Do not specify both -b|-r and a firmware image. | ||||||
| @@ -136,14 +136,13 @@ sysupgrade_pre_upgrade="fwtool_pre_upgrade" | |||||||
|  |  | ||||||
| include /lib/upgrade | include /lib/upgrade | ||||||
|  |  | ||||||
| [ "$1" = "nand" ] && nand_upgrade_stage2 $@ |  | ||||||
|  |  | ||||||
| do_save_conffiles() { | do_save_conffiles() { | ||||||
| 	local conf_tar="${1:-$CONF_TAR}" | 	local conf_tar="${1:-$CONF_TAR}" | ||||||
|  |  | ||||||
| 	[ -z "$(rootfs_type)" ] && { | 	[ -z "$(rootfs_type)" ] && { | ||||||
| 		echo "Cannot save config while running from ramdisk." | 		echo "Cannot save config while running from ramdisk." | ||||||
| 		ask_bool 0 "Abort" && exit | 		ask_bool 0 "Abort" && exit | ||||||
|  | 		rm -f "$conf_tar" | ||||||
| 		return 0 | 		return 0 | ||||||
| 	} | 	} | ||||||
| 	run_hooks "$CONFFILES" $sysupgrade_init_conffiles | 	run_hooks "$CONFFILES" $sysupgrade_init_conffiles | ||||||
| @@ -184,8 +183,33 @@ type platform_check_image >/dev/null 2>/dev/null || { | |||||||
| 	exit 1 | 	exit 1 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | case "$IMAGE" in | ||||||
|  | 	http://*) | ||||||
|  | 		wget -O/tmp/sysupgrade.img "$IMAGE" | ||||||
|  | 		IMAGE=/tmp/sysupgrade.img | ||||||
|  | 		;; | ||||||
|  | esac | ||||||
|  |  | ||||||
|  | IMAGE="$(readlink -f "$IMAGE")" | ||||||
|  |  | ||||||
|  | case "$IMAGE" in | ||||||
|  | 	'') | ||||||
|  | 		echo "Image file not found." | ||||||
|  | 		exit 1 | ||||||
|  | 		;; | ||||||
|  | 	/tmp/*)	;; | ||||||
|  | 	*) | ||||||
|  | 		v "Image not in /tmp, copying..." | ||||||
|  | 		cp -f "$IMAGE" /tmp/sysupgrade.img | ||||||
|  | 		IMAGE=/tmp/sysupgrade.img | ||||||
|  | 		;; | ||||||
|  | esac | ||||||
|  |  | ||||||
|  | export ARGV="$IMAGE" | ||||||
|  | export ARGC=1 | ||||||
|  |  | ||||||
| for check in $sysupgrade_image_check; do | for check in $sysupgrade_image_check; do | ||||||
| 	( eval "$check \"\$ARGV\"" ) || { | 	( $check "$IMAGE" ) || { | ||||||
| 		if [ $FORCE -eq 1 ]; then | 		if [ $FORCE -eq 1 ]; then | ||||||
| 			echo "Image check '$check' failed but --force given - will update anyway!" | 			echo "Image check '$check' failed but --force given - will update anyway!" | ||||||
| 			break | 			break | ||||||
| @@ -211,6 +235,7 @@ elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then | |||||||
| 	[ $TEST -eq 1 ] || do_save_conffiles | 	[ $TEST -eq 1 ] || do_save_conffiles | ||||||
| 	export SAVE_CONFIG=1 | 	export SAVE_CONFIG=1 | ||||||
| else | else | ||||||
|  | 	[ $TEST -eq 1 ] || rm -f "$CONF_TAR" | ||||||
| 	export SAVE_CONFIG=0 | 	export SAVE_CONFIG=0 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| @@ -218,28 +243,18 @@ if [ $TEST -eq 1 ]; then | |||||||
| 	exit 0 | 	exit 0 | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | if [ $SAVE_PARTITIONS -eq 0 ]; then | ||||||
|  | 	touch /tmp/sysupgrade.always.overwrite.bootdisk.partmap | ||||||
|  | else | ||||||
|  | 	rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap | ||||||
|  | fi | ||||||
|  |  | ||||||
| run_hooks "" $sysupgrade_pre_upgrade | run_hooks "" $sysupgrade_pre_upgrade | ||||||
|  |  | ||||||
| # Some platforms/devices may want different sysupgrade process, e.g. without | install_bin /sbin/upgraded | ||||||
| # killing processes yet or calling ubus system upgrade method. | v "Commencing upgrade. All shell sessions will be closed now." | ||||||
| # This is needed e.g. on NAND devices where we just want to trigger stage1 at | ubus call system sysupgrade "{ | ||||||
| # this point. | 	\"prefix\": \"$RAM_ROOT\", | ||||||
| if type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then | 	\"path\": $(json_string "$IMAGE"), | ||||||
| 	platform_pre_upgrade "$ARGV" | 	\"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\" | ||||||
| fi | }" | ||||||
|  |  | ||||||
| ubus call system upgrade |  | ||||||
| touch /tmp/sysupgrade |  | ||||||
|  |  | ||||||
| if [ ! -f /tmp/failsafe ] ; then |  | ||||||
| 	kill_remaining TERM |  | ||||||
| 	sleep 3 |  | ||||||
| 	kill_remaining KILL |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| if [ -n "$(rootfs_type)" ]; then |  | ||||||
| 	v "Switching to ramdisk..." |  | ||||||
| 	run_ramfs '. /lib/functions.sh; include /lib/upgrade; do_upgrade' |  | ||||||
| else |  | ||||||
| 	do_upgrade |  | ||||||
| fi |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Matthias Schiffer
					Matthias Schiffer