소스 검색

x86: add preinit hook for bootloader upgrade

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 <[email protected]>
Tomasz Maciej Nowak 5 년 전
부모
커밋
b9c1cf1657
2개의 변경된 파일21개의 추가작업 그리고 1개의 파일을 삭제
  1. 19 0
      target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader
  2. 2 1
      target/linux/x86/base-files/lib/upgrade/platform.sh

+ 19 - 0
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

+ 2 - 1
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