@@ -143,6 +143,9 @@ define Package/grub2-generic/install
$(1)/usr/lib/grub/grub2/
printf 'BL=$(PKG_NAME)\nBL_VARIANT=generic\nBL_VERSION=$(PKG_VERSION)\nBL_RELEASE=$(PKG_RELEASE)\n' \
> $(1)/usr/lib/grub/grub2/bl-release
+
+ $(INSTALL_DIR) $(1)/lib/preinit
+ $(CP) ./files/81_upgrade_bootloader $(1)/lib/preinit/
endef
define Package/grub2-legacy/install
@@ -155,6 +158,9 @@ define Package/grub2-legacy/install
$(1)/usr/lib/grub/grub2/
printf 'BL=$(PKG_NAME)\nBL_VARIANT=legacy\nBL_VERSION=$(PKG_VERSION)\nBL_RELEASE=$(PKG_RELEASE)\n' \
> $(1)/usr/lib/grub/grub2/bl-release
+
+ $(INSTALL_DIR) $(1)/lib/preinit
+ $(CP) ./files/81_upgrade_bootloader $(1)/lib/preinit/
endef
$(eval $(call HostBuild))
new file mode 100644
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+upgrade_bootloader() {
+ local diskdev
+
+ . /lib/upgrade/common.sh
+
+ if [ ! -f /boot/bl-release ] && export_bootdevice && export_partdevice diskdev 0; then
+ echo "(hd0) /dev/$diskdev" > /tmp/device.map
+ echo "- bootloader upgrade -"
+ /usr/sbin/grub-bios-setup \
+ -m "/tmp/device.map" \
+ -d "/usr/lib/grub/grub2" \
+ -r "hd0,msdos1" \
+ "/dev/$diskdev" \
+ && cp -f /usr/lib/grub/grub2/bl-release /boot/
+ fi
+}
+
+[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main upgrade_bootloader
The current OpenWrt installations lack the necessary bits to upgrade bootloader on sysupgrade, therefore add preinit hook which will perform upgrade of bootloader on first boot. Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl> --- package/boot/grub2/Makefile | 6 ++++++ .../boot/grub2/files/81_upgrade_bootloader | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 package/boot/grub2/files/81_upgrade_bootloader