PXE+Kickstart 全自动安装部署CentOS7.4

时间:2022-06-01 20:44:31
一、简介
1、什么是PXE
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
PXE的工作过程:
1)、 PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;
2)、DHCP 服务器返回分配给客户机的IP * 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;
3)、PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;
4)、PXE Client 取得pxelinux.0 文件后之执行该文件;
5)、 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;
6)、 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;
详细工作流程,请参考下面这幅图:
 PXE+Kickstart 全自动安装部署CentOS7.4
要达成PXE必须要有两个环节:
(1)一个是客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的程序;
(2)一个是PXE服务器必须要提供至少含有DHCP以及TFTP的服务!
其中:
  • DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;
  • TFTP则提供客户端的boot loader及kernel file下载路径。
还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务
2、什么是Kickstart
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
PXE+Kickstart 无人值守安装操作系统完整过程如下:
PXE+Kickstart 全自动安装部署CentOS7.4
PXE+Kickstart 全自动安装部署CentOS7.4
满足Kickstart安装系统的需求
  1. 网卡必须支持PXE引导;
  2. 客户端需要有与Kickstart 通信的IP地址,这里一般都是通过DHCP自动分配IP地址来实现;
  3. 提供引导所需的文件,内核文件,内核镜像文件等,此时一般通过tftp-server等实现;
  4. kickstart文件,它主要实现自动化安装的过程,比如配置主机名、添加用户、安装系统后相关操作;
  5. 提供安装源,一般就是NFS/ftp/httpd等;
总结: 通过如上需求,我们就知道需要安装的相关服务,如DHCP/tftp-server/syslinux/kickstart/vsftpd等;
二、环境介绍及初绍化
1、环境介绍
  • 操作系统:CentOS Linux release 7.4.1708 (Core)
  • 网卡地址:192.168.10.7/24
  • 光盘镜像:CentOS-7-x86_64-DVD-1708.iso
  • 安装工具:kickstart + dhcp + tftp-server + tftp + httpd
  • Workstaion网络:VMNet3
2、准备工作
1、服务器禁用SElinux,然后进行重启操作
[root@kickstart ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@kickstart ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'
/etc/selinux/config
[root@kickstart ~]# setenforce 0
[root@kickstart ~]# systemctl reboot
[root@kickstart ~]# getenforce
Permissive
2、关闭防火墙及清空策略
[root@kickstart ~]# systemctl stop firewalld.service
[root@kickstart ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@kickstart ~]# iptables -F
[root@kickstart ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@kickstart~]#
3、软件安装
[root@kickstart ~]# yum install -y httpd dhcp tftp-server tftp syslinux
[root@kickstart ~]# rpm -q httpd dhcp tftp-server tftp syslinux
httpd-2.4.6-67.el7.centos.x86_64
dhcp-4.2.5-58.el7.centos.x86_64
tftp-server-5.2-13.el7.x86_64
tftp-5.2-13.el7.x86_64
syslinux-4.05-13.el7.x86_64
三、各组件配置及准备
一)DHCP服务配置
1、修改dhcpd配置文件
[root@kickstart ~]# cp -rf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@kickstart ~]# egrep -v "^#|^$" /etc/dhcp/dhcpd.conf
option domain-name "contoso.com";
option domain-name-servers ns1.contoso.com, contoso.com;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.10.0 netmask 255.255.255.0 { //服务端IP网段及掩码
option routers 192.168.10.254; //网关
option subnet-mask 255.255.255.0; //掩码
option domain-name-servers 192.168.10.2;
range dynamic-bootp 192.168.10.100 192.168.10.120; //dhcp分发的地址范围
default-lease-time 21600; //设置默认的IP租用期限
max-lease-time 43200; //设置最大的IP租用期限
next-server 192.168.10.7; //TFTP服务器地址
filename "pxelinux.0"; //指定引导文件位置,这里是TFTP根目录下的pxelinux.0
}
2、启动dhcpd服务,并设置为开机启动
[root@ kickstart ~]# systemctl start dhcpd.service
[root@ kickstart ~]# systemctl enable dhcpd.service
3、dhcp服务端口查看
[root@kickstart ~]# ss -nulp | grep dhcpd
UNCONN 0 0 *:44810 *:* users:(("dhcpd",pid=5197,fd=20))
UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=5197,fd=7))
UNCONN 0 0 :::5138 :::* users:(("dhcpd",pid=5197,fd=21))
二)Httpd服务配置
1、目录建立及光盘挂载
[root@kickstart ~]# mkdir -pv /var/www/html/CentOS7
[root@kickstart ~]# mount --bind /media/cdrom/ /var/www/html/CentOS7/
2、启动httpd服务,并设置为开机启动
[root@ kickstart ~]# systemctl start httpd.service
[root@ kickstart ~]# systemctl enable httpd.service
3、httpd服务端口查看
[root@kickstart ~]# ss -tnl | grep 80
LISTEN 0 128 :::80
[root@kickstart ~]# lftp http://192.168.10.7/CentOS7 //用lftp对CentOS7进行测试
cd: received redirection to `http://192.168.10.7/CentOS7/'
cd ok, cwd=/CentOS7
lftp 192.168.10.7:/CentOS7> ls
drwxr-xr-x -- /
-rw-r--r-- -- CentOS_BuildTag
drwxr-xr-x -- EFI
-rw-r--r-- -- EULA
-rw-r--r-- -- GPL
drwxr-xr-x -- LiveOS
drwxr-xr-x -- Packages
-rw-r--r-- -- RPM-GPG-KEY-CentOS-7
-rw-r--r-- -- RPM-GPG-KEY-CentOS-Testing-7
-rw-r--r-- -- TRANS.TBL
drwxr-xr-x -- images
drwxr-xr-x -- isolinux
drwxr-xr-x -- repodata
lftp 192.168.10.7:/CentOS7>
三)tftp服务配置
1、配置xinetd
[root@kickstart ~]# vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot //修改tftp的根目录
disable = no //认disable是yes的,把它改为no即可
per_source = 11
cps = 100 2
flags = IPv4
}
2、确保tftp.socket正常
[root@kickstart ~]# systemctl start tftp.socket
[root@kickstart ~]# systemctl enable tftp.socket
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
[root@kickstart ~]# systemctl status tftp.socket
● tftp.socket - Tftp Server Activation Socket
Loaded: loaded (/usr/lib/systemd/system/tftp.socket; enabled; vendor preset: disabled)
Active: active (listening) since Thu 2017-12-28 01:56:55 CST; 2min 29s ago
Listen: [::]:69 (Datagram)
Dec 28 01:56:55 kickstart.contoso.com systemd[1]: Listening on Tftp Server Activation Socket.
Dec 28 01:56:55 kickstart.contoso.com systemd[1]: Starting Tftp Server Activation Socket
3、然后启动tftp.service
[root@kickstart ~]# systemctl start tftp.service
[root@kickstart ~]# systemctl enable tftp.service
[root@kickstart ~]# systemctl status tftp.service
● tftp.service - Tftp Server
Loaded: loaded (/usr/lib/systemd/system/tftp.service; indirect; vendor preset: disabled)
Active: active (running) since Thu 2017-12-28 02:04:32 CST; 20s ago
Docs: man:in.tftpd
Main PID: 1777 (in.tftpd)
CGroup: /system.slice/tftp.service
└─1777 /usr/sbin/in.tftpd -s /var/lib/tftpboot
[root@kickstart ~]# ss -unlp | grep 69 //端口为UDP:69
UNCONN 0 0 :::69 :::* users:(("systemd",pid=1,fd=42))
3、导入必要的引导文件
需要导入TFTP服务器的主要文件有:
  • 引导文件 - pxelinux.0
  • 内核文件:vmlinuz initrd.img
  • 引导菜单:isolinux.cfg -- 开机后选择启动项的菜单文
  1. 引导文件pxelinux.0 由软件包syslinux生成,安装syslinux软件包
[root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ //boot loader文件
  1. 导入内核及菜单文件
内核文件:vmlinuz initrd.img
引导菜单配置文件: isolinux.cfg
系统自带的两种窗口模块之一:vesamenu.c32
窗口提示信息文件:boot.msg
窗口背景图片:splash.png
[root@kickstart pxeboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ //导入内核文件
[root@kickstart ~]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
[root@kickstart ~]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
[root@kickstart ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/ //新建pxelinux.cfg文件夹
[root@kickstart ~]# ls /var/lib/tftpboot/ //查看目录下准备的文件
boot.msg chain.c32 initrd.img mboot.c32 memdisk menu.c32 pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz
  1. 复制文件进行修改
[root@kickstart ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@kickstart ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
[root@kickstart ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@kickstart ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
//修改引导菜单选项:
[root@pxe1 pxelinux.cfg]# vim /var/lib/tftpboot/pxelinux.cfg/default 
//首先修改菜单等待时间
timeout 600  //菜单显示等待时间,单位为1/10秒,默认等待60秒。
//修改菜单等待时间为60,即等待6秒,若无操作则进入默认菜单;
timeout 600
//然后修改显示菜单,找到文件中的以下部分
label linux  
menu label ^Install CentOS Linux 7
kernel vmlinuz  
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
label check
menu label Test this ^media & install CentOS Linux 7  
menu default  
kernel vmlinuz  
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
# 将其修改为
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img
label linux 2
menu label ^Install CentOS 7 by Kickstart
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7
inst.ks=http://192.168.10.7/CentOS7.cfg
label linux 3
menu label ^Install CentOS 7 by Kickstart_Min
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7 inst.ks=http://192.168.10.7/CentOS7Min.cfg
  1. 将CentOS7.kfg放到/var/www/html目录下面,CentOS7. cfg文件内容如下:
[root@kickstart html]# cat CentOS7.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# Root password
rootpw --iscrypted $1$xBL2ptUE$hJOPvy.dysetezxpEXCaL0
# Use network installation
url --url="http://192.168.10.7/CentOS7" //指定网络安装的服务地址及目录
# System language
lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 //语言
# Firewall configuration
firewall --disabled
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# Network information
network --bootproto=dhcp --device=ens33 --onboot=yes --noipv6 --activate //启动并激活网卡的名称
network --hostname=Centos7.contoso.com //设置主机名
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai --isUtc --nontp //设置时区
user --groups=wheel --name=tony --gecos="tony" //增加tony用户
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr //清除mbr信息
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information //磁盘为50G的硬盘,这里根据自己来进行修改
part /boot --fstype="xfs" --size=200
part / --fstype="xfs" --size=20480
part swap --fstype="swap" --size=2048
part /usr --fstype="xfs" --size=20480
part /tmp --fstype="xfs" --grow --size=1
%packages
@base
@compat-libraries
@desktop-debugging
@development
@dial-up
@fonts
@gnome-apps
@gnome-desktop
@legacy-x
@platform-devel
@remote-desktop-clients
@x11
vinagre
%end
说明:生成kickstart文件时,需要安装通过yum -y install system-config-kickst 安装此软件包,安装的软件包之前,首先需要repo文件中第一行写成[development],括号中建议填写development,填写其他内容会导致后面system-config-kickstart命令生成kickstart文件文件时无法选择软件包
四、验证自动化安装
启动之前准备的客户端虚拟机查看是否可以正常显示引导菜单,是否可以正常获取initrd.img和vmlinuz内核文件。
  若配置正常,会看到之前配置的引导菜单出现:
 PXE+Kickstart 全自动安装部署CentOS7.4
先择第二项, 按Enter键后,会出现获取内核文件的界面:
PXE+Kickstart 全自动安装部署CentOS7.4
  正常获取获取ks文件之后,若正常进入自动安装界面,如下图所示,等待系统安装完成即可
 PXE+Kickstart 全自动安装部署CentOS7.4
注意:若要安装图形界面,选择内存时尽量大点(实验中我选择2GB),若太小的话,估计会报相关错误!