PXE工作原理
第一步:PXE Client向DHCP发送请求首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
第二步:DHCP服务器提供信息DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客户端请求下载启动文件客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
第四步:Boot Server响应客户端请求并传送文件当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
第五步:请求下载自动应答文件客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。在上面介绍中PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server和NFS Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核都放置在Linux Server上TFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
一、目的:完成自动化rhel7.0系统安装
二、系统:rhel7.0
三、工具:
http:用于安装文件网络传输
tftp:用于上传内核、入口程序等
dhcp:用于动态IP分配
pxelinux.0:安装系统入口程序
kickstart:个性化rhel7.0配置
本机ip:172.25.254.11(用于安装服务器) DNS:172.25.254.254 网关:172.25.254.250
四、步骤(机器为全新,仅有桌面iso文件)
(1)配置本地yum源(已配置好则跳过)
# mount rhel7.0-server-x86-64.iso /mnt
# vim /etc/yum.repo/xxxxx.repo
[mysoftware]
#该步骤为配置临时yum源,便于安装要用到的软件
name=ps-test
enable=1
baseurl=file:///mnt
gpgcheck=0
# yum clean all
//用kisckstart配置个性化linux系统
# yum install system-config-kickstart -y
# system-config-kickstart //图形界面下 packages 选择时存在bug需手动添加
//将上步做好的ks.cfg保存到/var/www/html/下
# vim /var/www/html/ks.cfg
//在文件最后添加
%packages
@base //最小安装
%end
//httd配置
# yum install httpd -y
# systemctl start httpd
# systemctl enable httpd
# systemctl stop firewalld
# systemctl disable firewalld
# mkdir /var/www/html/source
# vim /etc/fstab
#增加以下代码
/root/Desktop/rhel7.0-server-x86-64.iso /var/www/html/source iso9660 defaults 0 0
# mount -a
# umount /mnt
# vim /etc/yum.repo/xxxxx.repo
#修改baseurl
baseurl=file:///var/www/html/source
# yum clean all
//dhcp配置
//将本机IP改为静态(用作服务器使用)并重启网络服务
# yum install dhcpd.x86_64 -y
# cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example > /etc/dhcp/dhcpd.conf
# vim /etc/dhcp/dhcpd.conf
option domain-name "example.com";
option domain-name-servers 172.25.254.254;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 172.25.254.0 netmask 255.255.255.0 {
range 172.25.254.60 172.25.254.70;
option routers 172.25.254.250;
filename "pxelinux.0";
next-server 172.25.254.11;}
# systemctl restart dhcpd
# systemctl enable dhcpd
//tftp配置
# yum install tftp-server -y
# cd /var/lib/tftpboot
# cp /var/www/html/source/isolinux/* /var/lib/tftpboot
# mkdir pxelinux.cfg
# cp isolinux.cfg pxelinux.cfg/default
# vim pxelinux.cfg/default
//修改以下条目
timeout 60
label linux
menu label ^Install Red Hat Enterprise Linux 7.0
kernel vmlinuz
menu default
append initrd=initrd.img repo=http://172.25.254.11/source ks=http://172.25.254.11/ks.cfg
# yum install syslinux -y
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
# vim /etc/xinetd.d/tftp
disable = no
# systemctl restart xinetd
# systemctl enable xinetd
//至此所有配置完成
五、测试
用另一PC使用网络启动(或pxe)通过引导成功进入安装界面
系统安装过程完全自动化,只需打开PC电源即可
六、遇到的问题
遇到问题最多的点再于DHCP的配置,dhcpd.conf 的语法要求很严格,并且没有报错机制,在
# systemctl restart dhcpd 后需要继续执行 # systemctl status dhcpd 查看其是否运行,若状态为failed则说明配置文件有误,需查看日志排错