PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格(版本2.1) [2] 。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。 [1]
PXE 客户机(client)这个术语是指机器在PXE启动过程中的角色。一个PXE 客户机(client)可以是一台服务器、桌面级电脑、笔记本电脑或者其他装有PXE启动代码的机器。
PXE 协议大致上结合了DHCP和TFTP,虽然都有在两者上面有改进。DHCP用于查找合适的启动伺服器,TFTP用于下载初始引导程序和附加文件。
为了开始一个PXE自检会话,PXE固件广播一个带有明确的PXE选项DHCPDISCOVER包(扩展DHCPDISCOVER)到67/UDP端口(DHCP伺服器端口)。PXE选项是PXE固件有PXE能力的鉴定,但是会被一般的DHCP服务忽略。当固件受到从这样的服务受到DHCPOFFER包时,它会通过要求其提供配置信息来自我配置。
PXE,Pre-boot eXcution Environment
预启动执行环境,在操作系统之前运行
可用于远程安装、构建无盘工作站
服务端
运行DHCP服务,用来分配地址、定位引导程序
运行TFTP服务器,提供引导程序下载
客户端
网卡支持PXE协议
主板支持网络启动
准备centos7安装源(YUM)仓库
启用TFTP服务,并提供内核、引导程序
启动DHCP服务,用来分配地址、指出引导程序位置
配置启动菜单
一、PXE的部署思路
1.DHCP
(1)自动分配IP地址
(2)定位引导文件
(3)netxt-server //指向TFTP路径
filename //引导程序文件位置
2.TFTP
(1)简单文件传输协议 UDP协议 69端口
(2)优点:效率高 缺点:容量小
(3)主要存放:
引导程序pxelinux.0(syslinux包)
压缩内核vmlinuz
系统初始化文件initrd.img
启动菜单default
3.FTP(vsftpd)
(1)文件传输协议 系统镜像(centos7)
(2)优点:安全、容量大
(3)TCP协议 20端口(数据传输) 21端口(数据传输)
二、实验环境准备
1.实验会用到的安装包
dhcp、tftp-server、vsftpd、syslinux
2.因为PXE服务是局域网中进行,但是安装软件包需要在联网状态下进行,所以为了达到实验目的,又可以安装软件包,方法如下:
再添加一块网卡,一块网卡设置为NAT模式,一块网卡设置为仅主机模式,就可以实现目的
3.新建一台裸虚拟机centos7
需要注意的是:
(1)网络模式必须设置为仅主机模式
(2)DVD光盘镜像中不需要添加任何镜像,因为是要通过网络去获取镜像去进行安装
三、服务部署
1.查看网卡信息,看网卡二是否添加上
[root@localhost ~]# ifconfig
ens33: flags=4163 mtu 1500 //网卡一
inet 192.168.180.134 netmask 255.255.255.0 broadcast 192.168.180.255
inet6 fe80::3a0a:de11:61a8:ec22 prefixlen 64 scopeid 0x20
ether 00:0c:29:97:8e:66 txqueuelen 1000 (Ethernet)
RX packets 1164 bytes 554781 (541.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 443 bytes 40204 (39.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163 mtu 1500 //网卡二
ether 00:0c:29:97:8e:70 txqueuelen 1000 (Ethernet)
RX packets 76 bytes 7626 (7.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 150 bytes 25956 (25.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2.ens33网卡:NAT模式 ens36:仅主机模式
ens33网卡不需要做任何修改,主要是给ens36配置静态IP,操作如下:
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ //切换到network-scripts/目录下
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-eth ifdown-isdn ifdown-sit ifup ifup-ib ifup-plip ifup-routes ifup-tunnel network-functions-ipv6
ifcfg-lo ifdown-ib ifdown-post ifdown-Team ifup-aliases ifup-ippp ifup-plusb ifup-sit ifup-wireless
ifdown ifdown-ippp ifdown-ppp ifdown-TeamPort ifup-bnep ifup-ipv6 ifup-post ifup-Team init.ipv6-global
ifdown-bnep ifdown-ipv6 ifdown-routes ifdown-tunnel ifup-eth ifup-isdn ifup-ppp ifup-TeamPort network-functions
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
//在保证权限属性不变的前提下从ens33复制一份配置文件到ens36网卡中
[root@localhost network-scripts]# vim ifcfg-ens36 //进入网卡配置文件
修改配置文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static //网卡模式设置为静态
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
UUID=2d383c98-a297-4239-afe5-bb4c5766cbb3
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.100.100 //IP地址
NETMASK=255.255.255.0 //子网掩码
GATEWAY=192.168.100.1 //网关
:wq //保存退出
3.保存退出来后,重启网卡,并进行查看,静态IP地址192.168.100.100是否存在
[root@localhost network-scripts]# service network restart //重启网卡
Restarting network (via systemctl): [ 确定 ]
[root@localhost network-scripts]# ifconfig
ens33: flags=4163 mtu 1500
inet 192.168.180.134 netmask 255.255.255.0 broadcast 192.168.180.255
inet6 fe80::3a0a:de11:61a8:ec22 prefixlen 64 scopeid 0x20
ether 00:0c:29:97:8e:66 txqueuelen 1000 (Ethernet)
RX packets 2023 bytes 617912 (603.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 858 bytes 93831 (91.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163 mtu 1500
inet 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255
inet6 fe80::20c:29ff:fe97:8e70 prefixlen 64 scopeid 0x20
ether 00:0c:29:97:8e:70 txqueuelen 1000 (Ethernet)
RX packets 93 bytes 9507 (9.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 297 bytes 50707 (49.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.安装DHCP软件包
[root@localhost network-scripts]# yum install dhcp -y //安装DHCP软件包
,,,,//安装过程省略
2.复制模板到/etc/dhcp/dhcpd.conf的目录下,并直接覆盖
[root@localhost network-scripts]# cp -p /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf //复制模板
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes //直接覆盖
3.进入配置文件,修改配置文件
[root@localhost network-scripts]# vim /etc/dhcp/dhcpd.conf //进入配置文件
27 subnet 192.168.100.0 netmask 255.255.255.0 { //网段
28 range 192.168.100.20 192.168.100.20; //地址池
29 option routers 192.168.100.100; //网关
30 option domain-name-servers 8.8.8.8; //分配DNS地址
31 next-server 192.168.100.100; //指定TFTP服务器的地址
32 filename "pxelinux.0"; //指定PXE引导程序的文件名
33 }
:wq //保存退出
文件一:pxelinux.0(引导程序)
1.用于pxe网络安装的引导程序为pxelinux.0,由软件包syslinux提供,所以先安装syslinux软件包
[root@localhost network-scripts]# yum install syslinux -y //安装syslinux安装包
,,,,//安装过程省略
2.用管道符号过滤去查看pxelinux.0文件的路径
[root@localhost network-scripts]# rpm -ql syslinux | grep pxelinux.0
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0
3.上方在理思路的时候,可以看出要把pxelinux.0的文件放到TFTP站点中即可,所以下面要安装tftp-server软件包
[root@localhost network-scripts]# yum install tftp-server -y //安装TFTP软件包
,,,,//安装过程省略
4.查看tftp服务中配置文件的路径
[root@localhost network-scripts]# rpm -ql tftp-server
/etc/xinetd.d/tftp //配置文件
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot //站点
5.将文件pxelinux.0文件复制到tftp服务的站点下,并进行查看
[root@localhost network-scripts]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@localhost network-scripts]# ls /var/lib/tftpboot/
pxelinux.0
6.进入TFTP的配置文件中,把TFTP服务开启
[root@localhost network-scripts]# 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 //把no改为yes即可
per_source = 11
cps = 100 2
flags = IPv4
}
文件二和三:vmlinuz(压缩内核)和initrd.img(系统初始化文件)
1.这两个文件需要在镜像中去获取,又因为经想要挂在到FTP服务中,所以现在先要安装vsftpd软件包
[root@localhost network-scripts]# yum install vsftpd -y
2.查看FTP服务中站点路径
[root@localhost network-scripts]# rpm -ql vsftpd
/var/ftp //FTP站点
3.切换到站点目录下,创建一个centos7的目录,然后把镜像挂载到centos7目录中,前提,先看下镜像对不对,是否连接
[root@localhost network-scripts]# cd /var/ftp
[root@localhost ftp]# ls
pub
[root@localhost ftp]# mkdir centos7
[root@localhost ftp]# ls
centos7 pub
[root@localhost ftp]# mount /dev/sr0 /var/ftp/centos7 //挂载
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ftp]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 20G 3.4G 17G 17% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.0M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 6.0G 179M 5.9G 3% /boot
/dev/mapper/centos-home xfs 10G 37M 10G 1% /home
tmpfs tmpfs 183M 20K 183M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /var/ftp/centos7 //挂载成功
4.压缩内核和系统初始化文件在centos7的子目录中,如下所示:
[root@localhost ftp]# cd centos7/
[root@localhost centos7]# ls
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
[root@localhost centos7]# cd images/
[root@localhost images]# ls
efiboot.img pxeboot TRANS.TBL
[root@localhost images]# cd pxeboot/
[root@localhost pxeboot]# ls
initrd.img TRANS.TBL vmlinuz //两个文件所在位置
[root@localhost pxeboot]#
5.把两个文件复制到TFTP的站点下,并查看
[root@localhost pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/
[root@localhost pxeboot]# ls /var/lib/tftpboot/
initrd.img pxelinux.0 vmlinuz
文件四:default(启动菜单)
1.先切换到TFTP站点目录/var/lib/tftpboot下,创建一个目录“pxelinux.cfg(此名称为固定名称)”
[root@localhost pxeboot]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# ls
initrd.img pxelinux.0 vmlinuz
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# ls
initrd.img pxelinux.0 pxelinux.cfg vmlinuz
2.继续切换到新创建的pxelinux.cfg目录下,进入default启动菜单中进行启动菜单的配置,注意:配置文件中没有内容,需要全部手写
[root@localhost tftpboot]# cd pxelinux.cfg/
[root@localhost pxelinux.cfg]# ls
[root@localhost pxelinux.cfg]# vim default
修改配置文件
default auto //指定默认入口名称
prompt 1 //1 表示等待用户控制
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168/100/100/centos7
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://192.168/100/100/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168/100/100/centos7
开启服务
[root@localhost pxelinux.cfg]# systemctl stop firewalld.service //关闭防火墙
[root@localhost pxelinux.cfg]# setenforce 0 //关闭增强型安全功能
[root@localhost pxelinux.cfg]# systemctl start dhcpd //开启DHCP服务
[root@localhost pxelinux.cfg]# systemctl start tftp //开启TFTP服务
[root@localhost pxelinux.cfg]# systemctl start vsftpd //开启FTP服务
1.先查看之前安装的裸虚拟机,查看下设置要是仅主机模式
2.查看没问题后,点击开启虚拟机,进入之后会出现个boot:的界面,直接按回车键就会自动安装
3.当出现下面的界面,选择中文,点击继续
4.当来到安装信息的界面通过安装源就可以看出,并非是通过光盘镜像去进行安装,而是通过网络去完成