pxe服务器配置(代码片段)

rtoax rtoax     2022-12-03     783

关键词:

PXE服务器配置

荣涛
2022年1月25日

文档修改日志

日期修改内容修改人备注
2022年1月25日创建荣涛
2022年1月26日PXE BIOS/UEFI荣涛
2022年1月27日Kickstart荣涛
2022年2月11日补充荣涛

引言

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
$ sudo firewall-cmd --reload
  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的配置文档(在/var/lib/tftpboot/pxelinux/pxelinux.cfg/default配置文件对应位置添加inst.ks=http://192.168.122.174/kickstart/cclinux-2203-x86_64.cfg选项。)
  1. /var/lib/tftpboot/中创建子目录,并拷贝启动镜像文件。例如:
$ sudo mkdir -p /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

并查看tftp服务端口

$ netstat -a | grep tftp
udp6       0      0 [::]:tftp               [::]:*

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

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

#!/bin/bash
OS_NAME=os-1
sudo 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简述。

注意:

  1. 防火墙导致PXE的下载成功和失败。
  2. PXE过程可以进行抓包测试tcpdump -i enp0s8 port 67 or port 68 or port 69 or port 80 -n -e -vv

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系统配置网络服务器

略。

安装过程可能遇到的问题

1. No DEFAULT or UI configuration directive found!

注意在配置文件/var/lib/tftpboot/pxelinux/pxelinux.cfg/default指定的default vesamenu.c32/var/lib/tftpboot/pxelinux/vesamenu.c32是否存在。

2. DHCP: via enp1s0: unknown lease 192.168.122.34.

2. PXE: No more network device

2. PXE: Nothing to boot: No such file or directory

查看systemctl status dhcpd显示

2月 11 15:08:14 localhost.localdomain dhcpd[1920]: DHCPDISCOVER from 52:54:00:ee:17:09 via enp1s0
2月 11 15:08:15 localhost.localdomain dhcpd[1920]: DHCPOFFER on 192.168.122.191 to 52:54:00:ee:17:09 via enp1s0
2月 11 15:08:22 localhost.localdomain dhcpd[1920]: DHCPREQUEST for 192.168.122.34 (192.168.122.1) from 52:54:00:ee:17:09 via enp1s0: unknown lease 192.168.122.34.

参考链接

检查

Firewall – Check ufw has rules setup for Port 69
tftpd – Check daemon listening on Port 69
dhcpd – Check Running and no lease issues.
No File – Check the pxelinux.0 file is actually on the server!

TFTP命令

使用tftp命令下载tftp服务上的文件。

查看

[rongtao@localhost ~]$ arp -a| grep 192
? (192.168.122.191) at <incomplete> on enp1s0
? (192.168.122.190) at <incomplete> on enp1s0
? (192.168.122.110) at <incomplete> on enp1s0
? (192.168.122.109) at 52:54:00:0e:41:1e [ether] on enp1s0
? (192.168.122.42) at <incomplete> on enp1s0
? (192.168.122.34) at <incomplete> on enp1s0
_gateway (192.168.122.1) at 52:54:00:28:f6:80 [ether] on enp1s0

使用命令arp -d 192.168.122.191删除<incomplete>IP地址。

=====================================================================================================

搭建 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.
# 	https://blog.csdn.net/ItookapillinNJ/article/details/114122524

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.

通过pxe服务器批量安装系统(代码片段)

通过PXE服务器批量安装系统一、环境介绍1.PXE服务器版本2.挂载光盘3.配置yum仓库二、部署DHCP服务器1.安装相关软件包2.编辑DHCP配置文件3.重启dhcp服务4.放行防火墙端口5.关闭selinux三、部署TFTP服务器1.安装相关包2.修改TFTP服务配置... 查看详情

centos7搭建pxe批量安装系统(代码片段)

实现环境为在win7上虚拟机cenots7系统;pxe:一般服务器安装系统,都是通过光盘或u盘安装,使用pxe则可通过网络引导安装系统,而且还能自动完成所有安装步骤,下面是具体配置步骤;1、配置文件共享服务器,可以是nfs、http、f... 查看详情

pxe+kickstart(代码片段)

...务程序DHCP服务程序用于为客户端主机分配可用的IP地址,服务器与客户端主机进行文件传输的基础注意:虚拟机的虚拟网络编辑器中关闭自身的DHCP服务##安装DHCP服务程序软件包yuminstalldhcp##允许BOOTP引导程序协议,在让局域网内... 查看详情

pxe(代码片段)

...HCP服务批量装机装系统,自动获得入网参赛,很少拿一台服务器做DHCP服务,一般都是在路由器网络设备上去搭建。DHCP概述及原理?DynamicHostConfigurationProtocol–动态主机配置协议,由IETF(Internet网络工程师任务小组)组织制定,用来简化... 查看详情

虚拟机console基础环境配置——pxe引导无人值守安装环境配置(代码片段)

1.概述2.部署过程2.1部署DHCP服务器2.1.1YUM安装依赖环境2.1.2配置/etc/dhcp/dhcpd.conf2.2部署TFTP服务器2.2.1安装xinetd服务2.2.2安装tftp-server2.2.3配置tftp-server2.2.4启动xinetd服务2.3配置pxelinux引导环境2.3.1安装syslinux2.3.2编辑default和oslist2.3.3无 查看详情

linux网络服务——pxe服务器实现linux安装自动部署(包含操作详解)(代码片段)

PXE服务器实现Linux安装自动部署预启动执行环境PXE简介实验环境准备PXE服务器配置准备工作PXE服务器配置PXE无人值守自动化装机测试预启动执行环境预启动执行环境(PrebooteXecutionEnvironment,PXE)也被称为预执行环境... 查看详情

pxe网络装机之centos7(批量自动装机)(代码片段)

PXE远程服务器(192.168.1.1)所需准备:安装源(系统盘文件);TFTP服务;DHCP服务;Linux内核;能够向客户机裸机发送PXE引导程序;启动菜单及无人应答文件等。客户端要求:客户端的网卡支持PXE协议,且主板支持网络引导(现在... 查看详情

pxe服务器配置(代码片段)

PXE服务器配置荣涛2022年1月25日文档修改日志日期修改内容修改人备注2022年1月25日创建荣涛2022年1月26日PXEBIOS/UEFI荣涛2022年1月27日Kickstart荣涛2022年2月11日补充荣涛引言PXE(预启动执行环境,在操作系统之前运行)是由I... 查看详情

vmware实现pxe+kickstart无人值守安装centos7系统(代码片段)

文章目录PXE实现无人值批量部署服务器一、PXE概述1.1什么是PXE1.2什么是KickStart1.3安装的必要条件二、PXE工作原理2.1工作原理2.2本次实验环境2.3执行PXE+KiskStart安装需要准备内容三、安装步骤3.1配置YUM源3.2关闭防火墙、selinux3.3安... 查看详情

vmware实现pxe+kickstart无人值守安装centos7系统(代码片段)

文章目录PXE实现无人值批量部署服务器一、PXE概述1.1什么是PXE1.2什么是KickStart1.3安装的必要条件二、PXE工作原理2.1工作原理2.2本次实验环境2.3执行PXE+KiskStart安装需要准备内容三、安装步骤3.1配置YUM源3.2关闭防火墙、selinux3.3安... 查看详情

vmware实现pxe+kickstart无人值守安装centos7系统(代码片段)

文章目录PXE实现无人值批量部署服务器一、PXE概述1.1什么是PXE1.2什么是KickStart1.3安装的必要条件二、PXE工作原理2.1工作原理2.2本次实验环境2.3执行PXE+KiskStart安装需要准备内容三、安装步骤3.1配置YUM源3.2关闭防火墙、selinux3.3安... 查看详情

linux❀pxe+kickstart服务教研笔记(代码片段)

文章目录1、安装服务2、图形化界面配置Kickstart:是一种无人值守的安装方式,提前定义好Linux安装过程的配置文件,名为ks.cfg,这个文件预先定义了安装要求从而进行自动化安装;PXE:预启动执行环境是... 查看详情

通过使用pxe实现无人值守安装操作系统(代码片段)

一、环境准备一台centos7操作系统,地址:172.16.16.253/24关闭防火墙、selinux配置本地yum源二、服务安装yuminstall-ydhcptftp-serverhttpdsyslinux三、服务配置[root@pxe~]#cat/etc/dhcp/dhcpd.confsubnet172.16.16.0netmask255.255.255 查看详情

pxe自动装机(代码片段)

...术,工作再Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。若要搭建PXE网络体系,必须要满足以下条件:①客户机的网卡支持PXE协议(集成BOOTROM芯片),且主板支持网络引... 查看详情

pxe实现自动化部署linux系统(代码片段)

...人值守背景说明在数据中心,一次几十台甚至几百台服务器上线,系统安装将变得非常麻烦,系统安装好了,还会涉及很多配置,工作量都非常大。很多虚拟化平台如VMware,FusionCompute等安装一般通过ISO逐... 查看详情

vmware实现pxe+kickstart无人值守安装centos7系统(代码片段)

文章目录PXE实现无人值批量部署服务器一、PXE概述1.1什么是PXE1.2什么是KickStart1.3安装的必要条件二、PXE工作原理2.1工作原理2.2本次实验环境2.3执行PXE+KiskStart安装需要准备内容三、安装步骤3.1配置YUM源3.2关闭防火墙、selinux3.3安... 查看详情

pxe网络装机-->jluocc(代码片段)

...导时,从网卡芯片中把PXEclent调入内存执行,获取PXEserver配置、显示菜单,根据用户选择将远程引导程序下载到本机运行需要服务套件:DHCP,分配ip地址,定位引导程序TFTP(简单的文件传输协议,69),提 查看详情

通过使用pxe实现无人值守安装操作系统(代码片段)

...围default-lease-time3600;#默认超时时间next-server172.16.16.253;#TFTP服务器地址filename"pxelinux.0";#引导文件syslinux[root@pxe~]#cat/etc/xinetd.d/tftp#default:off#description:Thetftpserverservesfilesusingthetrivialfiletransfer\\#protocol.Thetftpprotocolisoftenusedtobootdis... 查看详情