x86: sysupgrade: move partition table change check to platform_check_image
The staged sysupgrade will prevent us from using ask_bool in platform_do_upgrade; therefore, the check is moved to platform_check_image. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
This commit is contained in:
		| @@ -1,13 +1,37 @@ | ||||
| platform_check_image() { | ||||
| 	local diskdev partdev diff | ||||
| 	[ "$#" -gt 1 ] && return 1 | ||||
|  | ||||
| 	case "$(get_magic_word "$1")" in | ||||
| 		eb48|eb63) return 0;; | ||||
| 		eb48|eb63) ;; | ||||
| 		*) | ||||
| 			echo "Invalid image type" | ||||
| 			return 1 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	export_bootdevice && export_partdevice diskdev 0 || { | ||||
| 		echo "Unable to determine upgrade device" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	get_partitions "/dev/$diskdev" bootdisk | ||||
|  | ||||
| 	#extract the boot sector from the image | ||||
| 	get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null | ||||
|  | ||||
| 	get_partitions /tmp/image.bs image | ||||
|  | ||||
| 	#compare tables | ||||
| 	diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" | ||||
|  | ||||
| 	rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image | ||||
|  | ||||
| 	if [ -n "$diff" ]; then | ||||
| 		echo "Partition layout has changed. Full image will be written." | ||||
| 		ask_bool 0 "Abort" && exit 1 | ||||
| 		return 0 | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| platform_copy_config() { | ||||
| @@ -36,9 +60,6 @@ platform_do_upgrade() { | ||||
| 			#compare tables | ||||
| 			diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)" | ||||
| 			if [ -n "$diff" ]; then | ||||
| 				echo "Partition layout is changed.  Full image will be written." | ||||
| 				ask_bool 0 "Abort" && exit | ||||
|  | ||||
| 				get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync | ||||
| 				return 0 | ||||
| 			fi | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Matthias Schiffer
					Matthias Schiffer