1.安装自定义镜像工具
1.1安装
yum -y install createrepo mkisofs openssl rsync syslinux
2.挂载镜像
2.1创建挂载点
mkdir /mnt/cdrom
2.2挂载
# 上传镜像到/home/baseISO目录下
mount -o loop /home/baseISO/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom/
2.3同步
同步/mnt/cdrom/下的文件到/home/ISO/
mkdir /home/ISO
/usr/bin/rsync -a /mnt/cdrom/ /home/ISO/
3.ks.cfg文件自定义
3.1复制ks.cfg文件
cp /root/anaconda-ks.cfg /root/ks.cfg
3.2密码生成
# -1: md5加密
# -salt: 加盐
# 盐: Wkajs
# pass: password
openssl passwd -1 -salt Wkajs password
3.3编辑ks.cfg文件
# vim /root/ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --enablemd5
# Use CDROM installation media
cdrom
# Use graphical install 图形化界面式安装
# graphical
# Use text install 文本式安装
text
# Run the Setup Agent on first boot
firstboot --enable
# 启用会忽略其他硬盘
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=eth0 --ipv6=auto --activate
network --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $1$8q7ORxjl$v8yGB70WIHiLjNcaJRdCh.
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# Partition clearing information
clearpart --all --initlabel
# System bootloader configuration
bootloader --append=" crashkernel=512M " --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
%addon com_redhat_kdump --enable --reserve-mb='512M'
%end
part /boot --asprimary --fstype="ext4" --size=500 --ondisk=sda
# uefi模式需要
part /boot/efi --asprimary --fstype="efi" --size=120 --ondisk=sda
#----------------------以下是创建lvm逻辑卷---------------------
# 创建第一个物理卷PV分区,序号是01,大小为剩余所有空间
# --size=1 --grow参数是以剩余所有空间来分区
part pv.01 --size=1 --grow --ondisk=sda
# 创建一个逻辑卷组名,名字为vg_sytem,包含在物理卷PV.01
volgroup virt pv.01
# 创建一个LV逻辑卷,挂载到/ ,从vg_system组中创建,大小为10000M,LV的名字是lv_root
logvol / --fstype="ext4" --vgname=virt --size=1 --grow --name=vg-root
# 创建第二个物理卷PV分区,序号是02,大小为剩余所有空间
#part pv.02 --size=1 --grow --ondisk=sdb
#创建一个逻辑卷组名,名字为vg_mvtech,包含在物理卷PV.02
#volgroup data pv.02
#创建一个LV逻辑卷,挂载到/data ,从vg_data组中创建,LV的名字是lv_data
#logvol /data --fstype="ext4" --vgname=vg_data --size=1 --grow --name=volume-data
# 最小化安装
%packages
@^minimal
@core
kexec-tools
%end
reboot
4.ISO文件目录
4.1目录
# tree /home/ISO/ -d
/home/ISO/
├── EFI
│ └── BOOT
│ └── fonts
├── images
│ └── pxeboot
├── isolinux
├── LiveOS
├── Packages
└── repodata
4.2复制ks.cfg到isolinux
cp /root/ks.cfg /home/ISO/isolinux
4.3修改isolinux.cfg文件
# vim /home/ISO/isolinux/isolinux.cfg
label linux
menu label ^Install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/isolinux/ks.cfg net.ifnames=0 biosdevname=0 quiet
describe:
net.ifnames=0 biosdevname=0 禁用自动设备命名规则,恢复传统的
ethx设备名称
5.生成iso文件
5.1制作iso仅支持传统的BIOS启动
# mkisofs制作
mkisofs \
-o CentOS-7-9.iso \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
-boot-info-table -R -J -v -T /home/ISO
此命令创建了一个基本的ISO镜像,主要用于传统的BIOS启动:
-b isolinux/isolinux.bin
指定了BIOS引导加载程序。-c isolinux/boot.cat
提供了引导目录。-R -J
保证了Rock Ridge和Joliet扩展,支持Linux文件属性和长文件名。-T
设置时间戳为协调世界时。-v
提供了详细的输出信息。-T /home/ISO
指定了要打包的目录。
5.2制作iso兼容UEFI和BIOS启动
使用mkisofs制作
# mkisofs制作
mkisofs \
-o /home/ISO/CentOS-7-9.iso \
-v -cache-inodes -joliet-long -R -J -T -V centos7 -c isolinux/boot.cat -b isolinux/isolinux.bin \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-eltorito-alt-boot \
-b images/efiboot.img \
-no-emul-boot /home/ISO
这个命令不仅包含了上述的基本功能,还额外添加了对EFI引导的支持:
-cache-inodes
可能用于加速ISO创建过程。-joliet-long
明确指出了使用Joliet长文件名。-V centos7
设置了ISO的卷标为centos7。-eltorito-alt-boot
和-b images/efiboot.img
表示创建一个用于EFI引导的El Torito替代引导条目,efiboot.img
是EFI系统的引导映像。- 其他参数如
-R
,-J
,-T
,-c isolinux/boot.cat
,-b isolinux/isolinux.bin
,-no-emul-boot
,-boot-load-size 4
,-boot-info-table
与第一个命令相同,但在这个上下文中与EFI支持相结合。
genisoimage 制作
# genisoimage 制作
genisoimage \
-joliet-long \
-o CentOS-7-9.iso \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
-boot-info-table -R -J -v -cache-inodes -T -eltorito-alt-boot \
-e images/efiboot.img -no-emul-boot /home/ISO
这条命令是使用
genisoimage
工具来创建一个兼容传统BIOS和UEFI启动方式启动的ISO镜像文件,具体参数含义如下:
-joliet-long
: 启用Joliet扩展以支持长文件名。Joliet是一种ISO 9660扩展,允许在ISO镜像中使用长达103个字符的文件名,支持Unicode字符集,提高了文件名的国际化能力。加上-Long
表示使用最长文件名限制。
-o CentOS-7-9.iso
: 指定输出的ISO镜像文件名为CentOS-7-9.iso
。
-b isolinux/isolinux.bin
: 设置ISO的引导扇区文件为isolinux/isolinux.bin
。这是在传统BIOS环境下用于启动安装程序的引导加载器。
-c isolinux/boot.cat
: 指定ISO的目录文件(Catalog文件)为isolinux/boot.cat
,该文件包含了ISO中文件的索引信息,有助于启动时快速定位文件。-no-emul-boot: 禁用模拟引导模式,直接使用原始的引导扇区格式,而非模拟软盘或硬盘的引导方式。
-boot-load-size 4: 设置引导加载扇区的大小为4个扇区。引导加载扇区的数量决定了引导加载程序的大小,这里通常足够装载大部分引导加载程序。
-boot-info-table: 在ISO中包含一个引导信息表,该表提供了启动菜单等信息,对于自定义引导流程很有用。
-R: 启用Rock Ridge扩展,使得ISO镜像可以包含Unix/Linux文件系统的特性,如权限、符号链接等。
-J: 启用Joliet文件系统支持,与前面的
-jolet-long
一起确保长文件名支持。-v: 详细模式,输出更多操作过程中的信息,方便监控和调试。
-cache-inodes: 使用inode缓存,可能提高ISO创建时的效率,特别是在文件系统中有很多小文件的情况下。
-eltorito-alt-boot: 添加一个替代的El Torito引导条目,这是为了支持EFI引导。通常用于UEFI启动,因为EFI系统需要一个特定的引导文件来启动。
**-e images/efiboot.img: 指定EFI引导映像文件为
images/efiboot.img
,这是EFI系统启动所需的引导加载程序。-no-emul-boot: 再次禁用模拟引导,对于EFI部分也是适用的。
/home/ISO
: 指定ISO镜像中包含的文件和目录的来源路径,所有这个目录下的内容将会被打包进ISO。
要兼容uefi模式需修改文件
# vim EFI/BOOT/grub.cfg
# 修改内容
menuentry 'Install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz ks=cdrom:/isolinux/ks.cfg net.ifnames=0 biosdevname=0 quiet
initrdefi /images/pxeboot/initrd.img
}
#下面内容可注释,只保留当前install选项
...
5.3Hybird模式
isohybrid -v /home/ISO/CentOS-7-9.iso
notice:
isohybrid command not found,需要安装syslinux.命令: yum -y install syslinux
describe:
采用“hybird模式”(混合模式),操作系统可以直接刻录成物理光盘,也可以直接做成可引导的U盘
这个命令是用来使ISO镜像具有“Hybrid”特性。Hybrid ISO镜像是一种特殊的ISO格式,它结合了传统ISO 9660 CD/DVD镜像的特性与可引导USB闪存盘(USB闪存盘)的特性。执行这个命令后,位于/home/ISO/
目录下的CentOS-7-9.iso
镜像会被修改,使其既可以像常规ISO那样被刻录到光盘使用,也能够直接写入USB闪存盘并从USB设备引导启动。
Hybrid ISO的主要优势在于灵活性和兼容性,它使得同一份ISO镜像在多种介质和启动方式下都能工作,无需用户额外制作USB启动盘或光盘的特定版本。这对于系统部署、应急恢复或没有物理光驱的现代设备尤其有用。