mirror of
https://github.com/bin456789/reinstall.git
synced 2026-10-03 22:17:46 +08:00
core: 升级 grub for windows 版本
This commit is contained in:
+60
-21
@@ -3062,8 +3062,53 @@ install_grub_win() {
|
||||
# 下载 grub
|
||||
info download grub
|
||||
|
||||
# arm64 模块要单独下载,要注意版本匹配
|
||||
grub_ver=2.06
|
||||
# https://wuyou.net/forum.php?mod=viewthread&tid=449379&extra=page%3D1&page=2
|
||||
|
||||
# 2.14
|
||||
# efi 正常
|
||||
# bios 报错 ld.gold bug https://lists.gnu.org/archive/html/grub-devel/2026-01/msg00041.html
|
||||
# 替换成 alpine/arch 的模块后,出现 ntfs 读取 out of range 错误
|
||||
|
||||
# 2.12
|
||||
# efi 报错 __stack_chk_guard https://lists.gnu.org/archive/html/bug-grub/2024-01/msg00002.html
|
||||
# 替换成 alpine/arch 的模块后,正常
|
||||
# bios 正常
|
||||
|
||||
# 2.06
|
||||
# 一切正常
|
||||
|
||||
# 要使用的 grub 版本
|
||||
if is_efi; then
|
||||
local grub_ver=2.14
|
||||
else
|
||||
local grub_ver=2.12
|
||||
fi
|
||||
|
||||
# grub 对应的 alpine 版本
|
||||
case "$grub_ver" in
|
||||
2.06) local alpine_ver=3.19 ;;
|
||||
2.12) local alpine_ver=3.23 ;;
|
||||
2.14) local alpine_ver=3.24 ;;
|
||||
esac
|
||||
|
||||
# grub 架构名和对应的 alpine 包名
|
||||
if is_efi; then
|
||||
local alpine_grub_pkg=grub-efi
|
||||
case "$basearch" in
|
||||
x86_64) local grub_arch=x86_64-efi ;;
|
||||
aarch64) local grub_arch=arm64-efi ;;
|
||||
esac
|
||||
else
|
||||
local alpine_grub_pkg=grub-bios
|
||||
local grub_arch=i386-pc
|
||||
fi
|
||||
|
||||
# 是否需要从 alpine 获取/替换 grub 模块
|
||||
# arm64-efi 要从 alpine 下载 grub 模块
|
||||
local need_download_grub_module_from_alpine=false
|
||||
if [ "$grub_arch" = arm64-efi ]; then
|
||||
need_download_grub_module_from_alpine=true
|
||||
fi
|
||||
|
||||
# ftpmirror.gnu.org 是 geoip 重定向,不是 cdn
|
||||
# 有可能重定义到一个拉黑了部分 IP 的服务器
|
||||
@@ -3077,6 +3122,13 @@ install_grub_win() {
|
||||
grub_dir=$tmp/grub-$grub_ver-for-windows
|
||||
grub=$grub_dir/grub
|
||||
|
||||
# 下载/替换 grub 模块
|
||||
if $need_download_grub_module_from_alpine; then
|
||||
info 'download grub modules from alpine'
|
||||
download_and_extract_apk $alpine_ver $alpine_grub_pkg $tmp/grub-from-alpine
|
||||
cp -r $tmp/grub-from-alpine/usr/lib/grub/$grub_arch/ $grub_dir
|
||||
fi
|
||||
|
||||
# 设置 grub 包含的模块
|
||||
# 原系统是 windows,因此不需要 ext2 lvm xfs btrfs
|
||||
grub_modules+=" normal minicmd serial ls echo test cat reboot halt linux chain search all_video configfile"
|
||||
@@ -3087,6 +3139,7 @@ install_grub_win() {
|
||||
|
||||
# 设置 grub prefix 为c盘根目录
|
||||
# 运行 grub-probe 会改变cmd窗口字体
|
||||
local prefix
|
||||
prefix=$($grub-probe -t drive $c: | sed 's|.*PhysicalDrive|(hd|' | del_cr)/
|
||||
echo $prefix
|
||||
|
||||
@@ -3095,22 +3148,8 @@ install_grub_win() {
|
||||
# efi
|
||||
info install grub for efi
|
||||
|
||||
case "$basearch" in
|
||||
x86_64) grub_arch=x86_64 ;;
|
||||
aarch64) grub_arch=arm64 ;;
|
||||
esac
|
||||
|
||||
# 下载 grub arm64 模块
|
||||
# 注意要匹配 grub-for-windows 版本
|
||||
if ! [ -d $grub_dir/grub/$grub_arch-efi ]; then
|
||||
# 3.20 是 grub 2.12,可能会有问题
|
||||
alpine_ver=3.19
|
||||
download_and_extract_apk $alpine_ver grub-efi $tmp/grub-efi
|
||||
cp -r $tmp/grub-efi/usr/lib/grub/$grub_arch-efi/ $grub_dir
|
||||
fi
|
||||
|
||||
grub_efi=$(get_grub_efi_filename)
|
||||
$grub-mkimage -p $prefix -O $grub_arch-efi -o "$(cygpath -w "$grub_dir/$grub_efi")" $grub_modules
|
||||
$grub-mkimage -p $prefix -O $grub_arch -o "$(cygpath -w "$grub_dir/$grub_efi")" $grub_modules
|
||||
add_efi_entry_in_windows "$grub_dir/$grub_efi"
|
||||
else
|
||||
# bios
|
||||
@@ -3130,20 +3169,20 @@ install_grub_win() {
|
||||
|
||||
# g2ldr
|
||||
# 配置文件 c:\grub.cfg
|
||||
$grub-mkimage -p "$prefix" -O i386-pc -o "$(cygpath -w $grub_dir/core.img)" $grub_modules
|
||||
cat $grub_dir/i386-pc/lnxboot.img $grub_dir/core.img >/cygdrive/$c/g2ldr
|
||||
$grub-mkimage -p "$prefix" -O $grub_arch -o "$(cygpath -w $grub_dir/core.img)" $grub_modules
|
||||
cat $grub_dir/$grub_arch/lnxboot.img $grub_dir/core.img >/cygdrive/$c/g2ldr
|
||||
else
|
||||
# grub-install 无法设置 prefix
|
||||
# 配置文件 c:\grub\grub.cfg
|
||||
$grub-install $c \
|
||||
--target=i386-pc \
|
||||
--target=$grub_arch \
|
||||
--boot-directory=$c: \
|
||||
--install-modules="$grub_modules" \
|
||||
--themes= \
|
||||
--fonts= \
|
||||
--no-bootsector
|
||||
|
||||
cat $grub_dir/i386-pc/lnxboot.img /cygdrive/$c/grub/i386-pc/core.img >/cygdrive/$c/g2ldr
|
||||
cat $grub_dir/$grub_arch/lnxboot.img /cygdrive/$c/grub/$grub_arch/core.img >/cygdrive/$c/g2ldr
|
||||
fi
|
||||
|
||||
# 添加引导
|
||||
|
||||
Reference in New Issue
Block a user