大纲:

1.   PXE的概念

2.   PXE的原理

3.   实现PXE安装CentOS6.8CentOS7.2


一、什么是PXE

          PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux


   PXE最直接的表现是,在网络环境工作站可以省去硬盘,但又不是通常所说的无盘站的概念,因为使用该技术的PC在网络方式下的运行速度要比有盘PC快3倍以上。当然使用PXE的PC也不是传统意义上的TERMINAL终端,因为使用了PXE的PC并不消耗服务器的CPU,RAM等资源,故服务器的硬件要求极低。


 

二、PXE的原理

流程化实现原理:

    支持PXE的电脑开机(预先打开网卡PXE功能,网络引导) 

    --->DHCP给该电脑一个IP地址,并指明下一跳tftp文件服务器

    ---> 电脑去tftp服务器上(/tftpboot 文件夹下面)下载到一个叫做 pxelinux.0的文件,并拿到pxelinux.cfg文件夹下的default配置文件 

    --->根据该配置文件加载内核等操作,同时该配置文件中可以指明ks.cfg文件的地址,这样实现全程无人化安装!


三、

1PXE实现Centos7.2的自动化安装

 环境:

    1.设备必须是支持PXE的网卡

    2.此次试验我将dhcp服务器和提供ks文件,yum仓库的ftp服务都放在了同一个主机上。

    3.为了不受环境中其他dhcp服务的影响,我将两台主机都放置在自己定义的vmnet3主机模式的网络中,并且不启用vmvare自带的虚拟dhcp服务器。

    4.dhcp服务器端和ftp服务器的IP为10.1.100.126   


  1. 首先安装dhcp服务器,tftp服务器,tftp客户端(在本机测试时用),ftp服务器

    tftp的根目录是/var/lib/tftpboot

[root@centos7-2 ~]# yum -y install tftp tftp-server dhcp vsftpd syslinux
[root@centos7-2 ~]# systemctl start tftp.socket

2.编辑dhcp的配置文件,提供filename和next-server(也就是tftp的地址)

[root@centos7-2 ~]# vim /etc/dhcp/dhcpd.conf
subnet 10.1.0.0 netmask 255.255.0.0 {
  range 192.168.11.100 192.168.11.200;
  option domain-name-servers 114.114.114.114;
  option domain-name "luxiangyu.com";
  option routers 10.1.100.126;
  default-lease-time 600;
  max-lease-time 7200;
  filename "pxelinux.0";       #文件由syslinux生成
  next-server 10.1.100.126;    # 指明tftp服务器的地址
}
[root@centos7-2 ~]# systemctl start dhcpd

3.复制必备的文件

[root@centos7-2 pub]# mount /dev/cdrom /var/ftp/pub/centos7
[root@centos7-2 pub]# mount /dev/cdrom /media/cdrom
[root@centos7-2 ~]# cp  -a  /usr/share/syslinux/{chain.c32,menu.c32,memdisk,mboot.c32,pxelinux.0} /var/lib/tftpboot
[root@centos7-2 ~]# cp  -a  /media/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot

4.创建一个菜单文件

[root@centos7-2 ~]# cd /var/lib/tftpboot/
[root@centos7-2 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@centos7-2 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
	prompt 5
	timeout 30
	MENU TITLE CentOS 7 PXE 

	LABEL linux
	MENU LABEL Install Centos 7 x86_64
	KERNEL vmlinuz
	APPEND initrd=initrd.img inst.repo=ftp://10.1.100.126/pub/centos7/
	

        LABEL linux auto_install
	MENU LABEL Install Centos 7.2 x86_64 auto
	KERNEL vmlinuz
	APPEND initrd=initrd.img inst.repo=ftp://10.1.100.126/pub/centos7 ks=
[root@centos7-2 ~]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── chain.c32
├── initrd.img
├── issue
├── mboot.c32
├── memdisk
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz	

5.确认服务都已经开启,进行测试。

  新建一个虚拟机,并且和服务器端在同一网络。设置网卡启动。

u=2293764772,730125432&fm=21&gp=0.jpg



1PXE实现Centos6.8的自动化安装

环境:

    1.设备必须是支持PXE的网卡

    2.此次试验我将dhcp服务器和提供ks文件,yum仓库的ftp服务都放在了同一个主机上。

    3.为了不受环境中其他dhcp服务的影响,我将两台主机都放置在自己定义的vmnet3主机模式的网络中,并且不启用vmvare自带的虚拟dhcp服务器。

    4.dhcp服务器端和ftp服务器的IP为10.1.100.124  


  1. 首先安装dhcp服务器,tftp服务器,tftp客户端(在本机测试时用),ftp服务器

    tftp的根目录是/var/lib/tftpboot

[root@centos6-8 ~]# yum -y install tftp tftp-server dhcp vsftpd syslinux
[root@centos6-8 ~]# chkconfig tftp on
[root@centos6-8 ~]# service restart xinetd
[root@Cent6-8 ~]# ss -nul 
UNCONN      0      0                    *:517                 *:*     
UNCONN      0      0                    *:518                 *:*     
UNCONN      0      0                    *:647                 *:*     
UNCONN      0      0            127.0.0.1:659                 *:*     
UNCONN      0      0                    *:68                  *:*     
UNCONN      0      0                    *:68                  *:*     
UNCONN      0      0                    *:68                  *:*     
UNCONN      0      0                    *:69

2.编辑dhcp的配置文件,提供filename和next-server(也就是tftp的地址)

[root@centos6-8 ~]# vim /etc/dhcp/dhcpd.conf
subnet 10.1.0.0 netmask 255.255.0.0 {
  range 10.1.100.120 10.1.100.130;
  option domain-name-servers 114.114.114.114;
  option domain-name "luxiangyu.com";
  option routers 10.1.100.124;
  default-lease-time 600;
  max-lease-time 7200;
  filename "pxelinux.0";       #文件由syslinux生成
  next-server 10.1.100.124;    # 指明tftp服务器的地址
}
[root@centos6-8 ~]# service dhcpd configtest
[root@centos6-8 ~]#service dhcpd start

3.复制必备的文件

[root@centos6-8 pub]# mount /dev/cdrom /var/www/html/centos6
[root@centos6-8 pub]# mount /dev/cdrom /media/cdrom
[root@centos6-8 ~]#  cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/
[root@centos6-8 ~]#  cp /media/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img}  /var/lib/tftpboot/
[root@centos6-8 ~]# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg}  /var/lib/tftpboot/
[root@centos6-8 ~]# ls /var/www/html/
centos6 centos6.cfg

4.创建一个菜单文件

[root@centos6-8 ~]# cd /var/lib/tftpboot/
[root@centos6-8 ~]#  mkdir /var/lib/tftpboot/pxelinux.cfg
[root@centos6-8 ~]# cp  /media/cdrom/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default
[root@centos6-8 ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
 default vesamenu.c32
#prompt 1
timeout 60
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.8!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux auto
  menu label ^Auto Install Centos 6.8
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=  #不用写init.repo 
label linux
  menu label ^Install Centos 6.8
  kernel vmlinuz
  append initrd=initrd.img method=http://192.168.11.1/centos6/yum/   
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot f

5.测试:

  新建一个虚拟机,并且和服务器端在同一网络。设置网卡启动。

blob.png



个人经验:

  注意PXE安装时在default文件中定义的区别,即在centos7中需要多定义inst.repo的地址