基于PXE与NFS共享的Ubuntu安装配置过程

ops/2024/12/26 21:14:56/

假设存在服务器A、B、C
其中A为待装系统的服务器,DHCP(IP池:192.168.0.150~192.168.0.160),假设需要安装的系统为Ubuntu 22.04 Desktop
其中B为PXE服务端服务器,IP: 192.168.0.100,这里将以CentOS系统进行说明
其中C为NFS所在服务器,IP: 192.168.1.101

PXE的基本原理

PXE 基本原理与启动流程

一、PXE 启动流程

1. 网卡准备:

设备 A 网卡的 PXE 功能模块就绪,这是启动的初始状态,为后续网络引导操作做好准备。

2. IP 申请:

设备 A 网卡通过 DHCP Client 向本网段广播,请求分配 IP 地址。此步骤确保设备 A 能接入网络,获得通信基础。

3. 配置下发:

DHCP Server 响应请求,为设备 A 下发 IP 地址,同时在 DHCP 报文中包含关键配置。其中 Option 66 用于指定引导文件名称,Option 67 用于指定引导文件所在设备 B 的 IP,为设备 A 指明引导资源位置。

4. 引导文件获取:

设备 A 获得 IP 及引导指向信息后,使用 TFTP 协议连接设备 B,读取并加载指定引导文件。例如常见的引导文件有 netboot 中的 pxelinux.0,加载该文件后,还会同时加载 pxelinux.0/default 的菜单配置文件,此配置文件将决定后续加载走向。

5. 内核与初始化磁盘加载:

依据菜单配置文件设定,设备 A 从 TFTP 服务器加载内核(vmlinuz)与初始化磁盘(intrd),为系统启动提供核心支撑。

6. 后续引导执行:

加载的内核依据不同参数执行不同操作。

  • 可通过 http 协议加载引导指定 URL中的 ISO 文件,实现基于网络的系统镜像引导。
  • 还能通过 NFS 协议加载引导指定的 NFS 目录(形式为设备 C 的 IP:/<NFS 共享路径>,这里的目录 要求是 ISO 文件通过 mount -o loop 在 NFS Server 上挂载后的映射目录),以适配不同网络存储的引导需求。

二、启动过程控制权移交过程

  1. 启动之初,系统控制权在 BIOS,它负责硬件初始化等基础操作。
  2. 随着 PXE 启动流程推进,控制权移交给 PXE ROM,PXE ROM 开始介入网络引导相关操作。
  3. 接着控制权转移至 pxelinux.0,由它进一步协调引导文件加载、配置读取等工作。
  4. 之后控制权到相对于 pxelinux.0 的 vmlinuz 与 intrd,此时开始为内核启动做准备,加载必要的内核与初始化磁盘。
  5. 最后控制权进入 ISO 中的 vmlinuz 与 intrd 或者 ISO 中指定的其他引导过程,完成系统的深度引导,直至系统启动完成。

配置过程

1. 修改DHCP Server配置

为DHCP服务端添加Option 66与Option 67配置项,66请设定为“pexlinux.0”(不含引号);67请设定为服务器B的IP地址

2. 搭建用于PXE启动的TFTP服务器(服务器B配置)

netboot.tar.gz下载地址:ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/netboot.tar.gz" rel="nofollow">netboot.tar.gz

以下是在 CentOS 7.9 系统下,PXE 所在服务器的基本配置步骤:

a. 安装相关服务:

通过命令 yum install xinetd tftp-server -y 安装 xinetd 和 tftp-server。xinetd 是一种超级服务器,用于管理多种网络服务,TFTP 服务常用于 PXE 启动过程中的文件传输,安装这两个服务为后续 PXE 功能实现提供基础。

b. 配置 TFTP 服务:

使用 vim /etc/xinetd.d/tftp 编辑 tftp 服务配置文件,将 disable = yes 改为 disable = no,这一步是启用 TFTP 服务,使其能正常响应客户端的文件传输请求。

c. 服务管理操作:

依次执行以下命令:

systemctl daemon-reload # 重新加载 systemd 守护进程配置,确保新的服务配置生效。
systemctl reload xinetd # 重新加载 xinetd 服务,应用对其配置的更改,如 TFTP 服务的启用设置。
systemctl reload tftp # 同样重新加载 tftp 服务,保证服务状态更新。
systemctl -s enable xinetd # 作用是设置 xinetd 服务开机自启,确保服务器重启后 PXE 相关服务依然可用。
systemctl -s enable tftp # 设置 tftp 服务开机自启。
systemctl restart xinetd # 重启 xinetd 服务,让配置完全生效,启动相关网络服务监听。
systemctl restart tftp # 重启 tftp 服务,确保其以正确配置运行,准备好传输文件。

d. 准备引导文件:

将 netboot.tar.gz 放入 /var/lib/tftpboot 中,并解压缩:tar zxvf netboot.tar.gz。这些引导文件是 PXE 启动过程中客户端所需的基础文件,解压缩到指定目录以供后续访问。

e. 放置内核及初始化文件:

执行 mkdir /var/lib/tftpboot/ubuntu,创建用于存放 ubuntu 相关文件的目录,然后将 ubuntu 安装光盘镜像中的 casper/initrd 与 casper/vmlinuz 放入 /var/lib/tftpboot/ubuntu 中,文件名不变。这些内核与初始化文件是启动 ubuntu 系统的关键组件,放在指定位置供客户端加载。

f. 修改启动配置:

修改 /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg,将 Install 选项的内容改为:

        kernel ubuntu/vmlinuzappend vga=768 initrd=ubuntu/initrd boot=casper root=/dev/ram0 ramdisk_size=1500000 netboot=nfs ro nfsroot=192.168.1.101:/mnt/iso ip=dhcp

这一步是定制启动参数,指定内核、初始化文件路径,设置网络启动方式(如通过 NFS)、根文件系统挂载点等,确保客户端能按预期启动系统。
其中192.168.1.101 为服务器C的IP地址。

g. 防火墙配置:

针对于服务器A:
  • 放行UDP 69出站用于主动连接访问TFTP服务端
  • 放行UDP 入站,用于被动接收TFTP服务端发来的文件数据流
针对与服务器B:
  • 放行UDP 69入站,用于接受TFTP客户端的访问
  • 放行UDP 出站,用于主动向TFTP客户端发送文件数据流

3. 搭建用于Ubuntu安装过程中的NFS共享并提供光盘镜像(服务器C配置)

搭建过程以CentOS 7.9环境进行举例

请自行准备好安装光盘ISO文件,这里假设文件名为ubuntu22.04.iso,所在路径为:/opt/media/ubuntu22.04.iso

a. 创建挂载目录:

通过命令 mkdir /mnt/iso 创建用于挂载目标目录。这个目录将作为后续挂载 iso 文件的挂载点,为共享资源提供存储位置。

b. 挂载 iso 文件:

执行 mount -o loop /opt/media/ubuntu22.04.iso /mnt/iso,将 iso 文件挂载到 /mnt/iso 路径下。这样操作后,iso 文件中的内容就可以像本地目录一样被访问,方便后续通过 NFS 进行共享。

c. 安装 NFS 组件:

使用 yum install nfs-common nfs-server nfs-utils -y 安装 NFS 服务端所需的各类组件。其中 nfs-common 提供了一些通用的 NFS 功能支持,nfs-server 是 NFS 服务的核心组件,负责提供共享服务,nfs-utils 包含了一些实用工具,它们协同工作,确保 NFS 服务能够正常运行。

d. 配置 NFS 共享:

用 vim /etc/exportfs 编辑配置文件,并插入一行:/mnt/iso (ro, all_squash)。这行配置表示将 /mnt/iso 目录以只读(ro)方式共享给所有客户端(),并且使用 all_squash 选项将所有用户的访问权限都压缩为匿名用户权限,这在一些安全要求较高或者统一权限管理的场景下较为常用,确保共享资源的访问可控。

e. 重载 NFS 共享配置:

执行 exportfs -rv,此命令用于重新加载 NFS 共享配置,使之前在 /etc/exportfs 中所做的配置更改生效,让客户端能够按照新配置访问共享资源。

f. 防火墙配置:

针对于服务器C:
  • 放行TCP 协议与 UDP 协议的 2049 端口的入站
  • 放行 rpcbind 相关的端口的入站
针对于服务器A:
  • 放行TCP协议与UDP协议的2049端口的出站
  • 放行rpcbind相关端口的出站

http://www.ppmy.cn/ops/145209.html

相关文章

Docker Compose 配置指南

目录 1. Docker Compose 配置1.1 基本配置结构1.2 docker-compose.yml 的各部分1.3 常用配置选项 2. Docker Compose 使用方法2.1 创建 Docker Compose 配置文件2.2 启动服务2.3 查看容器状态2.4 查看服务日志2.5 停止服务2.6 重新构建服务 3. Docker Compose 常用命令3.1 dock…

git merge 冲突 解决 show case

废话不多说&#xff0c;上 case&#xff01;&#xff01;&#xff01; 1. 更新master分支 package org.example;public class Main {public static void main(String[] args) {System.out.println("--------Git冲突测试代码开始---------");System.out.println(&qu…

【硬件接口】MCU的IO模式

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、基本分类 IO口分为GPIO&#xff08;通用输入输出端口&#xff09;口和专用IO口。其中&#xff0c;GPIO口具有高度的灵活…

Nginx性能优化全方案:打造一个高效服务器

提到前面&#xff1a;一个热衷技术&#xff0c;反对八股的资深研发&#xff0c;不卖课不引流&#xff0c;专注分享高质量教学博客。 如果觉得文章还不错的话&#xff0c;可以点赞收藏关注 支持一下&#xff0c;持续分享高质量技术博客。 如果有什么需要改进的地方还请大佬指出❌…

把一个Vue项目的页面打包后再另一个项目中使用

步骤&#xff1a; 1.项目1新建一个js文件&#xff0c;引入我们需要使用的vue页面&#xff1a; // 引入组件 import indexVue from ./index.vue// install indexVue.install function (Vue) {Vue.component("indexVue", indexVue)// Vue.component(FlowEditorVue.n…

了解RPC

本文来自智谱清言 --------- RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种允许程序调用位于远程计算机上的子程序或服务的技术。这种技术使得构建分布式计算变得更加容易&#xff0c;因为它提供了强大的远程调用能力&#xff0c;同时保持…

MONI后台管理系统-系统三员的设计

前言&#xff1a; 本项目设计立足于等保测评&#xff08;国家信息安全等级保护三级认证&#xff09;&#xff0c;国家信息安全等级保护三级认证中的“三员管理”是指为了确保信息系统的安全性、稳定性和可靠性&#xff0c;而设立的系统管理员、安全管理员和审计管理员三个独立角…

使用.gitgnore 忽略可执行文件,以及gitignore文件不生效问题

使用.gitgnore 忽略可执行文件&#xff0c;以及gitignore文件不生效问题 修改了.gitignore &#xff0c;忽略了linux无后缀的可执行文件 # 忽略所有文件 *# 提交data目录下 !data/# 提交src目录下 !src/# 提交README.md !*.md# 提交.c文件 !*.c !*.cpp# 提交.h文件 !*.h# 提交…