制作自定义linux安装iso需三步:解包原始iso并排除大文件、注入定制软件包与自动化配置文件(如ks.cfg)、用genisoimage重建带el torito引导的新镜像,全程命令行操作且须保持引导结构与路径大小写一致。

制作自定义 Linux 系统安装镜像,核心是“修改原始 ISO → 添加定制内容 → 重建可启动 ISO”。整个过程不依赖图形界面,命令行即可完成,关键在于保留引导结构、正确配置启动参数和确保文件系统一致性。
明确目标再动手
先确认你要做的镜像是什么类型:
- 是用于裸机或虚拟机的 可启动安装 ISO(如带无人值守安装的 CentOS/Ubuntu 定制版)?
- 还是用于云平台或容器的 运行时镜像(如 QCOW2 或 Docker 镜像)?
本文聚焦前者——即传统.iso安装镜像,适用于 VMware、VirtualBox 或物理机安装。
挂载并复制原始镜像文件结构
ISO 是只读文件,必须解包后修改。以 CentOS/RHEL 或 Ubuntu 为例:
mkdir /mnt/orig /mnt/custom
mount -o loop original.iso /mnt/orig
rsync -a --exclude='Packages/' --exclude='repodata/' /mnt/orig/ /mnt/custom/
mkdir -p /mnt/custom/{Packages,repodata}
注意:rsync -a 保留权限与符号链接;--exclude 避免一次性复制海量 RPM 包(后续按需添加)。
注入定制内容与自动化安装逻辑
真正体现“自定义”的部分在这里:
- 把预装软件包(如
vim-enhanced.rpm、git.x86_64.rpm)放进/mnt/custom/Packages/ - 编写
ks.cfg(Kickstart 文件),放在/mnt/custom/isolinux/ks.cfg(CentOS/RHEL)或/mnt/custom/preseed.cfg(Debian/Ubuntu) - 修改
/mnt/custom/isolinux/isolinux.cfg,在append行末尾加上:inst.ks=cdrom:/isolinux/ks.cfg(RHEL系)或autoinstall ds=nocloud;s=/cdrom/(Ubuntu 22.04+) - 若需更换内核参数(如禁用 SELinux 或设置静默安装),直接编辑该
append行,例如追加selinux=0 inst.text
重建 ISO 并验证可启动性
使用 genisoimage(或较新系统推荐 xorriso)生成新镜像:
genisoimage \ -joliet-long -r -v -V "MyCustom-CentOS7" \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -o custom-install.iso /mnt/custom/
生成后务必检查:
-
file custom-install.iso应显示 “ISO 9660” 和 “El Torito” 可启动标识 - 用
isoinfo -d -i custom-install.iso | grep -i boot确认 El Torito 引导记录存在 - 在 VM 中测试启动,看是否自动加载 ks.cfg 或进入预期安装流程
注意事项与常见雷区
- 不要手动修改
/mnt/custom/isolinux/isolinux.bin或/mnt/custom/isolinux/boot.cat—— 它们由syslinux工具生成,替换会破坏引导 - 所有路径名区分大小写,
ks.cfg必须小写,isolinux.cfg中引用路径需与实际一致(如cdrom:/isolinux/ks.cfg) - 若原镜像支持 UEFI(含
EFI/BOOT/BOOTx64.EFI),重建时需额外加入 UEFI 相关参数,例如-eltorito-alt-boot -e EFI/BOOT/BOOTx64.EFI -no-emul-boot -
/etc/fstab中 root 分区务必用UUID=而非/dev/sda1,否则在不同硬件上可能无法挂载
不复杂但容易忽略。











