一、知识补充
kickstart
Kickstart是一种用于Linux系统安装的自动化工具,它通过一个名为ks.cfg的配置文件来定义Linux安装过程中的各种参数和设置。
kickstart的工作原理
Kickstart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件。在随后的安装过程中,当安装程序遇到需要填写参数的情况时,它会首先去查找Kickstart生成的文件。如果找到合适的参数,安装程序就会采用这些参数,从而避免了人工干预。这样,如果Kickstart文件涵盖了安装过程中出现的所有需要填写的参数,安装者就可以完全自动化地完成系统的安装。
整体架构图
二、实验步骤
环境准备
新添加两台台机器,网络参数如下
标识 | Kickstart-Server | Kickstart-Client |
---|---|---|
主机名 | KickstartServer | none |
网络信息 | 192.168.37.7/24 | DHCP自动分配 |
网络属性 | 静态地址 | DHCP自动分配 |
主要操作用户 | root | none |
修改主机名
[root@localhost ~]# hostnamectl hostname Kickstart-Server
[root@localhost ~]# bash
修改网络信息
[root@Kickstart-Server ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.37.7/24 ipv4.gateway 192.168.37.254
[root@Kickstart-Server ~]# nmcli connection up ens160
验证:查看网络信息
[root@Kickstart-Server ~]# ip add show ens160
新建一台全新的主机作为kickstart-client测试主机
其余选项保持默认
CD/DVD要选择【自动检测】
1、配置软件仓库
这里我们拥有一个本地的YUM源服务器,通过FTP共享,所以仓库地址指向YUM源服务器
首先删除原有的仓库文件
[root@Kickstart-Server ~]# rm -rf /etc/yum.repos.d/*
新建仓库文件
[root@Kickstart-Server ~]# vim /etc/yum.repos.d/dvd.repo
# 写入以下内容
[BaseOS]
name=BaseOS
baseurl=ftp://192.168.37.1/yum/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=ftp://192.168.37.1/yum/AppStream
enabled=1
gpgcheck=0
清除DNF缓存重新生成
[root@Kickstart-Server ~]# dnf clean all;dnf makecache
2、配置DHCP服务
安装DHCP服务
[root@Kickstart-Server ~]# dnf install -y dhcp-server
验证:验证软件安装情况
[root@Kickstart-Server ~]# rpm -qa dhcp-server
将模板文件中空行和注释行过滤后重定向到配置文件中
[root@Kickstart-Server ~]# egrep -v "^$|^#" /usr/share/doc/dhcp-server/dhcpd.conf.example > /etc/dhcp/dhcpd.conf
[root@Kickstart-Server ~]# vim /etc/dhcp/dhcpd.conf
修改的内容如下
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option domain-name-servers 192.168.37.7;
option architecture-type code 93 = unsigned integer 16;
subnet 192.168.37.0 netmask 255.255.255.0 {
range 192.168.37.50 192.168.37.60;
option routers 192.168.37.254;
}
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.37.7;
if option architecture-type = 00:07 {
filename "BOOTX64.EFI";
}
else {
filename "pxelinux.0";
}
}
验证:检测配置文件语法问题
[root@Kickstart-Server ~]# dhcpd -t
开启DHCP服务,并加入开机自启
[root@Kickstart-Server ~]# systemctl enable --now dhcpd.service
调整防火墙策略
[root@Kickstart-Server ~]# firewall-cmd --add-service=dhcp --permanent
[root@Kickstart-Server ~]# firewall-cmd --reload
关闭SELinux
[root@Kickstart-Server ~]# setenforce 0
[root@Kickstart-Server ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
验证:开启kickstart-client,验证DHCP地址分配情况
3、配置TFTP服务
安装tftpboot中的SYSLINUX模块,用于网络引导服务
[root@Kickstart-Server ~]# dnf install -y syslinux-tftpboot
安装TFTP服务端软件
[root@Kickstart-Server ~]# dnf install -y tftp-server
TFTP的默认发布目录为/var/lib/tftpboot,我们需要修改为/tftpboot目录
[root@Kickstart-Server ~]# vim /usr/lib/systemd/system/tftp.service
# 修改以下选项
ExecStart=/usr/sbin/in.tftpd -s /tftpboot
启动TFTP服务并加入到开机自启
[root@Kickstart-Server ~]# systemctl enable --now tftp
调整防火墙策略
[root@Kickstart-Server ~]# firewall-cmd --add-service=tftp --permanent
[root@Kickstart-Server ~]# firewall-cmd --reload
验证:查看TFTP服务状态
[root@Kickstart-Server ~]# systemctl status tftp
连接镜像
新建挂载目录,将镜像临时挂载到目录中
[root@Kickstart-Server ~]# mkdir /iso
[root@Kickstart-Server ~]# mount /dev/cdrom /iso
验证:查看挂载目录中的内容
[root@Kickstart-Server ~]# ll /iso/
将引导镜像临时挂载到/media目录中
[root@Kickstart-Server ~]# mount /iso/images/efiboot.img /media/
验证:查看挂载目录下的内容
[root@Kickstart-Server ~]# ll /media/EFI/BOOT/
将挂载后目录中的内容复制到TFTP资源目录下
[root@Kickstart-Server ~]# cp -r /media/EFI/BOOT/* /tftpboot/
验证:查看TFTP资源目录内容
[root@Kickstart-Server ~]# ls /tftpboot/
不管主机架构为UEFI还是legacy,都需要内核文件和内存镜像文件系统
[root@Kickstart-Server ~]# cp /iso/images/pxeboot/vmlinuz /tftpboot/
[root@Kickstart-Server ~]# cp /iso/images/pxeboot/initrd.img /tftpboot/
3.1 UEFI启动菜单的制作
编辑启动菜单
[root@Kickstart-Server ~]# vim /tftpboot/grub.cfg
修改以下内容
set default="0" # 代表默认选择的菜单,在计算机中的计数从0开始,即默认选择第一个菜单
set timeout=6 # 倒计时时间(秒)
menuentry 'Install Red Hat Enterprise Linux 9.2' --class fedora --class gnu-linux --class gnu --class os {
linuxefi vmlinuz inst.stage2=ftp://192.168.37.7/dvd inst.ks=ftp://192.168.37.7/pub/ks.cfg quiet
initrdefi initrd.img
}
- vmlinuxz:内核文件系统
- initrd.img:内存文件系统
- inst.stage2:安装介质,安装镜像所存在的位置
- inst.ks:自动化安装的ks文件位置
3.2 legacy启动菜单的制作
为主机架构为legacy新建引导文件目录
[root@Kickstart-Server ~]# mkdir /tftpboot/pxelinux.cfg
将光盘镜像中的legacy主机架构的引导菜单文件拷贝至legacy引导文件目录,文件名为default
[root@Kickstart-Server ~]# cp /iso/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
编辑引导菜单文件
[root@Kickstart-Server ~]# vim /tftpboot/pxelinux.cfg/default
编辑内容如下
timeout 60 # 倒计时(s)
label linux
menu label ^Install Red Hat Enterprise Linux 9.2
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=ftp://192.168.37.7/dvd inst.ks=ftp://192.168.37.7/pub/ks.cfg quiet
验证:开启kickstart-client,成功获取引导文件,但是在倒计时结束后会黑屏,这是因为我们没有指定安装镜像
4、配置FTP服务
安装FTP服务
[root@Kickstart-Server ~]# dnf install -y vsftpd
编辑配置文件,开启匿名用户访问
[root@Kickstart-Server ~]# sed -i "s/anonymous_enable=NO/anonymous_enable=YES/g" /etc/vsftpd/vsftpd.conf
调整防火墙策略
[root@Kickstart-Server ~]# firewall-cmd --add-service=ftp --permanent
[root@Kickstart-Server ~]# firewall-cmd --reload
新建共享目录
[root@Kickstart-Server ~]# mkdir /var/ftp/dvd
将光盘镜像挂载到共享目录中
[root@Kickstart-Server ~]# mount /dev/cdrom /var/ftp/dvd/
将挂载写入配置文件
[root@Kickstart-Server ~]# vim /etc/fstab
# 写入下列内容
/dev/cdrom /var/ftp/dvd iso9660 defaults 0 0
验证:查看FTP共享目录内容
[root@Kickstart-Server ~]# ll /var/ftp/dvd/
启动FTP服务,并加入到开机自启
[root@Kickstart-Server ~]# systemctl enable --now vsftpd.service
验证:使用主机访问共享目录
验证:先在kickstart-Server上开启追踪日志,然后再开启kickstart-client,这个时候会通过FTP获取安装镜像源,然后会显示安装界面
[root@Kickstart-Server ~]# journalctl -f -u tftp.service # 实时显示日志的最新条目
选择第一项
查看实时显示的日志信息,可以看到Finnish提示拉取成功
此时系统会提示文件不存在,是因为我们的ks.cfg文件不存在
5、生成ks文件
通过红帽官网生成KS文件
https://access.redhat.com/labs/
console=ttyS0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto
lang en_US
keyboard --xlayouts='us'
timezone Asia/Shanghai --utc
rootpw $2b$10$59RKKpG0ojERHsmCYGftQuPd/0vH1fYOSeno4ct1XObQCCFFbxDPG --iscrypted
url --url=ftp://192.168.37.7/dvd
bootloader --append="console=ttyS0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto"
zerombr
clearpart --all --initlabel
autopart
network --bootproto=dhcp
skipx
firstboot --disable
selinux --enforcing
firewall --enabled --ssh
%post
useradd meaauf
echo redhat | passwd --stdin meaauf
%end
%packages
@^minimal-environment
kexec-tools
%end
新建ks.cfg文件,写入上述文件内容
[root@Kickstart-Server ~]# vim /var/ftp/pub/ks.cfg
验证:保证ks.cfg文件其它人拥有读权限
[root@Kickstart-Server ~]# ll /var/ftp/pub/ks.cfg
6、最终验证
kickstart-server上开启实时日志
[root@Kickstart-Server ~]# journalctl -f -u tftp.service
开启kickstart-client,会自动跳转安装
查看系统执行脚本情况