x86: use PARTUUID instead explicitly specifying the device by default
This changes the x86 image generation to match x86_64, using the PARTUUID for the rootfs instead of explicitly configuring the device. It unbreaks KVM with VirtIO, which uses /dev/vda2 instead of /dev/sda2. Tested in QEMU/KVM with VirtIO, VirtualBox and VMware. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> SVN-Revision: 44966
This commit is contained in:
		| @@ -1,16 +1,38 @@ | ||||
| x86_get_rootfs() { | ||||
| 	local rootfsdev | ||||
| 	local rootfstype | ||||
| 	 | ||||
| 	rootfstype="$(awk 'BEGIN { RS=" "; FS="="; } ($1 == "rootfstype") { print $2 }' < /proc/cmdline)" | ||||
| 	case "$rootfstype" in | ||||
| 		squashfs|jffs2) | ||||
| 			rootfsdev="$(awk 'BEGIN { RS=" "; FS="="; } ($1 == "block2mtd.block2mtd") { print substr($2,1,index($2, ",")-1) }' < /proc/cmdline)";; | ||||
| 		ext4) | ||||
| 			rootfsdev="$(awk 'BEGIN { RS=" "; FS="="; } ($1 == "root") { print $2 }' < /proc/cmdline)";; | ||||
| 	esac | ||||
| 		 | ||||
| 	echo "$rootfstype:$rootfsdev" | ||||
| platform_export_bootpart() { | ||||
| 	local cmdline uuid disk | ||||
|  | ||||
| 	if read cmdline < /proc/cmdline; then | ||||
| 		case "$cmdline" in | ||||
| 			*block2mtd=*) | ||||
| 				disk="${cmdline##*block2mtd=}" | ||||
| 				disk="${disk%%,*}" | ||||
| 			;; | ||||
| 			*root=*) | ||||
| 				disk="${cmdline##*root=}" | ||||
| 				disk="${disk%% *}" | ||||
| 			;; | ||||
| 		esac | ||||
|  | ||||
| 		case "$disk" in | ||||
| 			PARTUUID=[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]-02) | ||||
| 				uuid="${disk#PARTUUID=}" | ||||
| 				uuid="${uuid%-02}" | ||||
| 				for disk in /dev/[hsv]d[a-z]; do | ||||
| 					set -- $(dd if=$disk bs=1 skip=440 count=4 2>/dev/null | hexdump -v -e '4/1 "%02x "') | ||||
| 					if [ "$4$3$2$1" = "$uuid" ]; then | ||||
| 						export BOOTPART="${disk}1" | ||||
| 						return 0 | ||||
| 					fi | ||||
| 				done | ||||
| 			;; | ||||
| 			/dev/*) | ||||
| 				export BOOTPART="${disk%[0-9]}1" | ||||
| 				return 0 | ||||
| 			;; | ||||
| 		esac | ||||
| 	fi | ||||
|  | ||||
| 	return 1 | ||||
| } | ||||
|  | ||||
| platform_check_image() { | ||||
| @@ -26,19 +48,19 @@ platform_check_image() { | ||||
| } | ||||
|  | ||||
| platform_copy_config() { | ||||
| 	local rootfs="$(x86_get_rootfs)" | ||||
| 	local rootfsdev="${rootfs##*:}" | ||||
| 	 | ||||
| 	mount -t ext4 -o rw,noatime "${rootfsdev%[0-9]}1" /mnt | ||||
| 	cp -af "$CONF_TAR" /mnt/ | ||||
| 	umount /mnt | ||||
| 	if [ -b "$BOOTPART" ]; then | ||||
| 		mount -t ext4 -o rw,noatime "$BOOTPART" /mnt | ||||
| 		cp -af "$CONF_TAR" /mnt/ | ||||
| 		umount /mnt | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| platform_do_upgrade() { | ||||
| 	local rootfs="$(x86_get_rootfs)" | ||||
| 	local rootfsdev="${rootfs##*:}" | ||||
| 	platform_export_bootpart | ||||
|  | ||||
| 	sync | ||||
| 	[ -b ${rootfsdev%[0-9]} ] && get_image "$@" | dd of=${rootfsdev%[0-9]} bs=4096 conv=fsync | ||||
| 	sleep 1 | ||||
| 	if [ -b "${BOOTPART%[0-9]}" ]; then | ||||
| 		sync | ||||
| 		get_image "$@" | dd of="${BOOTPART%[0-9]}" bs=4096 conv=fsync | ||||
| 		sleep 1 | ||||
| 	fi | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich