「CentOS」- 搭建PXE服务

  CREATED BY JENKINSBOT

本文介绍了”如何手动搭建整个PXE环境“。

如果你觉得手动部署整个PXE环境非常麻烦、或者管理不便,你可以考虑使用「Cobbler」服务,它是对PXE环境的封装,支持命令行管理、WEB管理、提供了相关的API。

环境概述

关于PXE客户端

作为PXE客户端的是Microserver Gen10,一台网卡支持PXE的GEN10,支持PXE启动

关于PXE服务端

作为PXE服务端的是ThinkPad T540P,Debain 8,一台笔记本,用于搭建PEX环境。

网络环境

网段:172.31.250.0/24
服务端:172.31.250.1
客户端:172.31.250.X,客户端的IP地址是由DHCP服务器返回的,所以X的值要启动了之后才知道

两台设备的有线网卡直连,所以TFTP、DHCP、HTTP服务都在笔记本上。

搭建环境

使用ISC DHCP提供DHCP服务;使用TFTP服务提供预启动文件;使用HTTP服务提供操作系统安装中需要的文件;

#1 网络设置

在笔记本(PXE服务端)上执行,为有线网卡添加IP地址:

#!/bin/sh

# 方法一、使用NetworkManager添加
# 为有线网卡添加IP地址,不需要设置网关、DNS这些信息
nmcli connection add connection.id enp0s25 \
      type ethernet connection.interface-name enp0s25 \
      +ipv4.addresses 172.31.250.1/24 \
      ipv4.method manual

# 方法二、直接使用ip命令添加
ip address add 172.31.250.1/24 dev enp0s25

#2 搭建DCHP服务

在笔记本(PXE服务端)上执行,搭建DHCP服务,添加如下配合:

subnet 172.31.250.0 netmask 255.255.255.0 {
        range 172.31.250.2 172.31.250.254;
        filename "/pxelinux.0";
        next-server 172.31.250.1;
}

# next-server - 指定了TFTP服务器的地址
# filename - 指定了要从tftp服务器加载的文件

#3 搭建TFTP服务

#!/bin/sh

################################################################################
# 1. 安装服务,并启动
#     在Debain 8中,配置文件为/etc/default/tftpd-hpa,TFTP的根目录为/srv/tftp/。
################################################################################
apt-get install tftpd-hpa
systemctl start tftpd-hpa.service

################################################################################
# 2. 准备部署需要的文件
################################################################################
# (部署引导程序)部署syslinux,它负责显示一个引导菜单
# 下载syslinux并保存到tftp根目录中。这个软件包中包含了pxelinux.0以及isolinux相关的文件
yum install -y syslinux
cp -dvr /usr/share/syslinux/* /srv/tftp/

# (设置引导菜单)设置syslinux显示的菜单内容
# 创建/srv/tftp/pxelinux.cfg/default文件,且文件内容如下
mkdir /srv/tftp/pxelinux.cfg/
cat >> /srv/tftp/pxelinux.cfg/default << EOF
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local

menu title ########## PXE Boot Menu ##########

label 1
menu label ^1) Install CentOS 7 x64 with Local Repo
kernel vmlinuz
append initrd=initrd.img method=http://172.31.250.1/mirror/ devfs=nomount ip=dhcp
EOF

# (系统安装程序)部署操作系统的安装程序
# 复制操作系统安装程序。这些文件的作用就是操作系统安装程序
# 挂载系统安装镜像,返回复制vmlinuz、initrd.img文件
mount CentOS-7-x86_64-Minimal-1708.iso /path/to/dir/
cp /path/to/dir/images/pxeboot/vmlinuz /srv/tftp/
cp /path/to/dir/images/pxeboot/initrd.img /srv/tftp/
umount /path/to/dir/

#4 搭建HTTP服务

为什么要搭建HTTP服务?

在TFTP中的那些文件只是一些”引导文件“,这些”引导文件“的作用就是引导并启动”操作系统安装程序“,而”操作系统安装程序“来执行操作系统的安装,但是安装操作系统的过程中需要一些文件(比如软件包),这些文件我们还没有。

而HTTP服务的作用就是提供这些文件的下载。所以,我们不光需要HTTP服务,我们还需要在HTTP服务中部署这些文件(软件包)。

这个HTTP服务就是pxelinux.cfg/default文件中的http://172.31.250.1/mirror,其中mirror目录中的内容就是CentOS操作系统镜像文件的内容,所以直接挂载iso文件到mirror目录即可:

# mount CentOS-7-x86_64-Minimal-1708.iso /path/to/mirror/

然后测试能够访问即可。

测试PXE启动

测试时使用在KVM中Guest测试,因为GEN10的PXE启动没有调试信息,失败了啥也不说。

注释说明

[1]. 如果你的无线网卡已经接入了外部网络(STATION MODE),那它就无法加入主机的桥接。

参考文献

Setting Up a PXE Server
使用KickStart进行CentOS7.4 的自动部署安装
网络PXE安装系统环境搭建
2.4.3. Configuring Static Routes Using nmcli
Installing Debian using network booting
Setting up a ‘PXE Network Boot Server’ for Multiple Linux Distribution Installations in RHEL/CentOS 7