求助:使用xorriso制作带自定义Grub配置与自动安装文件的Ubuntu 20.04.2 Live Server ISO
我折腾了一整天试图让xorriso正常工作,目的是修改Ubuntu 20.04.2 Live Server AMD64 ISO的grub.cfg,同时加入自定义的user-data和meta-data文件来测试自动安装功能,没想到这事比想象中难太多了。
以下是我执行xorriso -indev ubuntu-20.04.2-live-server-amd64.iso -report_el_torito as_mkisofs得到的输出:
xorriso : NOTE : Loading ISO image tree from LBA 0 xorriso : UPDATE : 721 nodes read in 1 seconds xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded Drive current: -indev 'ubuntu-20.04.2-live-server-amd64.iso' Media current: stdio file, overwriteable Media status : is written , is appendable Boot record : El Torito , MBR isohybrid cyl-align-on GPT APM Media summary: 1 session, 593344 data blocks, 1159m data, 421g free Volume id : 'Ubuntu-Server 20.04.2 LTS amd64' -V 'Ubuntu-Server 20.04.2 LTS amd64' --modification-date='2021020117574100' -isohybrid-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt,zero_apm:'ubuntu-20.04.2-live-server-amd64.iso' -partition_cyl_align on -partition_offset 0 -partition_hd_cyl 73 -partition_sec_hd 32 --mbr-force-bootable -apm-block-size 2048 -iso_mbr_part_type 0x00 -c '/isolinux/boot.cat' -b '/isolinux/isolinux.bin' -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e '/boot/grub/efi.img' -no-emul-boot -boot-load-size 8000 -isohybrid-gpt-basdat -isohybrid-apm-hfsplus Version information: xorriso 1.5.2 ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program Copyright (C) 2019, Thomas Schmitt <scdbackup@gmx.net>, libburnia project. xorriso version : 1.5.2 Version timestamp : 2019.10.26.180001 Build timestamp : -none-given- libisofs in use : 1.5.2 (min. 1.5.2) libjte in use : 2.0.0 (min. 2.0.0) libburn in use : 1.5.2 (min. 1.5.2) libburn OS adapter: internal GNU/Linux SG_IO adapter sg-linux libisoburn in use : 1.5.2 (min. 1.5.2) Provided under GNU GPL version 3 or later, due to libreadline license.
我正在尝试制作一个包含自定义Grub启动选项、user-data和meta-data的修改版启动ISO,参考了一份制作Ubuntu自动安装ISO的教程,但现在完全卡住了,有人能帮我一下吗?谢谢!
解决方案步骤
别着急,我之前也折腾过这个,给你一套一步步的操作流程,应该能解决你的问题:
1. 提取原ISO内容到本地工作目录
首先把原ISO的所有文件提取到一个本地文件夹,方便修改:
mkdir -p ubuntu-iso-working xorriso -osirrox on -indev ubuntu-20.04.2-live-server-amd64.iso -extract / ubuntu-iso-working
2. 修改Grub配置文件
进入Grub配置目录,编辑grub.cfg添加自动安装的启动选项:
cd ubuntu-iso-working/boot/grub
打开grub.cfg,在合适的位置(比如原有的Ubuntu Server菜单之后)添加自定义启动项:
menuentry "Ubuntu Server 自动安装" { set gfxpayload=keep linux /casper/vmlinuz quiet autoinstall ds=nocloud;s=/cdrom/nocloud/ --- initrd /casper/initrd }
这里的ds=nocloud;s=/cdrom/nocloud/是关键,它告诉系统从ISO的nocloud目录读取自动安装配置文件。
3. 创建自动安装配置文件
在工作目录下创建nocloud文件夹,放入user-data和meta-data:
mkdir -p ../nocloud # meta-data必须存在,哪怕是空文件 touch ../nocloud/meta-data
然后编辑user-data,写入你的自动安装配置(示例如下,根据你的需求修改):
cat > ../nocloud/user-data << EOF #cloud-config autoinstall: version: 1 identity: hostname: my-ubuntu-server # 用mkpasswd -m sha-512生成密码哈希,替换下面的内容 password: "\$6\$rounds=4096\$abcdefg\$xxxxxxx" username: admin # 磁盘分区配置(示例为全盘自动分区) storage: layout: name: lvm # 安装后要安装的软件包 packages: - openssh-server # 启用SSH并允许密码登录(按需调整) ssh: allow-pw: true install-server: true EOF
注意:密码哈希要用mkpasswd -m sha-512命令生成,不要直接写明文密码。
4. 用xorriso重新打包ISO
这一步最关键,必须保留原ISO的所有启动参数(就是你之前用-report_el_torito as_mkisofs得到的那些),只需要调整输出路径和工作目录:
cd ../../ xorriso -as mkisofs \ -V 'Ubuntu-Server 20.04.2 LTS amd64' \ --modification-date='2021020117574100' \ -isohybrid-mbr --interval:local_fs:0s-15s:zero_mbrpt,zero_gpt,zero_apm:'ubuntu-20.04.2-live-server-amd64.iso' \ -partition_cyl_align on \ -partition_offset 0 \ -partition_hd_cyl 73 \ -partition_sec_hd 32 \ --mbr-force-bootable \ -apm-block-size 2048 \ -iso_mbr_part_type 0x00 \ -c '/isolinux/boot.cat' \ -b '/isolinux/isolinux.bin' \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -eltorito-alt-boot \ -e '/boot/grub/efi.img' \ -no-emul-boot \ -boot-load-size 8000 \ -isohybrid-gpt-basdat \ -isohybrid-apm-hfsplus \ -o ubuntu-20.04.2-autoinstall.iso \ ubuntu-iso-working
执行完这个命令后,当前目录下的ubuntu-20.04.2-autoinstall.iso就是你需要的修改版ISO了。
常见问题排查
- 如果ISO无法引导,检查
grub.cfg里的路径是否正确,比如/casper/vmlinuz和/casper/initrd是否存在于工作目录中 - 确保
user-data的YAML格式正确,比如缩进、引号都要符合规范,可以用在线YAML校验工具检查 - 打包时不要遗漏任何原ISO的启动参数,尤其是
-isohybrid相关的选项,否则可能无法同时支持BIOS和UEFI引导
备注:内容来源于stack exchange,提问作者Forrest Aldrich

