预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。 [1]
PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。在Linux中有多种的安装方式:HD、USB、CDROM、PXE及远程管理卡等。在我们的系统运维的生涯中,经常要安装操作系统,然而我们维护的机器不是一两台而已,一般的企业服务器数量都在几十、几百、几千、甚至上万台。这么多的机器,如果人工的一台一台去安装,那我们这些运维人员,可能要把大部分时间都花费在了安装系统上,所以,我们一般都会建立一个PXE服务器,通过网络来批量部署系统。
二、无人值守部署系统安装系统流程
1.部署 PXE 需要的环境:
首先在pxe服务器端需要有一个DHCP服务器,需要有tftp服务器和一个文件服务器,其中文件服务器可以是ftp,http,nfs等文件服务器,如果服务器性能好或者流量不是太大,这些服务器完全可以放在一台服务器上面。当然pxe启动需要网卡支持这样的功能,好在现在的绝大部分的网卡已经支持这样的功能了!
2. PXE 部署系统自动化安装流程
(1) 设置拥有pex功能的客户端主机开机启动项为网络启动,一般默认都此选项,如果没有可自行设置bios启动项
(2) 客户端开机之后进入网络启动,此时客户端没有IP地址需要发送广播报文(pxe网卡内置dhcp客户端程序),dhcp服务器相应客户端请求,分配给客户端相应的IP地址与掩码等信息
(3) 客户端得到IP地址之后,与tftp通信,下载pxelinux.0,default文件,根据default指定的vmlinuz,initrd.img启动系统内核,并下载指定的ks.cfg文件
(4) 根据ks.cfg文件去文件共享服务器(http/ftp/nfs)上面下载RPM包开始安装系统,注意此时的文件服务器是提供yum服务器的功能的。
复制相关需要的内核或其它文件:
(1)其中和菜单启动引导文件等由syslinux包提供,所以安装此包即可。
[root@centos7 ~]
# yum -y install syslinux
(2) 复制文件:
[root@centos7 pxeboot]
# cd /mnt/cdrom/p_w_picpaths/pxeboot
[root@centos7 pxeboot]
# ls
initrd.img TRANS.TBL upgrade.img vmlinuz
[root@centos7 pxeboot]
# cp vmlinuz initrd.img /var/lib/tftpboot/
[root@centos7 pxeboot]
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
[root@centos7 pxeboot]
# cp /usr/share/syslinux/{chain.c32,memdisk,menu.c32,mboot.c32} /var/lib/tftpboot
(3) 编辑default文件:
[root@centos7 pxeboot]
# cd /var/lib/tftpboot
[root@centos7 tftpboot]
# mkdir pxelinux.cfg
[root@centos7 tftpboot]
# cd pxelinux.cfg/
[root@centos7 pxelinux.cfg]
# vim default
default menu.c32
prompt 5
timeout 30
MENU TITLE Centos7 PXE
LABEL linux_auto
MENU LABEL Install Centos7 x86_64 AUTO
install
KERNEL vmlinuz
APPEND initrd=initrd.img ks=ftp://192.168.20.77/pub/ks.cfg
LABEL linux
MENU LABEL Install Centos7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=ftp://192.168.20.77/pub/centos7
[root@centos7 ~]
# cd
[root@centos7 ~]
# cp ks.cfg /var/ftp/pub/
[root@centos7 ~]
# chmod +r /var/ftp/pub/ks.cfg
(1) initrd.img该文件可以在内存当中模拟文件系统
(2) vmlinuz则是一个缩减版的内核文件拥有一些基本的网络功能,可以控制客户端进行下一步的从文件共享系统中下载真正的内核文件和驱动文件,最后真正的内核文件解压进行接管上一个内核,开始进行软件包的真正安装等任务。
(3) Pxelinux.0文件它可以解释default文件中的每个配置项,并根据配置项做出不同的反应。如等待的时间、启动器背景、启动菜单、内核引导等等。
(4) Vesamenu.c32和menu.c32是syslinux所拥有众多模块中的两个,它们的功能是制定启动器使用什么模式的背景。Vesamenu.c32图形模式,menu.c32文本模式。使用时可以选择一个,这里我选择的是文本模式。
(5) pxelinux.cfg目录,pxelinux被执行后,它会扫描该目录下是否存在指定的配置文件,如果存在,则引用被制定的配置文件。
(6) Default文件存放于pxelinux.cfg目录中,pxelinux程序最后扫描的配置文件名就是default,所以,我们经常把启动器配置项都写入该文件中,default文件中第一行指定使用哪种形式的图形化,menu.c32为字符图形化,也可以使用图形化的菜单vesamenu.c32。prompt和timeout指定超时时间,可以有多段,使用MENU TITLE 指定主标题,不同的安装方式可以有不同LABEL,我这里有两种,手动和自动,第一种为使用ks.cfg文件自动安装,第二种使用手动方式安装,记得ks.cfg文件的权限问题,对他人要有读权限!
(7) 如果是多网卡的主机要在default文件的append传递启动网卡是哪一个,不然会在开机启动让你选择使用哪个网卡启动,并且没有默认,如:使用eth0启动则向内核传递ksdevice=eth0参数。