在开始使用 openUBMC 之前,您需要先完成开发环境的快速搭建。快速入门推荐使用 Docker + 社区开发镜像方式:镜像已内置完整开发环境(构建工具、SDK 与依赖缓存),拉取后无需执行初始化即可直接构建,是最快、最稳定的路径。
系统环境要求(Docker 方式下为宿主机要求)
| 环境项 | 环境要求 |
|---|---|
| 操作系统 | 宿主机可为 Windows / Linux(容器内为 Ubuntu 24.04) |
| 芯片组 | x86-64 |
| 内存 | 至少 16GB(Windows 虚拟机建议 32GB) |
| 交换分区 | 建议 32GB |
| 磁盘空间 | 建议至少 64GB 可用空间 |
| 网络 | 需连接网络以下载依赖和访问社区资源 |
配置宿主机交换分区(可选,建议)
NOTE
内存充足(≥16GB)且已配置交换分区的宿主机,可直接跳过本节。
openUBMC 组件数量较多,编译过程内存占用大(系统要求建议交换分区 32GB)。物理内存不足时,可在宿主机上通过创建 swap 文件配置交换分区,避免编译期间因 OOM 被杀进程。以下配置命令仅适用于 Linux 宿主机;Windows(Docker Desktop/WSL2)宿主机可通过 .wslconfig 中的 swap= 配置交换分区(与 memory= 同一文件)。
TIP
Docker 场景推荐使用交换分区:容器默认不限制内存,编译容器(如 bingo 并行构建)内存峰值高,一旦宿主机内存耗尽会触发 OOM 直接杀掉容器导致编译中断。配置 swap 后,未设置内存上限的容器默认即可使用宿主 swap,内存不足时自动兜底,避免容器被 OOM kill。仅当容器显式设置了内存上限(-m)时,才需额外设置 --memory-swap=-1 才允许容器使用宿主 swap。
通过下面的命令检查当前Swap交换分区大小,系统要求建议交换分区 32GB:
free -h(容器创建后)检查运行中的容器是否设置了内存上限:
# 返回 0 表示未限制,返回具体数值(字节)表示已设置上限
docker inspect <容器名> --format '{{.HostConfig.Memory}}'
# 或用 docker stats 查看内存 LIMIT 列
docker stats <容器名>以创建 4 个 8GB swap 文件(共 32GB)为例:
# 创建 4 个 8GB swap 文件并启用
for i in 1 2 3 4; do
sudo dd if=/dev/zero of=/swapfile${i} bs=1M count=8192
sudo chmod 600 /swapfile${i}
sudo mkswap /swapfile${i}
sudo swapon /swapfile${i}
doneTIP
swap 文件路径和大小可按磁盘空间调整,建议放在空间充足的分区。
swapon 仅在当前会话生效,重启后失效。需写入 /etc/fstab 持久化,开机自动挂载:
for i in 1 2 3 4; do
echo "/swapfile${i} none swap sw 0 0" | sudo tee -a /etc/fstab
done验证配置是否生效:
sudo swapon -a
swapon --show
free -hswapon --show 能列出 4 个 swap 文件即配置成功,再用 free -h 确认 Swap 总容量为 32G。
NOTE
swap 本质是磁盘空间,仅用于运行时内存(RAM)耗尽时存放暂时用不到的内存页,性能远低于物理内存。只有 RAM 和 swap 全部用尽时,系统才会触发 OOM 杀掉进程。磁盘空间充足的场景建议优先扩充物理内存(运行时内存)(如加装内存条、WSL 上调大 .wslconfig 的 memory=),使编译进程尽可能运行在 RAM 中;若希望编译进程少用 swap(避免变慢),可通过调低 vm.swappiness 减少 swap 使用。
Docker 环境检查
在终端运行 docker ps:
- 能正常输出(无报错)说明 Docker 已就绪,请继续下一节;
- 报错或命令不存在,请先完成 Docker 安装,详见《Docker开发环境搭建》的"安装Docker工具"章节(Windows / Ubuntu Desktop 桌面用户装 Docker Desktop;Ubuntu Server 及其他 Linux 命令行用户装 Docker CE),安装完成后回到本页继续。
网络配置
构建过程需要访问以下在线资源,需要确保网络连通。
- mirrors.huaweicloud.com - 华为云镜像
- registry.npmmirror.com - npm 淘宝镜像
- openubmc-apt-repo.obs.cn-north-4.myhuaweicloud.com - openUBMC apt 仓库
- conan.openubmc.cn - openUBMC conan 仓库
- repo.openubmc.cn - openUBMC 工具仓库
TIP
社区开发镜像已内置 apt 源与签名公钥,无需访问 keyserver.ubuntu.com;上表域名用于依赖下载与构建。
在终端中运行以下命令检查连通性(bash 命令:Linux 终端、Git Bash、WSL 中执行;Windows 用户建议在 Git Bash 或 WSL 中运行,也可跳过本检查、进入容器后再执行——容器内自带 curl)。
for url in \
"https://mirrors.huaweicloud.com" \
"https://registry.npmmirror.com" \
"https://openubmc-apt-repo.obs.cn-north-4.myhuaweicloud.com" \
"https://conan.openubmc.cn" \
"https://repo.openubmc.cn"
do
echo -n "$url: "
curl -s -o /dev/null -w "%{http_code}\n" --max-time 5 "$url"
doneNOTE
以上命令检查的是各域名根路径的 HTTP 响应,仅用于辅助判断网络状态,无需将全部返回 200 作为开始构建的前提:返回 200 仅代表该请求成功,不代表所有依赖都可下载;其他 HTTP 状态码可能与重定向、访问权限或根路径未提供资源有关,不能仅据此判定环境不可用;000 表示未取得 HTTP 响应,需结合具体请求判断原因。若构建过程实际发生下载失败,请根据日志中的失败 URL 和错误信息,参考《常见问题》的"网络相关失败"章节排查网络、代理或访问权限问题;已能正常拉取与构建时,无需仅因上述检查结果重复配置。
拉取镜像并创建容器
拉取镜像
打开命令行,运行
docker pull拉取镜像bashdocker pull swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_26.09说明
镜像版本号格式为 {Ubuntu基础版本}_{openUBMC版本},其中 Ubuntu 基础版本可能随镜像更新而变化。
运行
docker image ls查看镜像是否加载成功bashdocker image ls输出示例:
textIMAGE ID DISK USAGE CONTENT SIZE EXTRA swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_26.09 d4588fdb06db 13.6GB 3.33GB U
创建容器实例
在主机侧创建工作文件夹,用于主机与容器间共享数据(Linux 下承载代码与构建产物;Windows 下作为与容器互传文件的通道,见下方创建容器后的说明):
bash# Linux sudo mkdir -p /root/workspaceTIP
非 root 的 Linux 用户可改用家目录:
mkdir -p ~/workspace,并将下方docker run中--mount的source=/root/workspace替换为source=$HOME/workspace。powershell# Windows(CMD / PowerShell 均可,与下方 windows 容器命令的挂载路径对应) mkdir C:\workspaceTIP
路径可按需更换(如
D:\workspace),更换后请同步修改下方docker run命令中--mount的source参数。运行
docker run创建容器实例openubmc(端口映射可按需调整):bash# linux 命令 docker run -itd --init --pids-limit=32768 --privileged=true -p 10000:10000 -p 10022:10022 -p 10023:10023 -p 10443:10443 -p 10623:10623 --mount type=bind,source=/root/workspace,target=/home/workspace --restart=always --name openubmc swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_26.09 /bin/bash # windows 命令 docker run -itd --init --pids-limit=32768 --privileged=true -p 10000:10000 -p 10022:10022 -p 10023:10023 -p 10443:10443 -p 10623:10623 --mount type=bind,source=C:\workspace,target=/home/data --restart=always --name openubmc swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_26.09 /bin/bashNOTE
容器名具有唯一性:重复执行上述命令会产生重名冲突,需先执行
docker stop openubmc、docker rm openubmc删除已创建的容器。 完整参数说明(--init、--pids-limit、--privileged、端口映射等)与 Windows(NTFS)文件权限注意事项,见《Docker开发环境搭建》的"创建容器实例"章节。通过
docker exec -it进入容器进行操作(容器内默认即 root 用户,无需切换):bashdocker exec -it openubmc /bin/bash必要时,可输入
exit退出容器。之后可通过docker exec -it再次进入容器。NOTE
Windows 用户:Windows 容器命令将
C:\workspace挂载到容器/home/data,该目录用于容器与宿主机互传文件(Windows 文件系统与 Linux 存在权限模型差异,不宜作为构建目录)。代码克隆与构建产物位于容器内/home/workspace;如需保存到宿主机,可将产物复制到/home/data。删除容器前请注意备份。
获取代码并登录
GitCode 配置
openUBMC 社区使用 GitCode 管理代码,如果您需要为社区提交代码:
请完成 GitCode SSH 密钥配置。
注册并绑定邮箱,之后在终端中配置本地 git。
git config --global user.name <your username>
# 邮箱务必与 CLA 签署地址一致
git config --global user.email <your email>IMPORTANT
提交 PR 时,CI 会基于 git config 的邮箱校验 CLA 签署状态,请确保邮箱一致。
克隆 manifest 仓库
manifest 仓库是构建的入口,管理所有子仓库的版本依赖和构建策略。在容器内执行:
mkdir -p /home/workspace && cd /home/workspace
git clone https://gitcode.com/openUBMC/manifest.git
cd manifestTIP
再次进入同一容器时,manifest 仓库已存在于容器内 /home/workspace/manifest,无需重新克隆:执行 cd /home/workspace/manifest && git pull 拉取最新版本后继续即可。
登录 conan
准备 openUBMC 社区账号(构建拉取依赖包时需登录 conan,账号同 openUBMC 社区用户名和密码)。如已有账号可直接使用,没有则先到openUBMC社区账号注册页面进行注册。
在容器内执行登录(<用户名> 为注册时绑定的手机号或自定义用户名):
conan remote login openubmc_opensource <用户名> -p '<密码>'NOTE
命令行携带密码会进入 shell 历史与进程列表:人工长期使用时建议省略 -p 改为交互式输入,或通过 CONAN_LOGIN_PASSWORD 环境变量传入;自动化脚本场景可保留 -p。 [!NOTE] 社区开发镜像已内置与 26.09 版本匹配的完整开发环境(构建工具、SDK 与依赖缓存),无需再执行 init.py 初始化。如需重新初始化环境(如工具升级、切换开发版本),请参考《开发环境初始化》。
问题排查
构建过程中如果遇到问题,请参考《常见问题》进行排查处理。
完成后请参考《构建你的BMC》开始开发。