52d28c1140
The staged sysupgrade allows to properly unmount the rootfs before writing the new partitions. This will fix upgrades losing configuration when parition sizes change on x86 and similar image types.
63 lines
1.9 KiB
Diff
63 lines
1.9 KiB
Diff
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
Date: Wed, 3 May 2017 08:57:29 +0200
|
|
Subject: 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>
|
|
|
|
diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh
|
|
index d3e9f360aadedad0995da55205364940c9884ba4..81b349a81816033eef9df464b2a70fdb998e5a1d 100644
|
|
--- a/target/linux/x86/base-files/lib/upgrade/platform.sh
|
|
+++ b/target/linux/x86/base-files/lib/upgrade/platform.sh
|
|
@@ -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
|