- 日期:2026-10-26
- 工作目录:
/home/jimmy/workspace/data/tmp02_debug_ofed_all - OFED:
MLNX_OFED 24.10-5.1.6.1 - 系统:Ubuntu 22.04.5 LTS,x86_64
- 内核:
6.8.0-40-generic - 网卡:Mellanox ConnectX-5,PCI ID
15b3:1017 - 原始归档:
MLNX_OFED_SRC-debian-24.10-5.1.6.1.tgz - 原归档 SHA256:
6c341894115832d97016967850c321b034ff933ae87c01c6f214fc00069bc950
1. 当前结果摘要
- 原归档中的 29 个源码项目已全部解压并纳入 Git。
- 另外补充了
multiperf和ofed-docs两个同版本项目。 - 27 个项目已完成 Release 和 Debug 双配置构建。
- 所有 10 个内核项目均已完成双配置构建 ,包括
mlnx-ofed-kernel。 - 已校验 54 份产物清单、268 个构建产物的 SHA256。
- Release 安装模拟结果:81 个新包、0 个删除包、无依赖错误。
- 没有实际安装 OFED,没有替换当前网卡驱动,也没有启用 OpenSM。
- Git 当前有两次提交:
9bec41f1 Import MLNX_OFED 24.10 source snapshot8c06e5c1 Add unified OFED build profiles
2. 系统构建依赖安装命令
以下按用途合并整理,便于在新环境复用。需要用户在本机输入 sudo 密码执行。
2.1 基础工具
bash
sudo apt update
sudo apt install -y \
git build-essential dpkg-dev debhelper devscripts dkms \
autoconf automake autotools-dev dh-autoreconf libtool \
pkg-config cmake ninja-build rpm2cpio \
flex bison python3 dh-python cython3
2.2 通用开发库及内核构建依赖
bash
sudo apt install -y \
linux-headers-$(uname -r) \
libnl-3-dev libnl-route-3-dev libmnl-dev libelf-dev libpci-dev \
libsystemd-dev libudev-dev
2.3 rdma-core 文档、systemd 和 valgrind 依赖
bash
sudo apt install -y \
cmake libsystemd-dev libudev-dev \
pandoc python3-docutils valgrind
2.4 OpenMPI Fortran 和 LTO 依赖
bash
sudo apt install -y \
gfortran gfortran-12 \
libgfortran5 libgfortran-12-dev libgcc-12-dev
2.5 可选 Open vSwitch 和 rshim 依赖
本次未构建这两个可选项目。若后续需要,可安装:
bash
sudo apt install -y \
graphviz python3-all python3-sphinx python3-twisted \
python3-prometheus-client python3-zope.interface \
libunbound-dev libunwind-dev \
libusb-1.0-0-dev libfuse-dev
注意:构建这套源码栈时,不需要先用 Ubuntu 的 libibverbs-dev、librdmacm-dev 等 RDMA 开发包替换系统环境。当前构建框架会使用本次构建的 rdma-core 隔离头文件和库。
3. 工作区内隔离依赖下载命令
当 sudo 需要交互密码、暂时不能安装系统包时,可只下载并解压依赖到工作区。这些操作不会修改系统 dpkg 状态。
3.1 下载依赖包
在仓库根目录执行:
bash
mkdir -p downloads build/toolchain
cd downloads
apt-get download \
cmake libsystemd-dev pandoc python3-docutils valgrind
apt-get download \
pandoc-data \
libcmark-gfm-extensions0.29.0.gfm.3 \
libcmark-gfm0.29.0.gfm.3 \
docutils-common python3-roman
apt-get download \
gfortran-12 libgfortran-12-dev libgfortran5
apt-get download libgcc-12-dev
cd ..
3.2 解压到隔离目录
bash
for package in downloads/*.deb; do
dpkg-deb -x "$package" build/toolchain
done
3.3 配置隔离 pandoc
隔离 pandoc 默认仍查找 /usr/share/pandoc,需要指定其实际数据目录:
bash
mv build/toolchain/usr/bin/pandoc \
build/toolchain/usr/bin/pandoc.real
cat > build/toolchain/usr/bin/pandoc <<'EOF'
#!/bin/sh
exec "$(dirname "$0")/pandoc.real" \
--data-dir="$(dirname "$0")/../share/pandoc/data" "$@"
EOF
chmod +x build/toolchain/usr/bin/pandoc
验证:
bash
LD_LIBRARY_PATH="$PWD/build/toolchain/usr/lib/x86_64-linux-gnu" \
build/toolchain/usr/bin/pandoc -t man -o /dev/null /dev/null
3.4 配置本地 gfortran 和 LTO
bash
# OpenMPI configure 默认查找 gfortran。
if [ ! -e build/toolchain/usr/bin/gfortran ]; then
ln -s gfortran-12 build/toolchain/usr/bin/gfortran
fi
# 当前机器由 gcc-12 包提供的 LTO 组件。
ln -sf /usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so \
build/toolchain/usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so
ln -sf /usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper \
build/toolchain/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper
ln -sf /usr/lib/gcc/x86_64-linux-gnu/12/lto1 \
build/toolchain/usr/lib/gcc/x86_64-linux-gnu/12/lto1
Fortran/LTO 冒烟测试:
bash
build/toolchain/usr/bin/gfortran \
-o build/toolchain/fortran-test \
-O3 -g -flto=auto -x f95 - \
<<<'program smoke; print *, "fortran_ok"; end program smoke'
LD_LIBRARY_PATH="$PWD/build/toolchain/usr/lib/x86_64-linux-gnu" \
build/toolchain/fortran-test
预期输出:fortran_ok。
3.5 使用隔离工具链执行构建
已提供包装脚本 tools/with-local-toolchain.sh:
bash
./tools/with-local-toolchain.sh \
./ofed-build build --components rdma-core \
--profile release --jobs 8 --skip-depcheck
--skip-depcheck 在这里用于跳过"软件包没有登记到系统 dpkg 数据库"的检查。编译实际需要的头文件、库和工具由 build/toolchain 提供。
4. 源码导入与补充命令
4.1 初次导入原始 OFED 源码
以下命令用于空的源码工作树;当前已经执行完成,不应在现有树上盲目重复执行:
bash
python3 tools/import_ofed.py \
MLNX_OFED_SRC-debian-24.10-5.1.6.1.tgz
该命令完成:
- 解压
SOURCES/中全部 29 个嵌套源码包; - 将项目放入
src/<project>-<version>/; - 将原厂安装器和清单放入
vendor/; - 生成
components/import-manifest.json; - 保存原归档及各嵌套包的 SHA256;
- 检查危险路径、绝对路径和特殊文件;
- 不修改原始
.tgz文件。
4.2 下载同版本补充源码
bash
mkdir -p downloads
curl -fL --retry 3 \
-o downloads/multiperf-3.0.tar.gz \
https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-5.1.6.1/SRPMS/multiperf-3.0.tar.gz
curl -fL --retry 3 \
-o downloads/ofed-docs-24.10.tar.gz \
https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-5.1.6.1/SRPMS/ofed-docs-24.10.tar.gz
预期 SHA256:
text
b9c43501a200c20ee5af7614da324372cd9f1fbd2fc3d7dfd775a9164bf3a68e multiperf-3.0.tar.gz
41b7d01b1ca5d07d59b93f059ca8b1e2b65ccc19ca4dd3472215f933d1a21d30 ofed-docs-24.10.tar.gz
导入补充源码:
bash
python3 tools/import_supplements.py
该脚本可重复检查已导入项目,不会重复覆盖目录。
4.3 未下载或替代的源码
以下项目没有用其他版本冒充精确版本:
opensm:目标为5.21.12.MLNX20250617.f74e01b8,精确源码未获得;ibutils2、dpcp、clusterkit、hcoll、sharp:精确源码未获得;mlnx-dpdk:清单中的公开 commit 当前下载返回 404;libxlio:源码存在,但当前版本无条件要求缺失的 DPCP 头文件和库,因此标记为构建阻塞;mlnx-en:可以从mlnx-ofed-kernel派生,未重复导入相同代码。
纯 Ethernet/RoCE 不需要 OpenSM;InfiniBand 模式才需要子网管理器。
5. 统一构建命令
5.1 查看项目和依赖
bash
./ofed-build list
./ofed-build check --components core --profile release
5.2 Dry run
bash
./ofed-build build \
--components core \
--profile release \
--kernel-mode modules \
--dry-run
5.3 构建 Release
bash
./ofed-build build \
--components core \
--profile release \
--kernel-mode modules \
--jobs 16 \
--reuse
5.4 构建 Debug
bash
./ofed-build build \
--components core \
--profile debug \
--kernel-mode modules \
--jobs 16 \
--reuse
--reuse 会复用相同 profile 下已有产物和构建工作区;需要强制重新构建时去掉该参数。
5.5 构建全部当前可用项目
bash
./ofed-build build \
--components all-available \
--profile release \
--jobs 16 \
--reuse
注意:openvswitch 和 rshim 的可选依赖尚未全部安装;libxlio 和精确源码缺失项目不会混入 all-available。
5.6 产物和日志
text
dist/release/ # Release DEB/DDEB、buildinfo、changes、artifacts.json
dist/debug/ # Debug DEB/DDEB、buildinfo、changes、artifacts.json
build/release/logs/ # Release 各项目完整构建日志
build/debug/logs/ # Debug 各项目完整构建日志
build/<profile>/work/ # 构建副本及中间文件
build/<profile>/ofa_kernel/# 主内核模块的 Module.symvers/兼容头文件 staging
build/toolchain/ # 隔离构建依赖,不纳入 Git
6. 安装模拟与实际安装边界
当前验证过的 Release 安装模拟命令:
bash
./ofed-build install \
--components kernel,core,hpc,libvma,sockperf,mlx-steering-dump \
--profile release
结果:81 个新包、0 个删除包、无依赖错误。
install 默认只做 apt-get -s 模拟。只有显式增加 --execute 才会真正安装;本次未执行实际安装。
正式安装前仍需:
- 在维护窗口操作,并准备本地或带外控制台;
- 保存当前包清单和网络配置;
- 检查将替换的 RDMA 用户态库和内核模块;
- 理解 DKMS 与当前内核专用 modules 包的区别;
- 不同时安装 Debug 和 Release;
- 不自动启用 OpenSM 或更新固件。
7. 文件和目录修改记录
7.1 源码与清单
| 路径 | 内容 |
|---|---|
src/ |
原 29 个项目及补充的 multiperf、ofed-docs 完整源码 |
vendor/ |
原厂 install.pl、common.pl、uninstall.sh、BUILD_ID、LICENSE |
components/import-manifest.json |
原归档、29 个嵌套包的版本、目录、文件数和 SHA256 |
components/supplements.json |
补充项目的 ready、derived、blocked 状态及来源 |
components/build-config.json |
构建分组、依赖闭包、内核项目、运行依赖及构建阻塞项 |
7.2 统一构建框架
| 路径 | 修改内容 |
|---|---|
ofed-build |
顶层命令入口 |
tools/ofed_build.py |
实现 list、check、build、install,以及 profile、依赖、staging、日志和产物校验 |
tools/import_ofed.py |
原始 OFED 安全导入,后增加可执行权限 |
tools/import_supplements.py |
补充源码校验和导入,后增加可执行权限 |
tools/with-local-toolchain.sh |
隔离依赖环境变量和命令包装 |
packaging/multiperf/debian/ |
为没有 Debian 元数据的 multiperf 增加本地 DEB 打包 |
.gitignore |
忽略原归档、downloads、build、dist、Python 缓存和 opencode_session.txt |
7.3 源码修改原则
src/ 中的基线源码没有被构建过程直接修改。
所有 profile 专用修改都发生在:
text
build/<profile>/work/<project>/<source-tree>
即先复制源码,再修改构建副本,避免污染 Git 中的原始源码。
8. Debug/Release 具体修改内容
8.1 通用 profile
Debug 使用:
DEB_BUILD_OPTIONS="parallel=<jobs> noopt";CFLAGS/CXXFLAGS增加-O0 -g3 -fno-omit-frame-pointer;CPPFLAGS增加-UNDEBUG;- 项目自身支持的 debug 配置另行启用。
Release 保留各项目原厂优化配置,不强制替换为统一的非厂商参数。
8.2 项目级修改
| 项目 | 构建副本中的处理 |
|---|---|
rdma-core |
Debug 将 CMAKE_BUILD_TYPE=Release 改为 Debug |
ibarr |
Debug 显式增加 CMake configure override,使用 CMAKE_BUILD_TYPE=Debug |
sockperf |
Debug 使用 -O0 -g3,并显式传入 --enable-debug |
multiperf |
修正原厂强制 -O3 对 Debug 的覆盖,并增加本地 DEB 打包 |
| UCX | Release 使用 configure-release-mt;Debug 使用 debug/assertions/params-check/logging/frame-pointer 配置 |
| OpenMPI | 使用 mellanox_debug=yes 启用原厂 Debug 路径,并修正 valgrind、UCX 和 Fortran/LTO 路径 |
| 内核项目 | 默认构建当前内核专用 modules;Debug 设置 MLNX_KO_NO_STRIP=1 保留调试信息 |
| VMA/XLIO | 保留原厂同时构建普通库和 debug 库的逻辑;XLIO 另因 DPCP 缺失被阻塞 |
9. 依赖和 staging 修复内容
9.1 独立内核模块
独立模块原先固定查找 /usr/src/ofa_kernel。现改为:
- 先构建
mlnx-ofed-kernel; - 在
build/<profile>/ofa_kernel/<arch>/<kver>建立到其构建目录的链接; - 使用该目录中的
Module.symvers、configure.mk.kernel和兼容头文件; - 不向
/usr/src写入文件。
9.2 rdma-core 上层项目
使用 build/<profile>/work/rdma-core/.../debian/tmp 中的内容,设置:
CPPFLAGS、LDFLAGS;LIBRARY_PATH、LD_LIBRARY_PATH;PKG_CONFIG_PATH;CMAKE_PREFIX_PATH、CMAKE_INCLUDE_PATH、CMAKE_LIBRARY_PATH。
这样无需提前安装或替换系统 RDMA 库,即可编译 perftest、multiperf、ibarr、ibsim、UCX、VMA 等项目。
9.3 Debian 运行依赖
dh_shlibdeps 无法识别尚未安装到系统 dpkg 数据库的隔离库,因此:
- 对相应项目使用
--ignore-missing-info,仅忽略"库属于哪个已安装系统包"的检查; - 在
debian/control的构建副本中显式补充正确运行依赖,例如:libibverbs1libibumad3librdmacm1ibverbs-providersucxopenmpi
生成的 DEB 仍保留正确的安装依赖关系。
9.4 UCX 和 OpenMPI 特殊修复
- UCX 的
--with-rdmacm、--with-verbs指向本次 RDMA staging 的usr前缀; - 删除 staging 中写死
/usr/lib的 UCX.la文件,避免 libtool 读取错误的绝对路径; - OpenMPI 使用
mellanox_debug控制 Debug,而不是仅依赖通用 CFLAGS; - 修正 OpenMPI 的 valgrind、UCX、Fortran 和 LTO 路径;
mpitests修正原厂 Makefile 对环境变量PWD的依赖;- 将
MPI_STAGE_HOME(构建时 MPI 位置)与MPIHOME(最终/usr/mpi/...安装前缀)分离; - 使用
OPAL_PREFIX让 MPI wrapper 在隔离目录中找到配置、头文件和库。
9.5 其他项目
ibdump:在没有 MFT 头文件时使用WITHOUT_FW_TOOLS=yes,因此当前包不包含 MFT 固件工具相关功能。libxlio:不做大规模上游逻辑篡改,明确标记为缺少 DPCP 的阻塞项目。
10. 已完成双配置构建的 27 个项目
text
fwctl
ibarr
ibdump
ibsim
iser
isert
kernel-mft
knem
libvma
mlnx-ethtool
mlnx-iproute2
mlnx-nfsrdma
mlnx-nvme
mlnx-ofed-kernel
mlnx-tools
mlx-steering-dump
mpitests
multiperf
ofed-scripts
openmpi
perftest
rdma-core
sockperf
srp
ucx
xpmem
xpmem-lib
验证结果:
- 54 份
artifacts.json; - 268 个构建产物全部通过 SHA256 复核;
- 内核模块版本为
24.10-5.1.6,vermagic与当前内核一致; - Debug 主内核模块包约 70.8 MB,Release 约 2.6 MB;
- Release 主模块无
.debug段,Debug 主模块保留完整调试段; rdma-core分别为CMAKE_BUILD_TYPE=Release和Debug;sockperfDebug 确认为-O0 -g3,且#define DEBUG生效;multiperfRelease 保持-O3,Debug 为-O0 -g3;- Release 安装模拟通过。
11. 尚未完成或明确排除的内容
| 项目 | 状态 |
|---|---|
opensm |
等待 NVIDIA 精确版本源码,未用 3.3.24 替代 |
ibutils2 |
等待精确源码 |
dpcp |
等待精确源码,同时阻塞 libxlio |
clusterkit |
等待精确源码 |
hcoll |
等待精确源码 |
sharp |
等待精确源码 |
mlnx-dpdk |
清单中的 commit 当前无法公开下载 |
libxlio |
源码存在,但缺少必需的 DPCP,未强行修改上游绕过 |
openvswitch |
可选依赖未全部安装,本次未构建 |
rshim |
BlueField 相关可选依赖未全部安装,本次未构建 |
ofed-docs |
数据/文档项目,不需要编译 |
mlnx-en |
可由现有内核源码派生,未重复导入 |
12. Git 记录
text
9bec41f1 Import MLNX_OFED 24.10 source snapshot
8c06e5c1 Add unified OFED build profiles
第一次提交保存原始源码、补充源码、清单和分析文档;第二次提交保存已验证的统一构建框架、项目配置、multiperf 打包和工具链脚本。
原始 .tgz、下载目录、构建目录和产物目录均未重复提交到 Git。
13. OpenSM 的真实下载、安装和基于源码的接入方式
13.1 当前源码构建流程会不会安装 OpenSM
当前不会。
components/supplements.json 中 opensm 的状态仍为 blocked,原因是没有取得 NVIDIA 精确版本源码:
text
opensm-5.21.12.MLNX20250617.f74e01b8-0.1.2410325.src.rpm
因此:
./ofed-build build --components opensm会明确报错并停止;core、all-available和当前安装模拟均不包含 OpenSM;- 不会用 Ubuntu 的
opensm 3.3.23或上游3.3.24静默替代; - 已构建的 27 个项目可以独立安装,但不会自动把 OpenSM 加入系统。
如果只需要 Ethernet/RoCE,这不影响基本使用。若使用 InfiniBand,则仍需在子网中指定节点运行一个 Subnet Manager。
13.2 已实际下载的官方同版本 OpenSM 包
下载目录:downloads/opensm/。
已实际下载并检查以下 6 个 DEB:
| 文件 | SHA256 |
|---|---|
libibumad3_2410mlnx54-1.2410068_amd64.deb |
69a28c6f829a82284b0836388b90ca444d8b1820021be7be7d0b1ab26c291ac2 |
libibumad-dev_2410mlnx54-1.2410068_amd64.deb |
82aeb650d50890238c5bb0ffdd3ef23b170516499622525ae657c9de30f790e8 |
libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb |
e07651069a127c6377033207f7e8d8cb05c4edd9adbdec9c96778cbfe46c533e |
libopensm-devel_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb |
20faed6b663ce37881dbb911bd115b98f8f08155359314791cfacedebc1ea55c |
opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb |
4652f5dbc5e00f634fd53d344c1da44017281af043f86b6b7d85b46b68a5dcc6 |
opensm-doc_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb |
e2345ccd2aa8d7735dfab24c174a4c6b3a021dcba02b7abec00bf0be8dced224 |
可复用的实际下载命令如下。--continue-at - 用于网络较慢时断点续传:
bash
mkdir -p downloads/opensm
base_url="https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-5.1.6.1/ubuntu22.04/amd64"
for package in \
"opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"libopensm-devel_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"opensm-doc_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"libibumad3_2410mlnx54-1.2410068_amd64.deb" \
"libibumad-dev_2410mlnx54-1.2410068_amd64.deb"
do
curl --fail --location --silent --show-error \
--continue-at - --retry 2 --max-time 600 \
--output "downloads/opensm/$package" \
"$base_url/$package" || exit 1
done
sha256sum downloads/opensm/*.deb
这些是官方预编译二进制包,不是 OpenSM 源码。它们可以用于同版本运行安装,但不能据此声称完成了 OpenSM 的源码重建。
13.3 实际检查到的依赖和安装文件
根据 dpkg-deb -f 的真实包元数据:
| 包 | 运行依赖及用途 |
|---|---|
libibumad3 |
仅依赖 libc6;提供 libibumad.so.3 |
libopensm |
依赖 libc6、libibumad3 (>= 1.3.9);提供 OpenSM 库 |
opensm |
依赖同版本 libopensm、libc6、libgcc-s1、libstdc++6 |
libibumad-dev |
开发头文件和静态库,依赖同版本 libibumad3 |
libopensm-devel |
OpenSM 开发文件,依赖同版本 libopensm |
opensm-doc |
OpenSM 文档,无额外运行依赖 |
最小运行安装只需要:
text
libibumad3 + libopensm + opensm
开发包和文档包不是运行 OpenSM 的必需项。
实际包内文件包括:
text
/usr/sbin/opensm
/usr/lib/libopensm.so.31.0.1
/usr/lib/libosmcomp.so.12.1.0
/usr/lib/libosmvendor.so.9.0.0
/usr/lib/x86_64-linux-gnu/libibumad.so.3.3.54.0
/usr/lib/systemd/system/opensmd.service
/usr/lib/systemd/system/opensmd@.service
/etc/opensm/
/etc/logrotate.d/opensm
opensmd.service 使用 /usr/sbin/opensm 启动。多实例模板 opensmd@.service 使用:
text
/usr/etc/opensm/opensm%I.conf
13.4 已执行的版本验证和安装模拟
没有安装到系统前,先在工作区解压并实际运行了二进制:
bash
mkdir -p build/verify/opensm
for package in downloads/opensm/*.deb; do
dpkg-deb -x "$package" build/verify/opensm
done
LD_LIBRARY_PATH="$PWD/build/verify/opensm/usr/lib:$PWD/build/verify/opensm/usr/lib/x86_64-linux-gnu" \
build/verify/opensm/usr/sbin/opensm --version
实际输出:
text
-------------------------------------------------
OpenSM 5.21.12.MLNX20250617.f74e01b8
Command Line Arguments:
最小安装模拟结果:
text
0 upgraded, 3 newly installed, 0 to remove and 468 not upgraded.
安装全部 6 个包的模拟结果:
text
0 upgraded, 6 newly installed, 0 to remove and 468 not upgraded.
两种模拟均未发现依赖错误,也没有需要删除的现有包。
13.5 可实际执行的安装命令
方式 A:全部使用 NVIDIA 官方同版本二进制包
bash
sudo apt install \
"$PWD/downloads/opensm/libibumad3_2410mlnx54-1.2410068_amd64.deb" \
"$PWD/downloads/opensm/libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"$PWD/downloads/opensm/opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb"
如需开发文件和文档,再执行:
bash
sudo apt install \
"$PWD/downloads/opensm/libibumad-dev_2410mlnx54-1.2410068_amd64.deb" \
"$PWD/downloads/opensm/libopensm-devel_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"$PWD/downloads/opensm/opensm-doc_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb"
方式 B:使用本仓库源码构建的 libibumad3,配合官方 OpenSM 二进制
本仓库已经构建了相同版本的 libibumad3。其组合安装模拟也已通过,结果同样是 3 个新包、0 个删除包:
bash
sudo apt install \
"$PWD/dist/release/rdma-core/libibumad3_2410mlnx54-1.2410068_amd64.deb" \
"$PWD/downloads/opensm/libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
"$PWD/downloads/opensm/opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb"
方式 B 只有 libibumad3 来自本次源码构建,libopensm 和 opensm 仍是官方二进制,因此也不是完整的 OpenSM 源码安装。
截至本节更新时,尝试非交互安装返回:
text
sudo: a password is required
所以上述系统安装命令尚未在本机实际完成。需要用户在本机交互终端输入 sudo 密码执行。安装后可验证:
bash
opensm --version
dpkg-query -W opensm libopensm libibumad3
systemctl status opensmd
13.6 精确源码到位后的源码构建接入方式
若后续从 NVIDIA 支持渠道取得精确 SRPM,应在工作区单独解包,例如:
bash
mkdir -p downloads/opensm-src
cd downloads/opensm-src
rpm2cpio ../opensm/opensm-5.21.12.MLNX20250617.f74e01b8-0.1.2410325.src.rpm \
| cpio -idmv
cd ../..
注意:当前该 SRPM 在官方公开索引和直接 URL 中均返回 404,所以上述命令只有在用户先取得并放入该文件后才能执行。
仅放入源码还不够,还需完成以下接入:
- 在
components/supplements.json中登记精确版本、归档 SHA256 和ready状态; - 通过
tools/import_supplements.py导入到src/opensm-<version>/; - 在
components/build-config.json中加入opensm到目标组件组,并声明opensm -> rdma-core的构建依赖; - 准备匹配的 Debian 打包元数据,生成
opensm、libopensm、libopensm-devel、opensm-doc; - 先构建
rdma-core,使用其 staging 中的libibumad-dev头文件和库,再构建 OpenSM; - 分别生成 Release 和 Debug 包,再执行安装模拟和实际安装。
预期构建顺序:
text
rdma-core
-> libibumad-dev staging
-> opensm / libopensm / libopensm-devel / opensm-doc
预期构建命令形式为:
bash
./ofed-build build --components rdma-core,opensm \
--profile release --jobs 16 --reuse
./ofed-build build --components rdma-core,opensm \
--profile debug --jobs 16 --reuse
./ofed-build install --components opensm --profile release
这些命令只有在 OpenSM 源码及打包元数据真正接入后才可使用;当前直接执行会按设计报告 opensm is blocked。
13.7 安装后是否立即启用 OpenSM
不要仅因为安装了包就在所有主机上启用 OpenSM。
- 纯 Ethernet/RoCE 不需要启动 OpenSM;
- InfiniBand 子网需要一个合适的 Subnet Manager,可以由交换机或其他节点提供;
- 只有确认本机承担 SM 角色、端口处于 InfiniBand 模式且 fabric 配置正确后,才在指定节点启用:
bash
sudo systemctl enable --now opensmd
安装 OpenSM 二进制不等于 InfiniBand 子网已经可用,还需正确的内核驱动、IPoIB/端口配置和子网规划。