目的:重新打包ISO以达到无需人工干预,自动安装系统
准备工作
准备好需要的ISO镜像
[root@localhost ~]# ll /data/CentOS-7-x86_64-DVD-1810-Hygon-v7.iso
-rw-r--r--. 1 root root 4649385984 Dec 17 03:31 /data/CentOS-7-x86_64-DVD-1810-Hygon-v7.iso
创建目录
mkdir -p /data/{centos7,centos7_rw}
# ISO文件只能以只读方式挂载,想要修改,需要复制到另一个目录,所以此处创建两个目录
# centos7目录用来挂载ISO镜像,centos7_rw用来修改镜像
准备ks文件
ks文件获取方式有两种
1.到已经安装好的机器上,复制anaconda-ks.cfg
2.使用system-config-kickstart生成ks文件。system-config-kickstart需要安装,一般系统没有自带,这个安装包在base源。
3.使用system-config-kickstart需要安装system-config-kickstart
cp anaconda-ks.cfg /data/centos7_rw/ks.cfg
修改ks.cfg文件
安装完成自动重启
可在任意地方加入reboot (此选项的意义是安装完成后自动重启)
网络设置
可以设置是否启用网卡,是否dhcp获得ip,是否激活网卡等等。
如果要保持默认可以删除关于 Network information 的配置
分区设置
# Disk partitioning information
part / --fstype="ext4" --ondisk=sda --size=455784
part /boot --fstype="ext4" --ondisk=sda --size=1024
根目录的size可以设置为"1", 加上--grow参数,此参数的意义是:除了其他分区占用的空间外,占用所有空间。
这里的数字不要设置太大,即使设置了--grow参数,如果值超过了分区大小,启动过程会报错。默认单位是M
ks示例文件:
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# Root password 此处密码为"1"
rootpw --iscrypted $1$k12Ervwf$BD4816b4.BrNT1HrZZkcu/
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use text mode install 文本界面安装
text
# Run the Setup Agent on first boot
firstboot --enable
# SELinux configuration 关闭selinux
selinux --disabled
# Do not configure the X Window System
skipx
# System services 设置chrony服务开机启动
services --enabled="chronyd"
ignoredisk --only-use=sda
# Firewall configuration 关闭防火墙
firewall --disabled
# Reboot after installation 安装完成自动重启
reboot
# System timezone 设置时区
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information 如果有系统,加了这一行,会清空系统
clearpart --all --initlabel --drives=sda
# Disk partitioning information 分区策略
part / --fstype="xfs" --grow --ondisk=sda --size=4
part /boot --fstype="ext4" --ondisk=sda --size=1024
############ 安装完成后运行的脚本,如果没有需求,可以删除下面的脚本 ############
%post
cat >> /root/a.sh <<'EOF'
#!/bin/bash
read -p "please input IP [11.23]: " ip
eth1=enp66s0f0
eth2=enp66s0f1
IPADDR=172.16
modprobe --first-time bonding
function makebond() {
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<EOF
TYPE=bond
BOOTPROTO=none
NAME=bond0
DEVICE=bond0
IPADDR=${IPADDR}.${ip}
NETMASK=255.255.0.0
GATEWAY=${IPADDR}.1.1
DNS1=114.114.114.114
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="miimon=100 mode=4 xmit_hash_policy=layer3+4"
EOF
cp /etc/sysconfig/network-scripts/ifcfg-${eth1}{,.backup}
cp /etc/sysconfig/network-scripts/ifcfg-${eth2}{,.backup}
cat > /etc/sysconfig/network-scripts/ifcfg-${eth1} << EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=${eth1}
DEVICE=${eth1}
MASTER=bond0
SLAVE=yes
ONBOOT=yes
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-${eth2} << EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=${eth2}
DEVICE=${eth2}
MASTER=bond0
SLAVE=yes
ONBOOT=yes
EOF
}
makebond
EEEEOF
%end
############ 安装后脚本结束 ############
# 要安装的软件包
%packages
@^minimal
@core
chrony
%end
挂载ISO镜像
mount -o loop /data/CentOS-7-x86_64-DVD-1810-Hygon-v7.iso /data/centos7
复制所有文件到可写目录
cp -a /data/centos7/* /data/centos7_rw/
ll [root@localhost ~]# ll /data/centos7_rw/
total 332
-rw-r--r--. 1 root root 837 Dec 17 04:28 bond.sh
-r--r--r--. 1 root root 2048 Oct 26 2019 boot.cat
-r--r--r--. 1 root root 14 Nov 26 2018 CentOS_BuildTag
dr-xr-xr-x. 3 root root 35 Nov 26 2018 EFI
-r--r--r--. 1 root root 227 Aug 30 2017 EULA
-r--r--r--. 1 root root 18009 Dec 10 2015 GPL
dr-xr-xr-x. 3 root root 57 Nov 26 2018 images
dr-xr-xr-x. 2 root root 198 Dec 17 04:49 isolinux
-rw-r--r--. 1 root root 1325 Dec 17 04:49 ks.cfg
dr-xr-xr-x. 2 root root 43 Nov 26 2018 LiveOS
dr-xr-xr-x. 2 root root 225280 Oct 26 2019 Packages
dr-xr-xr-x. 2 root root 4096 Oct 26 2019 repodata
-r--r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
-r--r--r--. 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root 3103 Oct 26 2019 TRANS.TBL
开始制作
修改isolinux.cfg
vim /data/centos7_rw/isolinux/isolinux.cfg
label linux
menu label ^Install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ks=cdrom:/ks.cfg
label check
menu label Test this ^media & install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
# 此文件第二行 timeout 600 ,此选项作用是超时时间,默认60秒。
# 删除check标签下的menu default选项,在linux标签里添加menu default,这个选项的意思是,开机以后,光标默认在那个label上(超时后会自动进入)
# 在linux标签下的append选项最后,加入 ks=cdrom:/ks.cfg
# 此文件为只读文件,所以退出时,需要:wq!
打包ISO
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 7 x86_64" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /data/centos7.iso /data/centos7_rw/
# /data/centos7_rw/ # 要打包的文件根目录
# /data/centos7.iso # 输出文件的路径
# -V "CentOS 7 x86_64" # 光盘的标签
-R 使用Rock Ridge Extensions
-J 使用Joliet格式的目录与文件名称。
-T 建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上。
-v 执行时显示详细的信息
--boot-load-size设置加载扇区数
-V 指定光盘的卷册集ID
-b 指定在制作可开机光盘时所需的开机映像文件。
-c 制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件。
-o 指定映像文件的名称。