PXE
- 什么是PTE
PXE(预启动执行环境)是由Inter公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或整个操作系统
PXE批量部署的优点
- 规模化:同时装配多台服务器,无需每一台单独安装操作系统;
- 自动化:实现服务器的自动安装及自动配置各种服务;
- 远程实现:不需要光盘、U盘等安装介质,方便快捷的同时又可以保障服务器安全。
能使用PXE装机的前提
客户机
- 客户机的网卡要支持PXE协议(集成BOOTROM芯片)。
- 网卡自带DHCP服务和TFTP服务。
- 主板支持网络引导。有一些需在BIOS设置中允许从 Network 或 LAN 启动即可。
服务端
- 配置 DHCP 服务器 :为客户机自动分配地址、指定引导文件位置(指明TFTP服务器地址)。
- 服务器要开启 TFTP 服务(简单文件传输协议):用来提供系统内核和引导镜像文件的下载。
- 安装软件包syslinux :提供PXE引导程序。
- 服务器提供FTP服务(或http) :提供安装源(例如镜像文件系统等)。
2.4 PXE装机需要的四大文件
-
pxelinux.0:引导程序。(来自syslinux程序)
-
default:引导程序的配置文件。(需要手写,可参考光盘 isolinux 目录下的 isolinux.cfg 文件)
-
vmlinuz:内核文件。(从光盘中获取,位于 isolinux 目录下)
-
initrd.img: 系统启动镜像文件。(从光盘中获取,位于 isolinux 目录下)
说明initrd的作用:
initrd 的英文含义是 boot loader initialized RAM disk,即由引导程序初始化的RAM磁盘。initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起, 并作为内核引导过程的一部分进行加载。内核然后会将这个initrd文件作为其阶段引导过程的一部分来加载模块,这样才能在以后的引导过程中使用真正的文 件系统,并挂载实际的根文件系统。根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核 会多么庞大、臃肿。所以可以把initrd看做是在启动过程中连接内核与根文件系统的一个桥梁。
搭建所需要的服务
PXE远程安装服务器集成了CentOS7安装源、TFTP服务、DHCP服务,能够向客户机裸机发送PXE引导程序、Linux内核、启动菜单等数据,以及提供安装文件。
DHCP服务
DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
TFTP服务
-
TFTP(简单文件传输协议),是一种基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小型文件传输的应用场合。TFTP服务默认由xinetd服务进行管理,使用UDP69端口。
-
TFTP服务一般只在装机这种场景下使用,用于传输内核和引导文件。因为安全性不高。
-
自带的站点:/var/lib/tftpboot
syslinux
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间, 并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后, sysLinux启动盘就可以引导各种基于DOS的工具, 以及MS-DOS/Windows或者 任何其它操作系统。
安装syslinux程序后,可获得 pxelinux.0 文件。
vsftp:安装系统镜像文件获取方式
可以使用http、ftp等方式,ftp文件传输的一种,vsftpd是提供ftp服务的软件之一。
安装四个软件包:dhcp、tftp-server、vsftpd、syslinux。
PXE脚本一键部署
#!/bin/bash
##PXE一键自动装机
#
###检查tftp-server是否安装
rpm -q tftp-server xinetd
if [ $? -ne 0 ];then
yum install -y tftp-server xinetd &> /dev/null
else
echo "已安装"
fi
sed -i '14 s/yes/no/' /etc/xinetd.d/tftp
#
systemctl start tftp
systemctl enable tftp
systemctl start xinetd
systemctl enable xinetd
#
echo "tftp服务启用成功"
#
###检查DHCP服务是否安装
rpm -q dhcp
if [ $? -ne 0 ];then
yum install -y dhcp &> /dev/null
else
echo "已安装"
fi
#
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#
ip=`cat /etc/sysconfig/network-scripts/ifcfg-ens33 | grep "IPADDR" | awk -F '=' '{print $2}'`
##过滤出ip地址
sed -i '14s/#/ /' /etc/dhcp/dhcpd.conf
##禁用DNS动态更新
sed -i '14a next-server '$ip';' /etc/dhcp/dhcpd.conf
###指定tftp服务器地址
sed -i '15a filename "pxelinux.0"; ' /etc/dhcp/dhcpd.conf
##指定下载PXE引导程序文件
sed -i '34s/10.254.239/192.168.46/' /etc/dhcp/dhcpd.conf
sed -i '34s/224/0/' /etc/dhcp/dhcpd.conf
##设置要分配的网段地址和子网掩码
sed -i '35c range 192.168.46.100 192.168.46.200;' /etc/dhcp/dhcpd.conf
##设置ip地址池 整行替换
sed -i '36 s/rtr-239-0-1.example.org, rtr-239-0-2.example.org/'$ip/'' /etc/dhcp/dhcpd.conf
##默认网关设置为tftp服务器的ip地址
#
##将dhcp服务设置为开机自启
systemctl start dhcpd
systemctl enable dhcpd
#
##准备linux内核 初始化镜像文件
cd /mnt/images/pxeboot
cp vmlinuz /var/lib/tftpboot
cp initrd.img /var/lib/tftpboot
#
##准备PXE引导程序
rpm -q syslinux
if [ $? -ne 0 ];then
yum install -y syslinux &> /dev/null
else
echo "已安装"
fi
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
#
#
###安装FTP服务 准备centos7安装源
yum install -y vsftpd &> /dev/null
mkdir /var/ftp/centos7
cp -rf /mnt/* /var/ftp/centos7
systemctl start vsftpd
systemctl enable vsftpd
#
###启动菜单文件
mkdir /var/lib/tftpboot/pxelinux.cfg
echo 'default auto
prompt 1
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://'$ip'/centos7
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://'$ip'/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://'$ip'/centos7
' > /var/lib/tftpboot/pxelinux.cfg/default
#
systemctl stop firewalld
#关闭防火墙
setenforce 0
#关闭安全防护
#
echo "PXE一键安装成功,请到虚拟机测试!"
运行脚本即可