ghostplant / ubuntu-pe

Ubuntu PE: A Fast, Portable and Power-Saving edition for Ubuntu 24.04
https://launchpad.net/~ghostplant/+archive/ubuntu/flashback/+packages
261 stars 39 forks source link

ventoy环境引导启动的兼容性问题 #47

Closed d0ng13 closed 9 months ago

d0ng13 commented 9 months ago

问题描述

复现

环境

测试镜像

其他信息

ghostplant commented 9 months ago

不同linux发行版的ISO数据格式不同。除了官方Ubuntu之外,ventoy支持其他Linux发行版吗?

d0ng13 commented 9 months ago

不同linux发行版的ISO数据格式不同。除了官方Ubuntu之外,ventoy支持其他Linux发行版吗?

支持的,具体可以查看ventoy官网提供的 支持列表, 常用的包括 alpine、debian、ubuntu、kali、deepin、manjaro 都没问题,也用过像Kaspersky Rescue(krd)这样的救援环境。

我用Ubuntu 24.04 PE iso在ventoy提供的三种引导方式下(normal、grub2、memdisk)都没有成功,kernel和initramfs应该是加载正常的。

ghostplant commented 9 months ago

ventoy想要添加启动支持的话,需要找到它的grub2配置文件,里面加入启动项:

menuentry 'Ubuntu PE' {
  search --set -f /noble-mate-x86_64-20240209.iso
  loopback lo /noble-mate-x86_64-20240209.iso
  linux (lo)/casper/vmlinuz boot=casper iso-scan/filename=/noble-mate-x86_64-20240209.iso
  initrd (lo)/casper/initrd.img
}
d0ng13 commented 9 months ago

受到启发,我猜是工作顺序的问题。我目前的方案是直接暴力替换 iso 中的 /boot/grub/grub.cfg 文件,并生成新的iso镜像来用,对比了一下原版的grub.cfg,然后参考用 cd-iso 引导起来以后grub菜单里的内容。

以下新的 grub.cfg 经过在上述环境中以 ventoy 和 vmware cd-iso 中初步测试可用。

# /boot/grub/grub.cfg

set timeout=20

loadfont unicode

# 这是原有的
menuentry "Ubuntu Boot" {
    insmod part_gpt
    insmod part_msdos
    insmod fat
    insmod ntfs
    insmod iso9660

    search --no-floppy --set -f /boot/memtest86+.upe
    configfile /boot/grub/grub.cfg
}

# 这是新加的 只做了一项
menuentry "Ubuntu PE" {
    set gfxpayload=keep

    if [ -e /casper/vmlinuz ]; then
                true
    else
                search --no-floppy --set -f /casper/vmlinuz
    fi

    linux   /casper/vmlinuz boot=casper locale=zh_CN.UTF-8 
    initrd  /casper/initrd.img
}

这里只做了一项,所以我还想问问其他项可以在哪里直接找到?

ghostplant commented 9 months ago

应该就是这里,上述内容似乎也是只是用于启动官方Ubuntu,不能用于其他诸如Archlinux、SUSE等。 每个linux发行版的grub启动脚本都有少许差别,需要分别正确配置。Ubuntu PE的启动脚本前面已经发过了:(1)把 noble-mate-x86_64-20240209.iso 放到 USB 或者本地磁盘根目录;(2)通过启动脚本中: iso-scan/filename 来定位到、并引导 Ubuntu PE。

d0ng13 commented 9 months ago

这个问题我的解决方案就是这样了:

我观察了一下,这个差异应该是,本项目中完整的grub启动列表在 (iso)/[BOOT]/2-Boot-NoEmul.img 中存在(通过win下7zip打开iso看到),而非 (iso)/boot/grub/grub.cfg (相对常见位置),而ventoy的加载方式似乎对此兼容性不好?

官方ubuntu live-cd (ubuntu-22.04.2-desktop-amd64.iso)、Alpine (alpine-extended-3.19.1-x86_64.iso) 的方式是在 2-Boot-NoEmul.img 这个镜像文件里没有放置grub.cfg,kali (kali-linux-2023.4-live-amd64.iso)则用的是以下内容,这两种方案都没有问题。

search --set=root --file /live/initrd
set prefix=($root)/boot/grub
configfile ($root)/boot/grub/grub.cfg

我参考的 livecd 制作过程是这个 Create a Custom Debian Live Environment (CD or USB),里边提到了efiboot.img的制作(在 Create a FAT16 UEFI boot disk image containing the EFI bootloaders 位置,但也是偷工减料了),并比较了在 #42 中提到的那篇文章,收获颇多,并对本项目镜像的小巧表示惊叹。

ghostplant commented 7 months ago

即使不改任何config,似乎标准Ventoy的“Boot in grub2 mode”是可以成功启动,有试过吗?