new file mode 100644
@@ -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
@@ -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
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@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