冰源信息集中营基地

基于iVentoy的PXE服务器的部署实战指南

2026/09/03
2
0

项目说明

该项目共分为2个子项目,由iventoy和定制安装两部分组成

项目背景

需求

  • 新购了一批服务器和台式机,需要为台式机和服务器安装系统,一部分需要安装国产OpenEuler,一部分要求安装CentOS 7.9,同时也要满足定制化需求,即按要求分区安装相应软件。

常见系统批量安装方式

使用商业化软件
  • 使用商业化软件要额外成本开支

使用开源软件
  • Linux 操作系统基于pxe技术结合kickstart实现定制化需求。

  • Linux 操作系统基于cobbler结合自定义ks文件实现定制化需求。

  • windows 系统安装 iventoy 结合自定义配置文件实现定制化需求。

  • U盘装系统,制作u盘启动盘引导安装。

  • 服务器通过ipmi远程ISO安装。

  • 刻录光盘,外接光驱安装系统。

结论
  • 综合比较,选择iventoy将我们自己笔记本打造成pxe服务器,操作相对简单,官方已经检测通过100多种操作系统。

iventoy介绍

主页:iVentoyiVentoy is a new netboot solution.

  • iVentoy 可以看成是一个增强版的 PXE 服务器,使用iVentoy 你可以通过网络同时给多台机器启动、安装操作系统。

  • iVentoy 使用极其简单,无需复杂的配置,直接把 ISO 文件放到指定位置,客户机在启动时根据菜单选择要启动的ISO文件即可。

  • iVentoy 同时支持 x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI 和 ARM64 UEFI 模式。

  • iVentoy 支持 110 多种常见类型的操作系统

  • iVentoy 在运行时会使用系统的一些端口号,这些端口需要在防火墙中放开,否则 iVentoy 会无法正常工作,具体如下:

PXE介绍

626CECAD-79DE-402C-BB4B-25B3C55E025F.png
  • PXE,预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

  • PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

任务清单

系统平台部署

  • 安装VmWare17

  • 新建2台虚拟机

Windows下安装iventoy

  • 前置处理

  • 解压缩部署

配置iventoy

  • 配置网卡信息

  • 配置vmware

测试安装(半手动安装配置)

  • 安装centos7.9

  • 安装openeuler

自动化 脚本安装

  • 配置自动化脚本

  • 自动化安装,检测

项目环境

项目拓扑结构

  • 安装win10/11 笔记本一台、服务器若干、交换机一台

软硬件环境清单

  • 注意:为了学习方便(没有财力),使用VMware 17 workstation 里面创建新的虚拟机代替台式机和服务器来验证。

主机名

IP地址

硬件

软件

pxe-control

windows本机分配IP

Windows本机

iventoy-1.0.20-win64-free.zip

node1

192.168.88.162

cpu:1颗2核 内 存:4GB HDD:20GB 网 络:NAT

VmWare17 Centos7.9

node2

192.168.88.163

cpu:1颗2核 内 存:4GB HDD:20GB 网 络:NAT

VmWare17 OpenEuler22.03 SP4

实施步骤

安装下载

66A31E00-0E2B-4CF9-B93D-B6DDFFDDBEAD.jpeg
  • 注意:下载解压缩iventoy-1.0.20-win64-free.zip,==解压位置的全路径中不能有中文或空格==, 软件解压后的目录结构如下:

86112EEA-F7D7-497E-AF99-DB9FAC7287CA.png
  • 各个目录作用如下:

目录

说明

data

存放 License、配置文件等

doc

存放软件相关说明文档

iso

放ISO文件的地方,可以在里面创建子目录

lib

存放 iVentoy 运行所需的 LIB 文件,==用户不要动这个目录==

log

存放 iVentoy 运行日志

user

存放用户文件、第三方软件包、自动安装脚本等文件

Docker Compose 配置信息

services:

iventoy:

image: docker.1ms.run/szabis/iventoy:latest

network_mode: "host"

container_name: iVentoy

hostname: iventoy

privileged: true

restart: on-failure:3

environment:

- AUTO_START_PXE=true

- TZ=Asia/Shanghai

# ports:

# - "67:67/udp" # DHCP Server

# - "69:69/udp" # TFTP Server

# - "10809:10809" # NBD Server (NBD)

# - "16000:16000" # PXE Service HTTP Server (iVentoy PXE Service)

# - "26000:26000" # PXE GUI HTTP Server (iVentoy GUI)

healthcheck:

test: ["CMD", "curl", "--fail", "--silent", "--head", "http://localhost:26000/"]

interval: 30s

timeout: 10s

retries: 3

start_period: 2m

volumes:

- /volume1/docker/iVentoy/data:/opt/iventoy/data

- /volume1/docker/iVentoy/driver:/opt/iventoy/driver

- /volume1/docker/iVentoy/iso:/opt/iventoy/iso

- /volume1/docker/iVentoy/log:/opt/iventoy/log

- /volume1/docker/iVentoy/user:/opt/iventoy/user

构建成功后在容器终端内输入一条指令“bash iventoy.sh start”并回车,之后关掉终端

接着我们需要将“参数配置”里面的DHCP服务器模式改成“ProxyNet”。

PS:如果使用的爱快路由器需要在这里选择 “External”模式,然后在路由器DHCP设置中添加以下两条:

  • next-server:NAS的IP地址。

  • bootfile (Option 67): iventoy_loader_16000。

  • 爱快的dhcp  next server配置,实测成功,少一项都不行,10.0.0.5是iventoy所在的主机ip

  • 客户端是UEFI的要把安全启动关掉,不然无法从网络安装

配置iventoy

拷贝ISO文件
  • 将需要安装的系统ISO文件都拷贝到D:\iventoy-1.0.20-win64-free\iventoy-1.0.20\iso目录下

  • 可以在此目录下任意创建子目录来归类存放各种不同类型系统的ISO文件。

  • 注意:

    • 目录名和ISO文件名中不能有中文或空格

    • 也可以管理员身份打开cmd,使用命令创建iso快捷方式(软连接),即不需要将ISO文件从别的位置拷贝到这个

      iso复制代码

      目录下 ( Linux 系统中你可以使用

      ln -s复制代码

      命令)

# 在 Windows 系统中你可以使用 mklink 目标  源 命令创建
​
C:\Users\Administrator>mklink  D:\iventoy-1.0.20-win64-free\iventoy-1.0.20\iso\CentOS-7-x86_64-DVD-2207-02.iso  D:\Linux\Linux_app\ISO\CentOS-7-x86_64-DVD-2207-02.iso
为 D:\iventoy-1.0.20-win64-free\iventoy-1.0.20\iso\CentOS-7-x86_64-DVD-2207-02.iso <<===>> D:\Linux\Linux_app\ISO\CentOS-7-x86_64-DVD-2207-02.iso 创建的符号链接复制代码

AD573C85-DBB6-491A-9BE6-AF83177D7352.png
运行软件
  • Windows 系统中直接双击运行 exe 文件即可

  • Linux 系统下在终端中执行

    sudo bash iventoy.sh start复制代码

    命令。

  • 注意:windows 注意需要关闭防火墙或放行相关端口。==本文采用关闭所有防火墙(在控制面板里,点击系统和安全)==,如图:

8FC74651-FCBB-4A0C-8C54-06A61DCEB3C8.png

4C9AAC76-CAAA-433D-823A-AD1E36BDCB40.png
  • 右键选择管理员身份启动iventoy

1B12B1F3-2784-4B03-9AAC-71E1B291FFDD.png

F9221506-B760-4648-86D8-85892E0452C4.png
  • Windows 系统中打开软件之后,会自动打开浏览器,如果没有自动打开,则需要手动点击

    打开链接复制代码

    按钮,如图:

91C40323-4635-4D2E-9950-5E2A36A79AB9.png
  • 分析客户端IP地址设置:打开vmware17->编辑菜单->虚拟网络编辑器->VMnet8 NAT 网卡查看网段,点击NAT设置查看网关地址,注意:需要关闭VMware nat模式的dhcp服务。

8E2F8FDC-0D16-4595-9FC9-61DD427450B0.png
B06CD25E-B607-49BF-975F-4B6477677AAC.png

 

9FD4170C-7711-46EE-B975-D5EBDD6F0B1C.png
启动 PXE 服务
  • 在 iVentoy 主界面上选择本机 IP 地址,根据之前的分析设置好 IP 地址池,然后点击绿色的开始按钮即可,如图:

C06B7F89-C32C-43F7-B634-2F4E377D45B6.png
  • 启动 iventoy 后如图示:

4796F430-70CB-4109-8CDA-BA299DCC85A5.png

系统安装

  • 本文使用VMware workstation 新建虚拟机测试,新建虚拟机时不要加载iso镜像

  • 新建Centos7.9虚拟机

5A38538F-E58E-4307-85A7-CC2A41C84A8F.png

CD8176C7-F2AF-4409-97FF-A05A7C404A2C.png

CD5E948C-5E41-41B3-A0A9-B50C120BFCD2.png

C940CBAB-67C8-422E-A7DC-CFDD332B8503.png

968AC228-60BE-492F-A181-7227CAE9746C.png

BDBFE4E8-F27D-46E6-920F-ACC85537ED4C.png

注意:新CD/DVD处不能设置ISO镜像文件

  • PXE自动识别:

C22E2A16-F3A4-46C6-B115-EF630851059C.png
  • 由于网络安装加载较慢,需要等待一段时间,后续就和正常装机一样,过程略(一路继续)。

90C3C9CD-9244-4AA5-9F37-DC06DC62958A.png

iVentoy 定制安装

作用
  • 通过 iVentoy 你无需重新制作ISO文件,只需要简单地为一个ISO文件指定一个或者多个自动安装脚本来实现无人值守、自动安装部署系统的方案。

  • 可以使用 Windows 中的 unattend XML、Redhat/CentOS系列中的 Kickstart 脚本、SUSE系列中的 autoYast XML、Debian系列中的preseed脚本等等。

  • 下面的示例模版脚本位于安装包内的

    user/scripts/example复制代码

    目录下,如图:

DF975117-8184-4F25-B1F0-71978FB311E2.png

发行版

脚本格式

示例脚本

说明

Windows

Unattend XML

unattended.xml

Windows系列

Deepin/UOS

INI

deepin.ini

Deepin/UOS 系统

RHEL8/CentOS8

Kickstart script

kickstart8.cfg

同时也支持基于这几个派生出来的发行版。比如 OpenAnolis, RockyLinux 等。

RHEL7/CentOS7/Fedora

Kickstart script

kickstart7.cfg

同时也支持基于这几个派生出来的发行版。比如 Oracle Linux, EuroLinux 等。

RHEL6/CentOS6

Kickstart script

kickstart6.cfg

同时也支持基于这几个派生出来的发行版。

openEuler

Kickstart script

openeuler.cfg

openEuler 版本。

Debian

Preseed script

preseed.cfg

Debian 系列的发行版。

Ubuntu Server (< 20.x)

Preseed script

preseed.cfg

早期 Ubuntu Server 版本

Ubuntu Server (20.x+)

cloud-init

cloud-init-user-data

Ubuntu Server 20.x 以后的版本

SUSE

autoYast XML

autoYast.xml

SLES 和 openSUSE

  • 注意:这里的示例脚本仅供参考,需要根据实际需要修改,尤其是里面磁盘分区设置的部分。否则会造成磁盘被误格式化、数据丢失等问题。

脚本变量扩展
  • 在进行自动安装时,在安装脚本中有一些配置是无法固定写死的,必须根据实际环境进行调整。

  • 最常见的就是对于安装盘的指定,比如我们在安装脚本中指定系统安装到

    DISK0复制代码

    或者

    /dev/sda复制代码

    但在有些机器上它对应的那个盘并不是我们想要的那个。 这样可能就把系统安装到错误的盘上了。

  • 针对上述需求,iVentoy 在自动安装脚本中支持

    变量扩展复制代码

    ,变量使用

    $$VT_XXX$$复制代码

    的形式,其中 VT_XXX 对应变量名。

  • 注意:

    • 包含变量的自动安装脚本文件必须是 UTF-8 编码格式。

    • 只支持下面表格中列出的变量,不支持自定义变量。

    • 变量名两边必须各用2个$$ 符号包起来

    • Ventoy 会自动检测自动安装脚本内是否包含变量,对于不包含变量的脚本不会做扩展处理。

    • 变量扩展是在副本中进行的,不会修改脚本源文件。

BF1FA719-2389-4E77-A547-02E773F75EAB.png

定制CentOS7
  • 复制 kickstart7.cfg

  • 改名为 CentOS7.cfg 

install
​
lang en_US.UTF-8
keyboard us
rootpw  123456
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disable
firewall --disabled
timezone --utc Asia/Shanghai
​
#network --onboot=yes --device=$$VT_MAC_COLON_LOWER$$ --bootproto=static --ip=$$VT_LOCAL_IP$$ --netmask=$$VT_NET_MASK$$ --gateway=$$VT_GATEWAY$$ --noipv6
​
eula --agreed
firstboot --disable
​
%include /tmp/partation.ks
zerombr
clearpart --all --initlabel
part /boot --fstype xfs --size 1024
part swap --size 2048
part / --fstype xfs --size 1 --grow
​
​
#packages configuration
%packages
@core
bash-completion
chrony
dos2unix
net-tools
lrzsz
nmap
sysstat
telnet
tree
vim
wget
%end
​
reboot
​
%pre
​
#Select install disk
disk_short_name=$$VT_LINUX_DISK_MAX_SIZE$$
​
echo bootloader --location=mbr --driveorder=$disk_short_name >> /tmp/partation.ks
echo ignoredisk --only-use=$disk_short_name  >> /tmp/partation.ks
echo clearpart --all --initlabel --drives=$disk_short_name  >> /tmp/partation.ks
​
​
%end
​
#Download third part software
%post
​
# wget $$VT_IMG_ID_HTTP_URL$$/Packages/kernel-tools-3.10.0-957.el7.x86_64.rpm -O /root/kernel-tools.rpm
# wget http://$$VT_SERVER_IP$$:$$VT_HTTP_PORT$$/user/xxx.zip -O /root/xxx.zip
​
%end复制代码

69AD2320-8991-4274-91E6-660E8A5AA0A7.png
  • 关闭PEX服务(之前的那个网页)

263F0BD8-5AE3-4AD0-AB51-AC98481DEBFA.png
  • 将设置好的自动部署脚本和镜像关联

14A5D8F6-5D99-4176-86A4-8FFC9622340D.png
测试效果
  • 启动服务

B19C3122-4C33-4A6E-95F5-CA6AA5AD2E1F.png
  • 本文使用VMware workstation 新建虚拟机测试,新建虚拟机时不要加载iso镜像,测试CentOS7,按回车键。

5775FA5D-6668-4C56-832D-72B9C939BCDC.png
  • 切换到自定义脚本,然后按 回车键

DE3441EF-1487-46D7-9592-5B253EDAAFBB.png
  • 由于网络安装加载较慢,需要等待一段时间,安装按预先设定脚本执行

 注意:若安装某些系统时卡死,一般都是虚拟机分配的内存不足造成的,建议分配4G内存

BDDDDD3F-9B33-404B-A79F-D7772231E601.png
  • 安装完毕后,登录系统检查(用户名root,密码是隐藏输入)

[root@localhost ~]# lsblk

54CDEB55-D1CB-4E23-9D82-2A4BF83C2D59.png
  •  软件包检查

[root@localhost ~]# rpm -aq | egrep 

D867E3EC-D96F-413B-BD12-6536B154EE93.png
  • 检查防火墙

 [root@localhost ~]# firewall-cmd --state

93094944-485D-4C4D-A5BB-30D5C217D383.png