我按照 Ubuntu 文档中的步骤进行操作https://help.ubuntu.com/community/LiveCDInternetKiosk
我尝试用 xorriso 替换使用 mkisofs 的最后一步,但没有帮助。我的 USB 无法读取,我得到空白提示。我认为它可能与文件系统有关(隐藏的 NTFS/FAT 而不是 VFAT),但使用 cfdisk 更改它并不能解决问题。分区表是“dos”,看起来不错,/dev/sdb1 处于活动状态,即可启动。原始 .iso 映像是新的 Ubuntu 服务器 17.10,修改后的映像是使用 dd 复制的。修改后的版本中的系统文件未受影响。
如果我随后尝试在 USB 上安装 syslinx(syslinux -i /dev/sdb),我会出现以下错误:“syslinux:无效的媒体签名(不是 FAT/NTFS 卷?)”
如果我使用 unetbootin 将 .iso 上传到 USB,系统加载正常。我只需执行 isolinux -> sysline 重命名即可避免 unetbootin 的默认启动提示。
我希望能够编写这最后一步的脚本,而根本不使用 X 或用户交互。
一些相关步骤:
sudo rm extract-cd/casper/filesystem.squashfs
sudo mksquashfs edit extract-cd/casper/filesystem.squashfs
sudo chmod a+w extract-cd/casper/filesystem.size
printf $(sudo du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size
cd extract-cd
sudo rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v syslinux/boot.cat | sudo tee md5sum.txt
cd ..
xorriso -as mkisofs \
-o xgogi.iso \
-isohybrid-mbr /usr/lib/SYSLINUX/mbr.bin \
-c syslinux/boot.cat \
-b syslinux/syslinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
extract-cd/
#copy to USB works, needs X
sudo unetbootin lang=en method=diskimage isofile=xgogi.iso installtype=USB targetdrive=/dev/sdb1 autoinstall=yes
# doesn't work and I am badly frustrated why
sudo dd bs=4M if=gogi.iso of=/dev/sdb
答案1
正如您所发现的,您需要一个专门准备的 MBR 作为 xorriso 的输入。它有一项不寻常的工作,即在 ISO 中查找并启动程序“isolinux.bin”。
SYSLINUX 项目提供了一个合适的 MBR,名称为“isohdpfx.bin”。Debian 二进制包“isolinux”将其作为 /usr/lib/ISOLINUX/isohdpfx.bin 。
尽管 SYSLINUX 的开发很少,但应注意仅将兼容版本的 isohdpfx.bin 和 isolinux.bin 组合在一起。因此,在修改 ISO 并保留其文件 isolinux.bin 时,最好从该 ISO 中提取前 432 个字节并将其用作 MBR 输入。(复制第一个块的所有 512 个字节不会造成任何损害。xorriso 将用适当的值覆盖多余的字节。)
答案2
我的 mbr.bin 不正确。相反,我必须从原始 .iso 创建一个新文件。如下所示:
$ sudo dd if=ubuntu-16.04-desktop-amd64.iso bs=512 count=1 of=custom-iso/isolinux/isohdpfx.bin
在这篇精彩的文章中发现: https://linuxconfig.org/legacy-bios-uefi-and-secureboot-ready-ubuntu-live-image-customization