[转帖]PXE服务器配置

pxe,服务器,配置 · 浏览次数 : 0

小编点评

## PXE 网络安装服务器搭建指南 **1. 安装TFTP服务** * $ sudo dnf -y install tftp-server * 启动TFTP服务 systemctl start tftpsystemctl start xinetd12 **2. 配置DHCP服务** * $ sudo dnf install dhcp-server1 * 配置DHCP服务器文件:/usr/share/doc/dhcp-server/dhcpd.conf.example * 修改默认 lease时间和最大 lease时间: ``` 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/12 **4. 准备 PXE 引导程序** * $ sudo dnf install syslinux * $ sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/12 **5. 安装FTP服务,准备CentOS 7 安装源** * $ sudo dnf install ftp-server * 配置FTP服务:/usr/share/doc/ftp-server/ftpd.conf * 将CentOS 7 安装源复制到:/usr/share/doc/ftp-server/ftpd.conf.example * 配置TFTP服务器地址:/usr/share/doc/ftp-server/ftpd.conf **6. 配置启动菜单文件** * $ sudo mkdir /var/lib/tftpboot/pxelinux.cfg1 * 关闭防火墙: ``` service iptables disable ``` **7. 验证pxe安装** * $ pxe install * 验证安装版本: ``` pxe install -version ``` **8. 验证pxe安装** * $ pxe install -version * 验证安装版本: ``` pxe install -version ```

正文

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
  1. 允许外界访问tftp
$ sudo firewall-cmd --add-service=tftp
success
$ sudo firewall-cmd --reload
  • 1
  • 2
  • 3
  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";
  }
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

我的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
  • 1

解压后包含的文件如下:

$ 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  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
  • 2
  1. 创建/var/lib/tftpboot/pxelinux/pxelinux.cfg/文件夹
$ sudo mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
  • 1
  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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

注意

  • 没有运行时镜像,安装程序将不起作用。使用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
  • 2
  • 3
  • 4
  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
  • 2
  • 3
  1. 开启使能tftp服务
$ sudo systemctl start tftp.service
$ sudo systemctl enable tftp.service
  • 1
  • 2

并查看tftp服务端口

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

安装过程中仍旧需要手动配置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
  • 1
  • 2

于是乎就得到了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
  • 2
  • 3
  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
}
  • 1
  • 2
  • 3
  • 4
  • 5

这可以参考上文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.
  • 1
  • 2
  • 3

参考链接

检查

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

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

1. 安装并启用 TFTP 服务

1.1. 安装TFTP服务

$ sudo dnf -y install tftp-server xinetd
  • 1

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服务
  • 1
  • 2
  • 3
  • 4
  • 5
# 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
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

开启服务

systemctl start tftp
systemctl start xinetd
  • 1
  • 2

2. 安装DHCP服务

$ sudo dnf install dhcp-server
  • 1

配置:

#
# 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;                                                                                                      
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

$ sudo cp vmlinuz /var/lib/tftpboot/
$ sudo cp initrd.img /var/lib/tftpboot/
  • 1
  • 2

4. 准备 PXE 引导程序

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

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

我先使用httpd试试。

6. 配置启动菜单文件

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

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

8. 验证pxe安装

参考PERFORMING AN ADVANCED RHEL INSTALLATION

参考链接


Copyright (C) CESTC Com.
文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux25158 人正在系统学习中

与[转帖]PXE服务器配置相似的内容:

[转帖]PXE服务器配置

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

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]Windows Server 2022 简体中文版、英文版下载 (updated Oct 2022)

https://sysin.org/blog/windows-server-2022/ Windows Server 2022 正式版,2022 年 10 月更新,VLSC Posted by sysin on 2022-10-27 Estimated Reading Time 8 Minutes