以 CentOS 系统为例,以下是封装一个无人值守安装的 Linux 操作系统镜像的一般步骤:
一、准备工作
- 安装源:下载 CentOS 官方镜像文件,可从CentOS 官方网站获取。
- 工具软件:安装createrepo(用于创建软件仓库元数据)、syslinux(用于制作可引导的 ISO 镜像)等工具。在 CentOS 上可以使用以下命令安装:
yum install -y createrepo syslinux
二、配置自动应答文件
1.安装 Anaconda 工具:Anaconda 是 CentOS 安装程序使用的工具,通过它可以生成自动应答文件。如果系统中没有安装,可使用以下命令安装:
yum install -y system-config-kickstart
2.生成自动应答文件:使用system-config-kickstart命令打开图形化的 Kickstart 配置工具,根据提示配置系统安装选项,包括分区设置、软件包选择、网络配置、用户设置等。配置完成后,将自动应答文件保存为ks.cfg,通常放在/root目录下。
三、定制镜像
1.挂载原始镜像:创建一个挂载点,例如/mnt/iso,然后将下载的mkdir /mnt/iso
mount -o loop /home/CentOS-7-x86_64-DVD-2207-02.iso /mnt/iso
2.复制镜像内容:创建一个工作目录,如/tmp/centos-ks,将挂载的镜像内容复制到该目录:
mkdir /tmp/centos-ks
cp -rf /mnt/iso/* /tmp/centos-ks/
3.添加自动应答文件:将生成的ks.cfg文件复制到镜像的isolinux目录下(对于 CentOS 7 及以下版本)或EFI/BOOT目录下(对于 CentOS 8 及以上版本)。同时,在相应的启动配置文件中(如isolinux.cfg或grub.cfg)添加启动参数,指定自动应答文件的位置。例如,在isolinux.cfg中添加以下内容:
label linux
menu label ^Install CentOS
kernel vmlinuz
append initrd=initrd.img inst.ks=hd:LABEL=CentOS\x207\x20x86_64:/ks.cfg quiet
这里假设镜像的卷标为CentOS 7 x86_64,根据实际情况修改。
4.更新软件仓库元数据:进入镜像的软件包目录(通常是/tmp/centos-ks/Packages),使用createrepo命令更新软件仓库元数据:
cd /tmp/centos-ks/Packages
createrepo .
四、制作新的镜像
1.生成 ISO 镜像:使用mkisofs命令制作新的 ISO 镜像,例如:
cd /tmp/centos-ks
mkisofs -o /home/CentOS-7-x86_64-DVD-2207-auto.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R -v -T .
此命令会根据当前目录下的内容生成一个新的 ISO 镜像,指定了引导文件和相关参数。
mkisofs命令参数解析:
这是用于创建 ISO 9660 文件系统镜像的工具,部分系统也将其称为 genisoimage,它们的功能基本一致。
-o /home/CentOS-7-x86_64-DVD-2207-auto.iso
-o 属于输出(output)参数,它用于指定生成的 ISO 镜像文件的保存路径和文件名。CentOS-7-x86_64-DVD-2207-auto.iso 是需要替换成实际路径和文件名的部分,例如 /home/user/new-centos.iso。
-b isolinux/isolinux.bin
-b 代表引导文件(boot image),其作用是指定用于引导的二进制文件。isolinux/isolinux.bin 是引导文件的相对路径,isolinux.bin 是 ISOLINUX 引导加载程序的主文件,此文件能够让 ISO 镜像具备可引导的特性。
-c isolinux/boot.cat
-c 用于指定引导目录(boot catalog)文件。isolinux/boot.cat 是引导目录文件的相对路径,这个文件会记录引导相关的信息,协助系统在启动时正确识别引导选项。
-no-emul-boot
该参数表明不使用模拟磁盘的方式进行引导。在创建可引导的 ISO 镜像时,通常不需要模拟磁盘,所以要加上这个参数。
-boot-load-size 4
此参数用于指定引导扇区加载的扇区数量。4 意味着加载 4 个扇区,一般来说,这个值是 4 就能够保证引导程序正常加载。
-boot-info-table
这个参数的作用是在 ISO 镜像里创建一个引导信息表,该表包含了引导扇区的位置等关键信息,有助于引导程序准确找到引导扇区。
-J
-J 代表 Joliet 格式,它允许在 ISO 镜像中使用长文件名和 Unicode 字符。Joliet 是 ISO 9660 文件系统的扩展,能增强文件名的兼容性。
-R
-R 表示使用 Rock Ridge 扩展,它允许在 ISO 镜像中保留 Unix 文件系统的权限、用户和组信息等。Rock Ridge 扩展同样是对 ISO 9660 文件系统的扩展,能让 ISO 镜像更好地兼容 Unix 系统。
-v
-v 是详细模式(verbose)参数,开启该参数后,mkisofs 会在创建镜像的过程中输出详细的日志信息,方便你了解创建的进度和状态。
-T
-T 代表 Translate,它会将文件的权限信息转换为 ISO 9660 标准的权限信息,从而保证镜像在不同系统上的兼容性。
.
这是输入目录参数,. 代表当前目录,也就是 /tmp/centos-ks 目录。mkisofs 会把这个目录下的所有文件和子目录都打包到 ISO 镜像中。
综上所述,这个命令的功能是将 /tmp/centos-ks 目录下的内容制作成一个可引导的 ISO 镜像文件,并且保存在/home/CentOS-7-x86_64-DVD-2207-auto.iso位置。
2.验证镜像:将生成的镜像刻录到光盘或制作成 USB 启动盘,然后在虚拟机或物理机上进行测试,确保系统能够无人值守地自动安装。
对于其他 Linux 发行版,如 Ubuntu 等,也有类似的方法,但具体的工具和步骤可能会有所不同。例如,Ubuntu 可以使用ubiquity-slideshow-ubuntu等工具来配置自动安装文件,然后使用xorriso等工具制作镜像。