我正在尝试按照说明制作自动安装 Ubuntu ISO,但是无论我在定制 Ubuntu Server 22.04 ISO 期间如何修改配置文件linux
中的行,修改都会丢失。grub.cfg
我尝试修改原始菜单项:
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz ---
initrd /casper/initrd
}
将其设置为:
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/ ---
initrd /casper/initrd
}
然后重新打包 ISO。我使用这个命令livefs-edit
生成了新的 ISO 映像。如果我挂载该映像,我可以看到确实发生了更改,这也是livefs-edit
预期的更改。
但是,当我使用该映像启动虚拟盒 VM 时,该菜单项看起来完全不同,带有一堆其他参数,但我的参数却缺失。
setparams 'Try or Install Ubuntu Server'
set gfxpayload=keep
linux /casper/vmlinuz auto=true preseed/file=/cdrom/preseed.cfg priority=critical quiet splash noprompt noshell automatic-ubiquity ... ---
initrd /casper/initrd
有趣的是,如果我向中添加新的菜单项grub.cfg
,我会在启动期间看到该菜单项,但linux
无论我设置什么,参数看起来与上面的相同。
因此,看起来 ISO 打包期间有一个进程在运行,该进程将输入grub.cfg
作为输入,并生成在启动期间实际使用的工件(或者这可能发生在启动的早期阶段)。无论如何,无论这里发生什么,我的参数都消失了。
有什么方法可以实现我的目标吗?
答案1
我正在尝试做类似的事情,但目标是托管在 M1 Mac 上的 VMWare Fusion VM。在尝试解决我的问题时,我可能偶然发现了您的问题的解决方案。
我无法让 livefs-edit 工作,因为它依赖于“losetup”,而这在 macOS 上不可用。无论如何,这个阻止程序让我陷入了重新制作可启动 ISO 的困境。假设您熟悉提取 ISO、创建 cloud-init 数据和修改 grub 配置的所有其他步骤,xorriso 将从组合中移除 livefs-edit 并生成带有自动安装菜单项的可启动 ISO。
xorriso -as mkisofs \
--modification-date='2021101314195100' \
--grub2-mbr \
--interval:local_fs:0s-15s:zero_mbrpt,zero_gpt:"${ORIGINAL_ISO_PATH}" \
--protective-msdos-label \
-partition_cyl_align off \
-partition_offset 16 \
--mbr-force-bootable \
-append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b \
--interval:local_fs:2470124d-2478587d::"${ORIGINAL_ISO_PATH}" \
-part_like_isohybrid \
-iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
-c '/boot.catalog' \
-b '/boot/grub/i386-pc/eltorito.img' \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--grub2-boot-info \
-eltorito-alt-boot -e \
'--interval:appended_partition_2_start_617531s_size_8464d:all::' \
-no-emul-boot \
-boot-load-size 8464 \
-isohybrid-gpt-basdat \
-o ubuntu-autoinstall.iso \
-V 'Ubuntu autoinstall' ${EXTRACTED_ISO_PATH}
希望这能帮你解决问题。对我来说,我认为启动分区或启动映像方面有些我还不理解。对于 *arm64.iso,其中没有 eltorito.img,所以我认为这两行接近我的问题的根源。
-c '/boot.catalog' \
-b '/boot/grub/i386-pc/eltorito.img' \