核心价值与准备工作
制作自己的CentOS,其核心价值在于标准化、自动化和个性化,无论是用于企业内部服务器集群、软件开发环境,还是特定功能的安全设备,一个定制化的操作系统镜像都是坚实的基础。
在开始动手之前,充分的准备工作是成功的关键,您需要准备以下几项:
- 一台Linux主机:建议使用与目标系统版本相近的CentOS或RHEL系统,以确保工具链的兼容性,这台主机将作为我们的“制作工厂”。
- 官方CentOS ISO镜像:从CentOS官方网站下载您需要的版本的DVD ISO文件,这是所有定制工作的基础。
- 充足的磁盘空间:至少需要10GB的可用空间,用于存放ISO文件、解压后的内容以及最终生成的自定义镜像。
- 必要的工具集:确保系统中已安装
genisoimage
、createrepo
、isomaster
(可选,图形化工具)、anaconda
等软件包,可以通过yum
或dnf
进行安装: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
生成新的元数据。
修改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文件。genisoimage
或mkisofs
是完成此任务的工具。
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配置是否按预期执行、预装的软件包是否存在、以及安装后系统功能是否正常。
定制维度与实现方式小编总结
为了更清晰地理解定制化的不同层面,下表小编总结了主要的定制维度及其实现方法。
定制维度 | 实现方式 | 说明 |
---|---|---|
软件集合 | 增删Packages 目录下的RPM包,并运行createrepo 更新元数据。 | 决定最终系统中预装哪些应用程序和工具。 |
安装配置 | 编写或修改ks.cfg (Kickstart)文件,定义分区、网络、用户、时区等。 | 实现安装过程的完全自动化,无需人工干预。 |
系统外观 | 替换isolinux/splash.jpg 文件,修改引导菜单isolinux.cfg 。 | 提供个性化的启动界面和菜单选项,提升品牌感。 |
初始状态 | 在Kickstart的%post 脚本中执行命令,创建文件、启动服务等。 | 在安装完成后立即执行一系列配置,设定系统的初始状态。 |
相关问答FAQs
Q1: 我制作的自定义ISO无法启动,屏幕上显示“Boot failed”或类似错误,最可能的原因是什么?
A1: 这通常是由于ISO镜像的引导部分构建不正确导致的,请首先检查以下几点:
:确保 -b isolinux/isolinux.bin
、-c isolinux/boot.cat
和-no-emul-boot
等BIOS引导参数正确无误,如果需要UEFI引导,-e images/efiboot.img -no-emul-boot
参数也至关重要。- 文件完整性:确认
isolinux/
目录下的所有文件(特别是vmlinuz
和initrd.img
)都已完整地从官方ISO复制过来,且没有被意外修改或删除。 - 卷标一致性:
genisoimage
命令中的-V
参数设置的卷标,必须与Kickstart文件中inst.stage2=hd:LABEL=...
指定的卷标完全一致,大小写敏感。 :在某些情况下,生成ISO后可能需要使用 isohybrid
工具处理ISO镜像,以使其同时支持BIOS和UEFI模式在物理机上启动。
Q2: Kickstart文件中的%packages
和%post
部分有什么根本区别?
A2: 它们的根本区别在于执行时机和作用对象。
%packages
:此部分在安装过程中执行,它的作用是告诉Anaconda安装程序,要将哪些软件包(或软件包组)从安装源(ISO镜像)复制并安装到目标硬盘上,它定义的是最终操作系统的软件构成。%post
:此部分在所有软件包安装完成后、系统首次重启前执行,它运行的是一个chroot环境下的脚本,作用对象是已经安装到硬盘上的新系统,你可以在这里执行任何配置命令,如修改配置文件、创建用户、设置服务开机自启等,它定义的是操作系统的初始配置状态。
%packages
决定“装什么”,而%post
决定“装完之后做什么”,两者结合,才能实现一个功能完备、配置到位的自动化部署。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复