x86: add preinit hook for bootloader upgrade
authorTomasz Maciej Nowak <tomek_n@o2.pl>
Tue, 14 Jan 2020 17:45:45 +0000 (18:45 +0100)
committerPetr Štetiar <ynezz@true.cz>
Sun, 1 Mar 2020 20:36:00 +0000 (21:36 +0100)
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 deploynents 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.
We can assume that all installations should be on current bootolader
version and from there sysupgrade routine will be sufficient.

Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader [new file with mode: 0644]
target/linux/x86/base-files/lib/upgrade/platform.sh

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 (file)
index 0000000..3a4e756
--- /dev/null
@@ -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
index 8be96dfcd45f7a85e11683c1d4a218e1c4680719..53c751861cccc1c3ba2b0a0518d0e7a01cff93ff 100644 (file)
@@ -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