如何从零开始制作一个高度定制的CentOS系统镜像?

核心价值与准备工作

制作自己的CentOS,其核心价值在于标准化、自动化和个性化,无论是用于企业内部服务器集群、软件开发环境,还是特定功能的安全设备,一个定制化的操作系统镜像都是坚实的基础。

如何从零开始制作一个高度定制的CentOS系统镜像?

在开始动手之前,充分的准备工作是成功的关键,您需要准备以下几项:

  1. 一台Linux主机:建议使用与目标系统版本相近的CentOS或RHEL系统,以确保工具链的兼容性,这台主机将作为我们的“制作工厂”。
  2. 官方CentOS ISO镜像:从CentOS官方网站下载您需要的版本的DVD ISO文件,这是所有定制工作的基础。
  3. 充足的磁盘空间:至少需要10GB的可用空间,用于存放ISO文件、解压后的内容以及最终生成的自定义镜像。
  4. 必要的工具集:确保系统中已安装genisoimagecreaterepoisomaster(可选,图形化工具)、anaconda等软件包,可以通过yumdnf进行安装:
    sudo yum install genisoimage createrepo anaconda

定制化流程详解

整个制作过程可以分解为四个主要步骤:解压、定制、重构、测试。

第一步:解压官方ISO内容

我们需要将官方ISO文件中的所有内容提取到一个工作目录中,挂载ISO镜像并复制文件是标准操作。

# 创建工作目录
mkdir -p ~/centos-custom
cd ~/centos-custom
# 挂载官方ISO
sudo mount -o loop /path/to/official-centos.iso /mnt
# 复制所有文件到工作目录
sudo cp -r /mnt/* .
sudo cp -r /mnt/.discinfo .
# 卸载ISO
sudo umount /mnt

完成后,~/centos-custom目录就包含了官方ISO的全部内容,我们可以在此基础上进行修改。

第二步:核心定制工作

这是“制作自己的centos”的核心环节,主要包括软件包管理和安装配置自动化。

增删软件包

  • 添加自定义RPM包:将您预先准备的.rpm文件(例如公司内部应用、特定驱动程序)复制到Packages目录下。
    cp /path/to/your/custom.rpm ~/centos-custom/Packages/
  • 更新软件包元数据:添加或删除RPM包后,必须更新软件仓库的元数据,否则安装程序将无法识别这些变更。
    cd ~/centos-custom
    createrepo -g repodata/comps.xml .

    comps.xml文件定义了软件包组,createrepo会根据Packages生成新的元数据。

    如何从零开始制作一个高度定制的CentOS系统镜像?

修改Kickstart配置文件

Kickstart是实现无人值守安装的利器,通过一个预先写好的ks.cfg文件,可以自动完成所有安装步骤,在官方ISO中,通常位于isolinux/目录下或需要我们手动创建一个。

isolinux/isolinux.cfg文件中,可以指定启动时读取Kickstart文件:

label linux
  menu label ^Install Custom CentOS
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CustomCentOS inst.ks=cdrom:/isolinux/ks.cfg quiet

一个典型的ks.cfg文件包含以下关键部分:

# 版本信息
#version=RHEL8
# 安装语言
lang en_US.UTF-8
# 键盘布局
keyboard --vckeymap=us --xlayouts='us'
# 系统授权信息
auth --enableshadow --passalgo=sha512
# 网络配置(自动获取IP)
network --bootproto=dhcp --device=link --activate
# Root密码(建议使用加密后的密码)
rootpw --plaintext your_strong_password
# 许可协议
eula --agreed
# 禁用初次启动向导
firstboot --disable
# SELinux配置
selinux --enforcing
# 防火墙配置
firewall --enabled --service=ssh
# 系统时区
timezone Asia/Shanghai --isUtc --ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org
# 磁盘分区(自动分区)
autopart --type=lvm
# 清空MBR引导记录
zerombr
# 软件包选择
%packages
@core
@standard
wget
vim
git
# 在此添加你需要的其他软件包
%end
# 安装后脚本
%post --log=/root/ks-post.log
echo "Custom installation completed." > /etc/motd
# 在此执行安装后的配置命令,如启动服务、修改配置文件等
%end

第三步:重新生成ISO镜像

当所有定制工作完成后,我们需要将目录重新打包成一个可引导的ISO文件。genisoimagemkisofs是完成此任务的工具。

cd ~/centos-custom
genisoimage -J -r -V "CustomCentOS" -o /path/to/output/custom-centos.iso 
    -b isolinux/isolinux.bin 
    -c isolinux/boot.cat 
    -no-emul-boot -boot-load-size 4 -boot-info-table 
    -eltorito-alt-boot -e images/efiboot.img -no-emul-boot .

命令参数解释:

  • -J -r:使用Joliet和Rock Ridge扩展,增强兼容性。
  • -V "CustomCentOS":设置卷标,需与Kickstart文件中的inst.stage2参数一致。
  • -o:指定输出ISO文件的路径。
  • -b, -c, -no-emul-boot等:与BIOS引导相关的参数。
  • -e images/efiboot.img:支持UEFI引导的关键参数。

第四步:测试与验证

在将自定义ISO投入生产环境前,务必在虚拟机(如VirtualBox、VMware)中进行完整测试,检查系统是否能正常引导、Kickstart配置是否按预期执行、预装的软件包是否存在、以及安装后系统功能是否正常。

如何从零开始制作一个高度定制的CentOS系统镜像?


定制维度与实现方式小编总结

为了更清晰地理解定制化的不同层面,下表小编总结了主要的定制维度及其实现方法。

定制维度 实现方式 说明
软件集合 增删Packages目录下的RPM包,并运行createrepo更新元数据。 决定最终系统中预装哪些应用程序和工具。
安装配置 编写或修改ks.cfg(Kickstart)文件,定义分区、网络、用户、时区等。 实现安装过程的完全自动化,无需人工干预。
系统外观 替换isolinux/splash.jpg文件,修改引导菜单isolinux.cfg 提供个性化的启动界面和菜单选项,提升品牌感。
初始状态 在Kickstart的%post脚本中执行命令,创建文件、启动服务等。 在安装完成后立即执行一系列配置,设定系统的初始状态。

相关问答FAQs

Q1: 我制作的自定义ISO无法启动,屏幕上显示“Boot failed”或类似错误,最可能的原因是什么?

A1: 这通常是由于ISO镜像的引导部分构建不正确导致的,请首先检查以下几点:

  1. :确保-b isolinux/isolinux.bin-c isolinux/boot.cat-no-emul-boot等BIOS引导参数正确无误,如果需要UEFI引导,-e images/efiboot.img -no-emul-boot参数也至关重要。
  2. 文件完整性:确认isolinux/目录下的所有文件(特别是vmlinuzinitrd.img)都已完整地从官方ISO复制过来,且没有被意外修改或删除。
  3. 卷标一致性genisoimage命令中的-V参数设置的卷标,必须与Kickstart文件中inst.stage2=hd:LABEL=...指定的卷标完全一致,大小写敏感。
  4. :在某些情况下,生成ISO后可能需要使用isohybrid工具处理ISO镜像,以使其同时支持BIOS和UEFI模式在物理机上启动。

Q2: Kickstart文件中的%packages%post部分有什么根本区别?

A2: 它们的根本区别在于执行时机作用对象

  • %packages:此部分在安装过程中执行,它的作用是告诉Anaconda安装程序,要将哪些软件包(或软件包组)从安装源(ISO镜像)复制并安装到目标硬盘上,它定义的是最终操作系统的软件构成
  • %post:此部分在所有软件包安装完成后、系统首次重启前执行,它运行的是一个chroot环境下的脚本,作用对象是已经安装到硬盘上的新系统,你可以在这里执行任何配置命令,如修改配置文件、创建用户、设置服务开机自启等,它定义的是操作系统的初始配置状态

%packages决定“装什么”,而%post决定“装完之后做什么”,两者结合,才能实现一个功能完备、配置到位的自动化部署。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-06 23:52
下一篇 2025-10-06 23:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信