【文档】搭建 TFTP 服务器
操作系统:RockyLinux8
实验环境:VMware® Workstation 17 Pro
流程
TFTP 服务器做什么:存储引导文件、安装文件
# 安装 TFTP 服务 + 引导文件(syslinux)
# tftp-server:TFTP 服务
# syslinux:提供 PXE 引导文件 pxelinux.0 等内容
# xinetd(可选):管理 TFTP 服务
[root@TFTP ~]# yum install -y tftp-server syslinux xinetd vsftpd
配置 | TFTP 服务项
01 传统方式 | xinetd 管理 TFPT 服务
问:为什么
xinted
可选安装?
答:xinetd
不属于 PXE 环境中的必须组件。
在过往历史中主用于管理 TFTP 服务。见下文配置文件。
主对 TFTP 服务进行简化配置。并不阻碍批量部署。 —— 适用于老旧硬件资源有限下的部署。
在多物理设备批量部署环境下,须设置配置文件启用并允许多客户端同时访问。同时设置独立的目录用于小型文件的传输。
# 配置 TFTP 服务
[root@TFTP ~]# vim /etc/xinetd.d/tftp
service tftp # 服务名称
{socket_type = dgram # TFTP 协议标准protocol = udp # 规定要求wait = no # 允许多客户端连接user = root # 进程运行身份server = /usr/sbin/in.tftpd # TFTP 守护进程server_args = -s /var/lib/tftpboot # 限定可操作的目录(-s 安全模式)disable = no # 启用服务per_source = 11 # 限制源IP连接数cps = 100 2 # 连接限制:每秒连接数,超过则暂停2秒flags = IPv4 # 仅支持 IPv4
}[root@TFTP ~]# systemctl enable xinetd.service --now
02 现在方式 | systemd 管理 TFTP 服务
# TFTP 服务使用 systemd 的 socket 激活机制
[root@TFTP ~]# systemctl enable tftp.socket --now
默认根目录:/var/lib/tftpboot
,若需要修改:
[root@TFTP ~]# vim /usr/lib/systemd/system/tftp.service
...
[Service]
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
...
# 重载
[root@TFTP ~]# systemctl daemon-reload
配置 | 引导内容
# 你必须确认已安装以下模块
[root@TFTP ~]# yum install -y syslinux
引导内容是系统启动时,用于指引目标操作系统所用的菜单。
# 拷贝关键文件至 TFTP服务器目录
[root@TFTP ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # 引导程序
[root@TFTP ~]# cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ # 菜单模块
[root@TFTP ~]# cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/ # 依赖库
pxelinux.cfg
是一个引导类文件。意在以图形化菜单指引你怎么做。如下:
[root@TFTP ~]# mkdir /var/lib/tftpboot/pxelinux.cfg # 配置目录
DEFAULT vesamenu.c32 # 使用图形化菜单模块
PROMPT 0 # 禁止超时自动启动默认菜单项
MENU TITLE PXE Boot Menu - RHEL 8 # 设置菜单标题
TIMEOUT 100 # 菜单超时时间(单位:0.1秒)
ONTIMEOUT install_rhel8 # 超时后启动的菜单项LABEL install_rhel8 # 启动项标签MENU LABEL ^Install RHEL 8 # 菜单显示名称KERNEL vmlinuz # 内核文件APPEND initrd=initrd.img inst.repo=ftp://TFTP-Sever/pub/rhel8 inst.ks=ftp://TFTP-Sever/pub/ks.cfg quiet # 安装启动参数LABEL localMENU LABEL Boot from ^local driveLOCALBOOT 0
关于 APPEND
的补充描述:
initrd
:指定 临时的根文件系统(用于启动真实操作系统的运行环境)inst.repo
:指定操作系统安装文件的网络位置inst.ks
:指定 Kickstart (无人化值守)文件。如何配置见 【文档】准备 ks.cfg 文件quiet
:启动时不显示详细信息
获取 | 内核 + 引导镜像
操作系统的 ISO 内包含内核和引导安装。但实际上因为系统差异,其目录命名存在差异,如下所示:
- Ubuntu.iso:
casper/initrd
+casper/vmlinuz
- RHEL.iso:
imgaes/pxeboot/initrd.img
+images/pxeboot/vmlinuz
以 RockyLinux 为准,路径如下:
[root@TFTP ~]# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
额外补充
inst.repo 与 inst.ks 引用 FTP 服务器。这意味者你需要额外使用 vsftpd 服务。这是因为 FTP 服务适用于大型文件传输。其首要指引是 iso 镜像文件。