[OpenWrt-Devel] [PATCH v2 3/3] x86: add preinit hook for bootloader upgrade

Tomasz Maciej Nowak tomek_n at o2.pl
Thu Jul 18 09:31:35 EDT 2019


This commit fills the void for current OpenWrt installations which will be
still on old bootloader version even after "x86: add bootloader upgrade on
sysupgrade", since it performs bootloader upgrade only on sysupgrade.
To keep all OpenWrt deployments on the same GRUB version add preinit hook,
which will perform upgrade of the bootloader on first boot after
sysupgrade.
It's temporary solution and should be deleted when the first release
including this hook will no longer be supported by OpenWrt team, because
we can assume that all installations should have sysupgrade routine for
bootloader upgrade in place.

Signed-off-by: Tomasz Maciej Nowak <tomek_n at o2.pl>
---
 .../lib/preinit/81_upgrade_bootloader         | 19 +++++++++++++++++++
 .../x86/base-files/lib/upgrade/platform.sh    |  3 ++-
 2 files changed, 21 insertions(+), 1 deletion(-)
 create mode 100644 target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader

diff --git a/target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader b/target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader
new file mode 100644
index 0000000000..3a4e756b1e
--- /dev/null
+++ b/target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+upgrade_bootloader() {
+	local diskdev
+
+	. /lib/upgrade/common.sh
+
+	if [ ! -f /boot/grub/upgraded ] && export_bootdevice && export_partdevice diskdev 0; then
+		echo "(hd0) /dev/$diskdev" > /tmp/device.map
+		/usr/sbin/grub-bios-setup \
+			-m "/tmp/device.map" \
+			-d "/boot/grub" \
+			-r "hd0,msdos1" \
+			"/dev/$diskdev" \
+		&& touch /boot/grub/upgraded
+	fi
+}
+
+[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main upgrade_bootloader
diff --git a/target/linux/x86/base-files/lib/upgrade/platform.sh b/target/linux/x86/base-files/lib/upgrade/platform.sh
index 2112e6479d..0ac485199b 100644
--- a/target/linux/x86/base-files/lib/upgrade/platform.sh
+++ b/target/linux/x86/base-files/lib/upgrade/platform.sh
@@ -60,7 +60,8 @@ platform_do_bootloader_upgrade() {
 			-m "/tmp/device.map" \
 			-d "/tmp/boot/boot/grub" \
 			-r "hd0,msdos1" \
-			"/dev/$diskdev"
+			"/dev/$diskdev" \
+		&& touch /boot/grub/upgraded
 
 		umount /tmp/boot
 	fi
-- 
2.22.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list