一、PXE服务简介:
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服务器,通过网络来批量部署系统。
二、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服务器的功能的。
环境搭建部署:
环境:Centos7.0 (VM)
关闭防火墙systemctl stop firewalld
,临时关闭selinuxsetenforce 0
首先我们在服务端一次性装完所需要用到的包,配置本地yum源我参考我之前写的文章centos7配置本地yum源
yum install dhcp vsftpd xinetd tftp tftp-server syslinux -y
如图显示,安装完毕
接下来我们配置DHCP服务
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf ##覆盖,然后y
vim /etc/dhcp/dhcpd.conf
#以下是配置的内容,按照自己的环境配置
subnet 10.30.40.0 netmask 255.255.255.0 {
range 10.30.40.95 10.30.40.100;
option domain-name-servers 10.30.40.4;
option routers 10.30.40.1;
option broadcast-address 10.30.40.255;
default-lease-time 600;
max-lease-time 7200;
next-server 10.30.40.4; #本机ip
filename "pxelinux.0"; #必填,最后别忘记分号啊
}
systemctl restart dhcpd #重启dhcp服务
配置完了DHCP,我们接下来配置TFTP
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 #可自定义修改路劲
disable = no #修改这里,yes改为no
per_source = 11
cps = 100 2
flags = IPv4
}
接下来就是引导文件的一些操作了
#我们需要将引导文件复制到tftp目录下(这里我使用的是tftp默认路劲)
#注意:下面的mnt目录是我本地光盘挂载的目录,你们如果跟我挂载的目录不一样,也需要修改成你们自己所挂载的目录
[[email protected] ~] cd /var/lib/tftpboot/
[[email protected] tftpboot] cp /usr/share/syslinux/pxelinux.0 .
[[email protected] tftpboot] cp /mnt/images/pxeboot/{vmlinuz,initrd.img} .
[[email protected] tftpboot] cp /mnt/isolinux/{vesamenu.c32,boot.msg} .
[[email protected] tftpboot] mkdir pxelinux.cfg
[[email protected] tftpboot] cp /mnt/isolinux/isolinux.cfg pxelinux.cfg/default
然后我们修改我们刚刚复制的default文件
vim pxelinux.cfg/default
default linux #第一行
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img text ks=ftp://10.30.40.4/ks.cfg #64行
修改完成以后,我们把本地的自动安装文件复制到ftp的默认目录下
[[email protected] ~] cd /var/ftp/
[[email protected] ~] cp /root/anaconda-ks.cfg ks.cfg
[[email protected] ~] vim ks.cfg ##编辑五六行
# Use CDROM installation media
url --url="ftp://10.30.40.4/pub" #必须修改,跟下面挂载目录对应
------------
%packages
@core
@base #加个包
%end
接下来我们将我们的镜像挂载到/var/ftp/pub目录(可以同时挂到两个目录)
[[email protected] ftp] mount /dev/cdrom /var/ftp/pub/
mount: /dev/sr0 is write-protected, mounting read-only
然后重启所有的服务
[[email protected] ~] systemctl restart dhcpd
[[email protected] ~] systemctl restart xinetd
[[email protected] ~] systemctl restart tftp.socket #重要!!!
[[email protected] ~] systemctl restart tftp
[[email protected] ~] systemctl restart vsftpd
测试
获取IP的过程,一闪而过
大概也就是怎么个情况
原文地址:https://blog.51cto.com/14113984/2431274