[1.PXE原理:大概过程简介]
[2.PXE安装与组件配置]
[3.PXE自动应答文件ks.cfg]
[4.PXE安装多个操作系统菜单修改]
[5.PXE部署验证]
实际测试PXE服务操作系统:CentOS8.3
https://betheme.net/houduan/28768.html?action=onClick1.PXE原理
BackToBegin 前提服务器网卡集成了dhcp\tftp客户端,目前大部分都已经支持了1. 先发送DHCP Discover消息,请求ip, tftp server地址,bootloader文件名称
2. 如果没有请求到必要的pxe相关的选项,主要的就有两个TFTP Server Name(tftp服务器地址),Bootfile Name(bootloader的文件名称,相对tftp server的根目录); 则继续执行步骤1,直到取得这些信息
3. 通过tftp服务器下载到支持pxe启动的bootloader
4. 后续的事情就交给bootloader了,包括从TFTP服务器下载启动镜像(比如vmlinux),安装镜像(iso文件),自动安装脚本(centos的kickstart脚本)
一般网卡固件里的pxe驱动,只支持通过DHCP和TFTP配合来启动的;但是一些开源的项目,已经拓展了pxe的启动方式,支持通过http, scsi, nfs来引导启动远程操作系统的方式,比较有名的有iPXE(gPXE的继承者)
PXE工作原理示意图说明:
1. Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client。
2. Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0。
3. Client执行接收到的pxelinux.0文件。
4. Client向TFTP发送针对本机的配置信息(记录在TFTP的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
5. Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client。
6. Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统。
7. Client启动Linux内核(启动参数已经在4中的配置文件中设置好了)。
8. Client通过NFS下载镜像文件,读取autoyast自动化安装脚本。
至此,Client正式进入自动化安装模式开始安装系统直到完成。
2.PXE安装与配置
BackToBegin#关闭selinux,设置开机不启动
sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld # 查看防火墙的状态
systemctl is-enabled firewalld # 查看是否设置开机启动
安装yum基础包:
yum -y install vim
yum -y install wget
yum -y install lrzsz
yum -y install dhcp-server
yum -y install httpd
yum -y install xinetd
yum -y install tftp-server
yum -y install syslinux
yum -y install syslinux-nonlinux
yum -y install autofs
yum -y install createrepo
yum -y install system-config-kickstart #实测时没有安装,不影响
修改dhcp配置文件:
# cat /etc/dhcp/dhcpd.conf
allow booting;
allow bootp;
ignore client-updates;
subnet 192.168.116.0 netmask 255.255.255.0{
option subnet-mask 255.255.255.0;
option routers192.168.116.1; #网关
option domain-name-servers 192.168.116.193;
range dynamic-bootp 192.168.116.50 192.168.116.200;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.116.193;
filename "pxelinux.0" ;
}
【各项配置说明】
allow booting;
allow bootp; <<<<允许bootp引导驱动程序协议
ddns-update-style interim; <<<<<<定义DNS服务动态更新类型为:互动更新模式
ignore client-updates; <<<<忽略客户机更新DNS记录
subnet 192.168.127.0 netmask 255.255.255.0{ <<<<<<设置DHCP服务器网段和子网掩码
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.127.1; <<<<<<定义DNS服务器地址
range dynamic-bootp 192.168.127.50 192.168.127.200; <<<<<定义可使用的地址池
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.127.1; #指定客户端启动过程中下一步使用的网络服务器IP地址;提供服务的IP,即本机IP,此处是tftp服务的IP地址,要能找到下面的pxelinux.0引导文件
filename "pxelinux.0" ; #引导文件,为tftp根目录下的pxelinux.0
}
配置tftp配置文件服务文件:
如果没有可以手动添加:
# cat /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
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
tftp服务简单说明:
配置Apache http服务
#上传iso镜像到环境如下目录: /opt/CentOS-8.3.2011-x86_64-dvd1.iso
mkdir /var/www/html/CentOS8
mount /opt/CentOS-8.3.2011-x86_64-dvd1.iso /var/www/html/CentOS8
#添加挂载到fstab文件中,格式iso9660,设置开机自动挂载,也可以自己写系统服务挂载,这里简单的写到/etc/fstab其实不推荐此处理方法
# cat /etc/fstab
/opt/CentOS-8.3.2011-x86_64-dvd1.iso /var/www/html/CentOS8 iso9660 defaults 0 0
挂载完成之后;拷贝必要的文件到tftp对应的目录下:
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /var/www/html/CentOS8/isolinux/*.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot
cp /var/www/html/CentOS8/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /var/www/html/CentOS8/isolinux/{boot.msg,splash.png} /var/lib/tftpboot/
#----------------------------------------------------------------
mkdir /var/lib/tftpboot/pxelinux.cfg #创建目录
也可以使用附件的default-此文件的作用是PXE安装时的菜单文件:
cp /var/www/html/CentOS8/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
default菜单文件配置注意修改IP,192.168.116.193为自动应答文件存放IP的路径:
label linux
kernel vmlinuz
append initrd=initrd.img inst.ks=http://192.168.116.193/ks.cfg
上传附件ks.cfg到 /var/www/html/ 目录下;修改ks.cfg 里面的IP为本机IP
[url --url=“http://192.168.116.193/CentOS8”]
cat ks.cfg 文件内容如下:
#version=DEVEL
# Install OS instead of upgrade
install
# Use network installation PXE网络安装
# #最后面不需要加 /
url --url="http://192.168.116.193/CentOS8"
# Use CDROM installation media 从光驱安装
## cdrom
# Use hard drive installation media U盘安装
#harddrive --dir= --partition=LABEL=CENTOS-8-3-
#repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-hdd-device/AppStream
# Use graphical install 图形化安装
graphical
# Run the Setup Agent on first boot
firstboot --disable
# Keyboard layouts 美式键盘
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --onboot=yes --noipv6 --activate
network --hostname=localhost.localdomain
# System authorization information
auth --enableshadow --passalgo=sha512
# Root password root用户的密码
rootpw --iscrypted $6$Kf5MDiXNQDl6C/UL$KfHP2G9ub.vMBZL4gO12O9b0foYkbRgHUHImmx5.wOnxkKJLny.pilTzib1kNNS8963Q6XuDotKenB//.THeH1
# System services
services --disabled="chronyd,firewalld" --enabled="sshd"
#开机禁用的服务以及启用的服务
# Reboot after installation
# reboot
# System timezone 时区
timezone Asia/Shanghai --isUtc --nontp
# SELinux configuration
selinux --disabled
#user --name=pan --password=$6$ONSyoQ.S58OJpcnj$jUz6vDadzY5wZ39fr0dEONbI/iNIeVkpRMaUjz9ZJbIqQLPLKqq8ZJWRoDGjolLJfkwmw58Dp5xPhKufAca8y/ --iscrypted --gecos="pan"
# System bootloader configuration
# bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# autopart --type=lvm
# Partition clearing information
# 新硬盘需要创建mbr
#必须:指定引导装载程序怎样被安装,--location=mbr默认
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
#yes
# Partition clearing information
# Disk partitioning information
ignoredisk --only-use=sda
clearpart --all --initlabel --drives=sda
part swap --asprimary --fstype="swap" --size=1024
part /boot --fstype xfs --size=200
part pv.01 --size=1 --grow
volgroup rootvg01 pv.01
part biosboot --fstype="biosboot" --size=1
logvol / --fstype xfs --name=lv01 --vgname=rootvg01 --size=1 --grow
#part / --fstype="xfs" --ondisk=sda --size=1 --grow
%pre
%end
#安装包的信息
%packages
@^minimal-environment
@core
kexec-tools
%end
%post
systemctl disable firewalld
systemctl stop firewalld
systemctl disable firewalld
sed -i '/^StrictHostKeyChecking/d' /etc/ssh/ssh_config
sed -i '/StrictHostKeyChecking/a\StrictHostKeyChecking no' /etc/ssh/ssh_config
sed -i "/aes256-ctr/d" /etc/ssh/sshd_config
sed -i "/Ciphers and keying/a\Ciphers aes128-ctr,aes192-ctr,aes256-ctr" /etc/ssh/sshd_config
sed -i 's/,aes128-cbc//g' /etc/crypto-policies/back-ends/opensshserver.config
sed -i 's/,aes256-cbc//g' /etc/crypto-policies/back-ends/opensshserver.config
sed -i 's/,diffie-hellman-group-exchange-sha1//g' /etc/crypto-policies/back-ends/opensshserver.config
systemctl restart sshd
service sshd restart
echo "export DOCKER_CLIENT_TIMEOUT=500" >> /etc/profile
echo "export COMPOSE_HTTP_TIMEOUT=500" >>/etc/profile
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
%end
启动服务:
systemctl enable dhcpd
systemctl enable xinetd
systemctl enable tftp
systemctl enable httpd
systemctl restart dhcpd
systemctl restart xinetd
systemctl restart tftp
systemctl restart httpd
3.PXE自动应答文件
BackToBegin4.PXE多个操作系统菜单修改
BackToBegin5. PXE部署验证
BackToBeginPXE官方指导连接BackToBegin