一、PXE 和 KickStart 简介
PXE(Preboot Execution Environment)是一种计算机网络协议,用于在计算机启动时通过网络获取操作系统镜像并进行远程安装。通过PXE,计算机可以在没有本地存储设备的情况下,从网络中启动并加载操作系统。这使得系统管理员可以远程管理大量计算机,简化了操作系统的部署和维护过程。PXE通常与DHCP(Dynamic Host Configuration Protocol)和TFTP(Trivial File Transfer Protocol)一起使用,以提供IP地址分配和文件传输功能。
Kickstart是一种自动化操作系统安装工具,主要用于Linux系统。它使用一个文本文件(通常称为Kickstart文件)来定义安装过程中的配置选项和步骤。通过Kickstart,系统管理员可以预先定义操作系统的安装选项,如分区、软件包安装、网络设置、用户账户等,从而实现批量和一致性的操作系统部署。
Kickstart文件包含一系列的命令和参数,用于指定安装过程中的各种配置。这些文件可以通过网络(如HTTP、FTP)或本地介质(如光盘、USB)传递给安装程序。一旦Kickstart文件被提供给安装程序,它将自动按照文件中定义的配置选项进行安装,而无需用户手动干预。
Kickstart工具可以大大简化大规模部署和自动化安装过程,提高效率和准确性。它广泛应用于服务器环境、虚拟化环境以及需要频繁进行操作系统安装的场景。
二、PXE 工作原理
PXE(Preboot Execution Environment)的工作原理如下:
- 启动过程:计算机在启动时通过BIOS或UEFI发出PXE启动请求,并广播该请求到网络中的所有设备。
- DHCP提供IP地址:PXE客户端接收到广播请求后,会通过DHCP(Dynamic Host Configuration Protocol)协议向DHCP服务器发送请求,以获取IP地址和其他网络配置信息。
- DHCP回应:DHCP服务器接收到PXE客户端的请求后,会分配一个可用的IP地址,并将其作为回应发送给PXE客户端。
- TFTP加载启动文件:PXE客户端通过TFTP(Trivial File Transfer Protocol)从网络中的TFTP服务器下载启动文件(通常称为pxelinux.0)。
- 启动文件执行:PXE客户端执行下载的启动文件,该文件包含了操作系统镜像的位置和其他配置信息。
- 操作系统镜像下载:根据启动文件中指定的位置,PXE客户端通过TFTP从网络中的TFTP服务器下载操作系统镜像文件。
- 操作系统加载和安装:一旦操作系统镜像文件下载完成,PXE客户端会将其加载到计算机的内存中,并开始执行操作系统的安装过程。
三、搭建 PXE 服务器
1. 环境准备
实验环境:VMware Workstation 16
系统平台:CentOS 7.9 (最小化安装)
网络模式:NAT模式(共享主机的IP地址)
DHCP / TFTP IP:192.168.188.145
HTTP / FTP / NFS IP:192.168.188.145
防火墙已关闭/iptables: Firewall is not running.
SELINUX=disabled
2. 安装前准备
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPADDR=192.168.188.145 PREFIX=24 GATEWAY=192.168.188.2 DNS1=114.114.114.114 DNS2=8.8.8.8 DEVICE="ens33" ONBOOT="yes" [root@localhost ~]# systemctl restart network # 配置yum源并按章软件包 [root@localhost ~]# rm -rf /etc/yum.repos.d/* [root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo [root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [root@localhost ~]# yum clean all [root@localhost ~]# yum makecache fast [root@localhost ~]# yum install -y dhcp tftp tftp-server syslinux wget vsftpd pykickstart
3. dhcp服务器配置
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf #确保配置文件内容如下 ddns-update-style interim; ignore client-updates; authoritative; allow booting; allow bootp; allow unknown-clients; # A slightly different configuration for an internal subnet. subnet 192.168.188.0 netmask 255.255.255.0 { range 192.168.188.10 192.168.188.240; option domain-name-servers 192.168.188.2; option domain-name "server1.example.com"; option routers 192.168.188.2; option broadcast-address 192.168.188.255; default-lease-time 600; max-lease-time 7200; # PXE SERVER IP next-server 192.168.188.145; # DHCP server ip filename "pxelinux.0"; }
4. TFTP服务准备
[root@localhost ~]# vim /etc/xinetd.d/tftp #修改内容如下 service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } [root@localhost ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32,memdisk,mboot.c32,chain.c32} /var/lib/tftpboot/ [root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@localhost ~]# mkdir /var/lib/tftpboot/netboot
5. VSftpd服务准备
[root@localhost ~]# mount /root/CentOS-7-x86_64-Minimal-2009.iso /mnt
[root@localhost ~]# cp -rf /mnt/* /var/ftp/pub/
# 拷贝系统启动时需要的镜像文件[root@localhost ~]# cp /var/ftp/pub/images/pxeboot/vmlinuz /var/lib/tftpboot/netboot/ [root@localhost ~]# cp /var/ftp/pub/images/pxeboot/initrd.img /var/lib/tftpboot/netboot/ # 创建ks.cfg 文件
[root@localhost ~]# vim /var/ftp/pub/ks.cfg
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use NFS installation media url --url="ftp://192.168.188.145/pub/" rootpw --plaintext 123456 #root的密码设为123456 # Use graphical install graphical firstboot disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux disabled # Installation logging level logging level=info # System timezone timezone Asia/Shanghai # System bootloader configuration bootloader location=mbr clearpart --all --initlabel part swap --asprimary --fstype="swap" --size=1024 part /boot --fstype xfs --size=200 part pv.01 --size=1 --grow volgroup rootvg01 pv.01 logvol / --fstype xfs --name=lv01 --vgname=rootvg01 --size=1 --grow reboot %packages @core wget lrzsz unzip net-tools %end %post %end # 检查语法是否有错误 [root@localhost ~]# ksvalidator /var/ftp/pub/ks.cfg
6. PXE菜单
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default default menu.c32 prompt 0 timeout 30 MENU TITLE Togogo.net Linux Training LABEL centos7_x64 MENU LABEL CentOS 7 X64 for newrain KERNEL /netboot/vmlinuz APPEND initrd=/netboot/initrd.img inst.repo=ftp://192.168.188.145/pub ks=ftp://192.168.188.145/pub/ks.cfg
7. 重启服务安装测试
[root@localhost ~]# systemctl enable dhcpd vsftpd tftp [root@localhost ~]# systemctl restart dhcpd vsftpd tftp