PXE服务器配置
荣涛 2022年1月25日

文档修改日志

日期

修改内容

修改人

备注

2022年1月25日

创建

荣涛

2022年1月26日

PXE BIOS/UEFI

荣涛

2022年1月27日

Kickstart

荣涛

https://www.bilibili.com/video/BV1xL4y1t7CE/

引言

PXE(预启动执行环境,在操作系统之前运行)是由Intel公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。

1. 搭建需要满足的条件

  • 客户端
  1. 客户机的网卡要支持PXE协议(集成BOOTROM芯片),且主板支持网络引导。一般大多数服务器主机都支持,只需在BIOS设置中允许从 Network 或 LAN 启动即可。
  2. 客户端一旦启动,先向服务端DHCP请求IP地址,从TFTP接收启动文件。
  • 服务端
  1. 网络中有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置。
  2. 服务器要通过 TFTP服务(简单文件传输协议)来提供系统内核和引导镜像文件的下载。
  3. 通过HTTP(s),FTP,NFS提供镜像安装源服务;

2. PXE装机流程

  1. 将ISO镜像或者安装树到HTTP(s),FTP,NFS服务器;
  2. 配置TFTP服务和DHCP服务,并且在PXE服务器上启动TFTP服务;
  3. 启动客户端开始安装;

GRUB2 boot loader不仅支持TFTP,而且支持HTTP的网络启动。但是使用HTTP发送vmlinuz和initrd启动文件可能失败,推荐使用TFTP服务器。

相关的参考链接:

搭建 PXE 远程安装服务器

1. 为基于BIOS的客户端配置PXE服务器

  1. 安装tftp
$ sudo dnf install tftp-server dhcp-server
  1. 允许外界访问tftp
$ sudo firewall-cmd --add-service=tftp
success
  1. 使用SYSLINUX配置DHCP服务,配置文件/etc/dhcp/dhcpd.conf内容如下:
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;

subnet 192.168.122.0 netmask 255.255.255.0 {
	  option routers 192.168.122.1;
	  range 192.168.122.221 192.168.122.224;

	  class "pxeclients" {
	  match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
	  next-server 192.168.122.22;

	  if option architecture-type = 00:07 {
        filename "BOOTX64.efi";
      } else {
	    filename "pxelinux/pxelinux.0";
	  }
	}
}

我的PXE服务器的IP地址为192.168.122.22/24,子网掩码255.255.255.0,网关192.168.122.1

注意:如果你已经配置了DHCP服务,那么需要在DHCP服务器配置这一步。

  1. 访问SYSLINUXpxelinux.0文件

首先挂载ISO镜像,并重中找到syslinux-tftpboot数据包(在ISO镜像中的路径可能为./AppStream/Packages/syslinux-tftpboot,如果没有,使用syslinux-nonlinux);

  1. 然后将其解压:
$ rpm2cpio syslinux-tftpboot-6.04-0.19.el9.noarch.rpm | cpio -div

解压后包含的文件如下:

$ pwd
/home/rongtao/syslinux-tftpboot/tftpboot
$ ls
cat.c32        dir.c32       ifcpu64.c32      libmenu.c32  pcitest.c32   sysdump.c32
chain.c32      disk.c32      ifcpu.c32        libutil.c32  pmload.c32    syslinux.c32
cmd.c32        dmi.c32       ifmemdsk.c32     linux.c32    poweroff.c32  vesa.c32
cmenu.c32      dmitest.c32   ifplop.c32       lpxelinux.0  prdhcp.c32    vesainfo.c32
config.c32     elf.c32       kbdmap.c32       ls.c32       pwd.c32       vesamenu.c32
cptime.c32     ethersel.c32  kontron_wdt.c32  lua.c32      pxechn.c32    vpdtest.c32
cpu.c32        gfxboot.c32   ldlinux.c32      mboot.c32    pxelinux.0    whichsys.c32
cpuid.c32      gpxecmd.c32   lfs.c32          memdisk      reboot.c32    zzjson.c32
cpuidtest.c32  hdt.c32       libcom32.c32     meminfo.c32  rosh.c32
debug.c32      hexdump.c32   libgpl.c32       menu.c32     sanboot.c32
dhcp.c32       host.c32      liblua.c32       pci.c32      sdi.c32
  1. 创建/var/lib/tftpboot/pxelinux/文件夹,将上面的文件都拷贝到/var/lib/tftpboot/pxelinux
$ sudo mkdir -p /var/lib/tftpboot/pxelinux
$ sudo cp /home/rongtao/syslinux-tftpboot/tftpboot/* /var/lib/tftpboot/pxelinux
  1. 创建/var/lib/tftpboot/pxelinux/pxelinux.cfg/文件夹
$ sudo mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
  1. /var/lib/tftpboot/pxelinux/pxelinux.cfg/中创建名为default的配置文件,内容如下:
default vesamenu.c32
prompt 1
timeout 600

display boot.msg

label linux
  menu label ^Install CCLinux 2203 rc1
  menu default
  kernel images/cclinux-2203-rc1-x86_64/vmlinuz
  append initrd=images/cclinux-2203-rc1-x86_64/initrd.img ip=dhcp inst.repo=http://192.168.122.22/CCLinux-2203-x86_64-rc1/
label vesa
  menu label Install CCLinux 2203 rc1 with ^basic video driver
  kernel images/cclinux-2203-rc1-x86_64/vmlinuz
  append initrd=images/cclinux-2203-rc1-x86_64/initrd.img ip=dhcp inst.xdriver=vesa nomodeset inst.repo=http://192.168.122.22
/CCLinux-2203-x86_64-rc1/
label rescue
  menu label ^Rescue installed CCLinux 2203 rc1
  kernel images/cclinux-2203-rc1-x86_64/vmlinuz
  append initrd=images/cclinux-2203-rc1-x86_64/initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff

注意

  • 没有运行时镜像,安装程序将不起作用。使用inst.stage2启动选项指定安装镜像的位置;
  • 安装源位置用inst.repo指定,必须包含.treeinfo文件;
  • 当你选择一个DVD作为安装源,.treeinfo文件指向BaseOSAppStream仓库。
  • 当使用kickstart时,需要添加inst.ks=选项,具体参考Kickstart的配置文档。
  1. /var/lib/tftpboot/中创建子目录,并拷贝启动镜像文件。例如:
$ sudo mkdir /var/lib/tftpboot/pxelinux/images/cclinux-2203-rc1-x86_64/
$ pwd
/var/www/html/CCLinux-2203-x86_64-rc1
$ sudo cp images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/images/cclinux-2203-rc1-x86_64/
  1. 在DHCP服务器上,开启使能DHCP服务。
$ sudo systemctl start dhcpd
$ sudo systemctl enable dhcpd
Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service → /usr/lib/systemd/system/dhcpd.service.
  1. 开启使能tftp服务
$ sudo systemctl start tftp.service
$ sudo systemctl enable tftp.service

PXE启动服务器现在就配置完成了,你可以用PXE方式启动客户端了。

如果说PXE服务器是虚拟机环境,那么可以在组主机上测试使用pxe安装,如下:

OS_NAME=os-1
virt-install --virt-type=kvm \
	--name $OS_NAME\
	--memory 8192 \
	--vcpus 8 \
	--os-type=linux \
	--os-variant=centos-stream9 \
	--pxe \
	--network=default,model=virtio \
	--disk path=/var/lib/libvirt/images/$VM_NAME.qcow2,size=10,format=qcow2 \
	--check all=off

安装过程中仍旧需要手动配置anaconda流程,这需要kickstart,后文将对kickstart简述。

注意:防火墙导致PXE的下载成功和失败。

2. 为基于UEFI的客户端配置PXE服务器

重要

  • 本章节所有配置文件都为示例。配置详情取决于你的架构和需求;
  • 红帽UEFI PXE启动支持基于小写MAC地址格式的grub菜单文件,例如,grub.cfg-01-aa-bb-cc-dd-ee-ff

步骤

  1. root用户,安装tftp和dhcp服务(与BIOS章节相同)
  2. 允许外界访问tftp(与BIOS章节相同)
  3. 配置DHCP服务器,(与BIOS章节相同)
  4. 挂载ISO镜像,获取rpm包shimgrub2-efi
  5. shim包中提取BOOTX64.efi文件,从grub2-efi中提取grubx64.efi文件(BOOTX64.EFI文件注意大小写):
$ rpm2cpio shim-x64-15-15.el8_2.x86_64.rpm | cpio -div
$ rpm2cpio grub2-efi-x64-2.06-13.el9.x86_64.rpm | cpio -div

于是乎就得到了BOOTX64.EFI(注意大小写)和grubx64.efi文件。

  1. 创建文件夹mkdir /var/lib/tftpboot/uefi并拷贝文件
$ pwd
/home/rongtao/grub2-efi/boot/efi/EFI/centos
$ sudo cp grubx64.efi /var/lib/tftpboot/uefi
  1. /var/lib/tftpboot/目录中添加一个配置文件grub.cfg,内容如下:
set timeout=60
menuentry 'CCLinux 2203 rc1' {
	linuxefi images/cclinux-2203-rc1-x86_64/vmlinuz ip=dhcp inst.repo=http://192.168.122.22/CCLinux-2203-x86_64-rc1/
	initrdefi images/cclinux-2203-rc1-x86_64/initrd.img
}

这可以参考上文BIOS配置过程中创建的文件/var/lib/tftpboot/pxelinux/pxelinux.cfg/default

注意:参考BIOS配置过程中的注意事项(关于repo,.treeinfo,BaseOS,AppStream

  1. /var/lib/tftpboot/中创建子目录,并拷贝启动镜像文件。(与BIOS章节相同)
  2. 启动并使能dhcp;(与BIOS章节相同)
  3. 启动并使能tftp;(与BIOS章节相同)

TODO:由于我是在虚拟机环境测试的,我的virt-install版本2.2.1不支持uefi,所以并没有测试。

3. 为IBM Power系统配置网络服务器

略。

搭建 PXE 远程安装服务器-OLD-Fatal

1. 安装并启用 TFTP 服务

1.1. 安装TFTP服务

$ sudo dnf -y install tftp-server xinetd

1.2. 修改TFTP服务的配置文件并启动

vim /etc/xinetd.d/tftp
	protocol                = udp		#TFTP默认使用UDP协议	
    wait                    = no		#no表示客户机可以多台一起连接,yes表示客户机只能一台一台连接
    server_args             = -s /var/lib/tftpboot		#指定TFTP根目录(引导文件的存储路径)
    disable                 = no		#no表示开启TFTP服务
# default: off
# Description: The tftp server serves files using the trivial file transfer
# 	protocol, Thsi tftp protocol is oftern used to boot diskless 
# 	workstations, download configuration file to network-aware printers,
# 	and to start the installation process for some  operation systemds.
# 	

service tftp
{
	socket_type	= dgram
	protocol	= udp
	wait		= no
	user		= root
	server		= /usr/sbin/in.tftpd
	server_args	= -s /var/lib/tftpboot
	disable		= no
	per_source	= 11
	cps		= 100 2
	flags		= IPv4
}

开启服务

systemctl start tftp
systemctl start xinetd

2. 安装DHCP服务

$ sudo dnf install dhcp-server

配置:

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
ddns-update-style interim;
ignore client-updates;
filename "grubaa64.efi";
next-server 192.168.122.22;
subnet 192.168.122.0 netmask 255.255.255.0 {
  range dynamic-bootp  192.168.122.213 192.168.122.215;
  default-lease-time 600;
  max-lease-time 7200;                                                                                                      
}

3. 准备 Linux 内核、初始化镜像文件

$ sudo cp vmlinuz /var/lib/tftpboot/
$ sudo cp initrd.img /var/lib/tftpboot/

4. 准备 PXE 引导程序

$ sudo dnf install syslinux
$ sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

5. 安装FTP服务,准备CentOS 7 安装源

我先使用httpd试试。

6. 配置启动菜单文件

$ sudo mkdir /var/lib/tftpboot/pxelinux.cfg

7. 关闭防火墙,验证 PXE 网络安装

8. 验证pxe安装

参考PERFORMING AN ADVANCED RHEL INSTALLATION

参考链接


Copyright (C) CESTC Com.