sonic-net/sonic-buildimage

GitHub: sonic-net/sonic-buildimage

SONiC 官方构建系统,用于为多种 ASIC 平台编译可安装的白盒交换机网络操作系统镜像。

Stars: 930 | Forks: 1742

*master 构建*: [![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=master&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=master) [![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=master&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=master) [![Marvell-Teralynx](https://dev.azure.com/mssonic/build/_apis/build/status/innovium/Azure.sonic-buildimage.official.marvell-teralynx?branchName=master&label=Marvell-Teralynx)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=2432&branchName=master) [![Marvell-Prestera(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-prestera-armhf?branchName=master&label=Marvell-Prestera-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=master) [![Marvell-Prestera(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-prestera-arm64?branchName=master&label=Marvell-Prestera-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=master) [![Nvidia-Bluefield](https://dev.azure.com/mssonic/build/_apis/build/status/nvidia/Azure.sonic-buildimage.official.nvidia-bluefield?branchName=master&label=Nvidia-Bluefield)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=1665&branchName=master) [![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=master&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=master) *202511 构建*: [![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=202511&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=202511) [![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=202511&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=202511) [![Marvell-Teralynx](https://dev.azure.com/mssonic/build/_apis/build/status/innovium/Azure.sonic-buildimage.official.marvell-teralynx?branchName=202511&label=Marvell-Teralynx)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=2432&branchName=202511) [![Marvell-Prestera(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-prestera-armhf?branchName=202511&label=Marvell-Prestera-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=202511) [![Marvell-Prestera(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-prestera-arm64?branchName=202511&label=Marvell-Prestera-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=202511) [![Nvidia-Bluefield](https://dev.azure.com/mssonic/build/_apis/build/status/nvidia/Azure.sonic-buildimage.official.nvidia-bluefield?branchName=202511&label=Nvidia-Bluefield)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=1665&branchName=202511) [![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=202511&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=202511) *202505 构建*: [![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=202505&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=202505) [![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=202505&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=202505) [![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=202505&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=202505) [![Marvell(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-arm64?branchName=202505&label=Marvell-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=202505) [![Nvidia-Bluefield](https://dev.azure.com/mssonic/build/_apis/build/status/nvidia/Azure.sonic-buildimage.official.nvidia-bluefield?branchName=202505&label=Nvidia-Bluefield)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=1665&branchName=202505) [![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=202505&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=202505) *202411 构建*: [![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=202411&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=202411) [![Centec](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec?branchName=202411&label=Centec)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=143&branchName=202411) [![Centec(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec-arm64?branchName=202411&label=Centec-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=140&branchName=202411) [![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=202411&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=202411) [![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=202411&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=202411) [![Marvell(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-arm64?branchName=202411&label=Marvell-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=202411) [![Nvidia-Bluefield](https://dev.azure.com/mssonic/build/_apis/build/status/nvidia/Azure.sonic-buildimage.official.nvidia-bluefield?branchName=202411&label=Nvidia-Bluefield)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=1665&branchName=202411) [![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=202411&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=202411) *202405 构建*: [![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=202405&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=202405) [![Centec](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec?branchName=202405&label=Centec)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=143&branchName=202405) [![Centec(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec-arm64?branchName=202405&label=Centec-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=140&branchName=202405) [![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=202405&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=202405) [![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=202405&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=202405) [![Marvell(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-arm64?branchName=202405&label=Marvell-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=202405) [![Nvidia-Bluefield](https://dev.azure.com/mssonic/build/_apis/build/status/nvidia/Azure.sonic-buildimage.official.nvidia-bluefield?branchName=202405&label=Nvidia-Bluefield)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=1665&branchName=202405) [![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=202405&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=202405) ## SONiC 镜像 Azure Pipelines 所有 SONiC 项目构建管道均可在 [SONiC 镜像下载门户](https://sonic-build.azurewebsites.net/pipelines) 找到 # sonic-buildimage ## 构建 SONiC 交换机镜像 # 描述 以下是如何为网络交换机构建 [(ONIE)](https://github.com/opencomputeproject/onie) 兼容网络操作系统 (NOS) 安装镜像,以及如何构建在 NOS 内部运行的 docker 镜像的说明。 请注意,SONiC 镜像是按 ASIC 平台构建的。使用相同 ASIC 平台的交换机共享一个通用镜像。 有关支持的交换机和 ASIC 列表,请参阅此 [列表](https://github.com/sonic-net/SONiC/wiki/Supported-Devices-and-Platforms) # 硬件 任何服务器都可以作为构建镜像服务器,只要它具备: * 多个核心以增加构建速度 * 足够的 RAM(少于 8 GiB 可能会导致问题) * 300G 的可用磁盘空间 * KVM 虚拟化支持。 目前构建 SONiC 的最佳操作系统选择是 Ubuntu 22.04 或 Ubuntu 24.04。 ## 自动化先决条件安装和仓库克隆 为了方便起见,您可以使用自动化先决条件脚本来处理先决条件安装和仓库克隆: ``` curl -sSL https://raw.githubusercontent.com/sonic-net/sonic-buildimage/master/scripts/prerequisites.sh | bash ``` 如果您已经克隆了仓库,请在本地运行它以仅安装先决条件 (该脚本会检测 `SONIC_DIR` 中已有的克隆并跳过克隆/检出步骤): ``` cd ~/sonic-buildimage # or wherever your clone lives SONIC_DIR=$(pwd) bash scripts/prerequisites.sh ``` 此脚本将自动: * 安装所需的软件包 (pip, jinja, Docker) * 配置 Docker 以允许非 root 用户使用 * 克隆仓库及所有子模块 完成此步骤后,请继续下方的 [使用方法](#usage) 部分。 ## 手动安装先决条件 * 在主机构建机器上安装 pip 和 jinja,如果 j2/jinjanator 不可用,请执行以下命令: ``` sudo apt install -y python3-pip pip3 install --user jinjanator ``` * 安装 [Docker](https://docs.docker.com/engine/install/) 并配置您的系统以允许在没有 'sudo' 的情况下运行 'docker' 命令: * 将当前用户添加到 docker 组:`sudo gpasswd -a ${USER} docker` * 登出并重新登录,以便重新评估您的组成员身份 * 如果您使用的是 Linux 内核 5.3 或更新版本,则必须使用 Docker 20.10.10 或更新版本。这是因为较旧的 Docker 版本不允许 `clone3` 系统调用,而该调用现在在 Bookworm 中被使用。 ## 手动克隆包含所有 git 子模块的仓库 要递归克隆代码仓库: ``` git clone --recurse-submodules https://github.com/sonic-net/sonic-buildimage.git ``` ## 使用方法 要构建 SONiC 安装镜像和 docker 镜像,请运行以下命令: ``` # 确保您的开发系统已加载 'overlay' 模块 sudo modprobe overlay # 进入源代码目录 cd sonic-buildimage # (可选)检出特定分支。默认情况下,使用 master 分支。 # 例如,要检出分支 201911,请使用 "git checkout 201911" git checkout [branch_name] # 在克隆 repo 后执行一次 make init, # 或在获取包含 submodule 更新的远程 repo 后执行 make init # 执行一次 make configure 以配置 ASIC make configure PLATFORM=[ASIC_VENDOR] # 使用 4 个并行任务构建 SONiC image。 # 注意:您可以设置更高的数值,但对于大多数情况,4 是一个不错的选择, # 并且经过了充分测试。 make SONIC_BUILD_JOBS=4 all ``` ### 构建性能提示 **并行度与内存:** 每个并行作业在 C++ 编译期间可能使用 4–6 GB RAM,外加约 4 GB 的基本开销。经验法则:`(JOBS × 6 GB) + 4 GB ≤ 可用 RAM`: | JOBS | 大致所需 RAM | 典型 VS 构建时间 | |------|-------------------|----------------------| | 1 | ~10 GB | ~3 小时 | | 4 | ~28 GB | ~1.5 小时 | | 8 | ~52 GB | ~1 小时 | **在构建容器中遏制 OOM**(保护主机进程): ``` # 添加到 rules/config.user(在 rebase 后保留): SONIC_BUILD_MEMORY = 24g ``` **跳过测试以加快迭代:** ``` make SONIC_BUILD_JOBS=4 BUILD_SKIP_TEST=y all ``` **使用持久化配置文件** 代替 CLI 覆盖 —— 创建 `rules/config.user`(已被 git 忽略): ``` SONIC_CONFIG_BUILD_JOBS = 4 BUILD_SKIP_TEST = y SONIC_BUILD_MEMORY = 24g DEFAULT_BUILD_LOG_TIMESTAMP = simple ``` 支持的 ASIC 供应商有: * PLATFORM=barefoot * PLATFORM=broadcom * PLATFORM=marvell-prestera * PLATFORM=marvell-teralynx * PLATFORM=mellanox * PLATFORM=centec * PLATFORM=nephos * PLATFORM=nvidia-bluefield * PLATFORM=vs ## ARM 架构使用方法 ``` sudo apt-get install --allow-downgrades -y docker-ce=5:18.09.0~3-0~ubuntu-xenial sudo apt-get install --allow-downgrades -y docker-ce-cli=5:18.09.0~3-0~ubuntu-xenial ``` 为 (ARMHF) 平台构建 Arm32 位 ``` # 执行一次 make configure 以配置 ASIC 和 ARCH make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=armhf make target/sonic-[ASIC_VENDER]-armhf.bin ``` _示例:_ ``` make configure PLATFORM=marvell-prestera PLATFORM_ARCH=armhf make target/sonic-marvell-prestera-armhf.bin ``` 在 amd64 主机上为 debian buster 使用交叉编译构建 Marvell Prestera 平台的 Arm32 位 (ARMHF),请运行以下命令: ``` # 执行一次 make configure 以配置 ASIC 和 ARCH 用于 cross-compilation build NOJESSIE=1 NOSTRETCH=1 BLDENV=buster CROSS_BLDENV=1 \ make configure PLATFORM=marvell-prestera PLATFORM_ARCH=armhf # 使用 cross-compilation 环境执行 Arm32 build NOJESSIE=1 NOSTRETCH=1 BLDENV=buster CROSS_BLDENV=1 make target/sonic-marvell-prestera-armhf.bin ``` 运行上述使用交叉编译而不是 qemu 模拟器的 Arm32 构建可以大幅减少构建时间。 为平台构建 Arm64 位 ``` # 执行一次 make configure 以配置 ASIC 和 ARCH make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=arm64 # 示例: make configure PLATFORM=marvell-prestera PLATFORM_ARCH=arm64 ``` **注意**: * 建议保留至少 100G 的可用空间来构建一个平台,使用单个作业。 如果在 `SONIC_BUILD_JOBS` 中设置超过 1,构建过程将使用更多磁盘。 * 如果 Docker 的工作区文件夹 `/var/lib/docker` 所在的分区没有足够的可用空间, 您可能会在 Docker 容器构建作业期间遇到如下错误: `/usr/bin/tar: /path/to/sonic-buildimage/: Cannot write: No space left on device` 解决方法是将[目录移动](https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory)到具有更多可用空间的分区。 * 使用 `http_proxy=[your_proxy] https_proxy=[your_proxy] no_proxy=[your_no_proxy] make` 在构建过程中启用 http(s) 代理。 * 将您的用户账户添加到 `docker` 组并使用您的用户账户进行 make。 不支持 `root` 或 `sudo`。 * 有关交叉编译错误的更多详细信息,请参阅 [README.arm64_build_on_amd64.md](https://github.com/sonic-net/sonic-buildimage/blob/master/README.arm64_build_on_amd64.md) SONiC 安装程序包含所需的所有 docker 镜像。 SONiC 对同一 ASIC 供应商的所有设备使用一个镜像。 对于 Broadcom ASIC,我们构建 ONIE 和 EOS 镜像。 EOS 镜像用于 Arista 设备, ONIE 镜像用于所有其他基于 Broadcom ASIC 的设备。 ``` make configure PLATFORM=broadcom # 构建 debian stretch 所需目标 BLDENV=stretch make stretch # 构建 ONIE image make target/sonic-broadcom.bin # 构建 EOS image make target/sonic-aboot-broadcom.swi ``` 您可能会发现 rules/config 文件很有用。 它包含构建过程的配置选项, 例如增加详细程度或显示依赖关系, 基础镜像的用户名和密码等。 每个 docker 镜像都构建并保存到 target/ 目录中。 因此,例如,要仅构建 docker-database,请执行: ``` make target/docker-database.gz ``` debian 软件包也是如此,它们位于 target/debs/ 下: ``` make target/debs/swss_1.0.0_amd64.deb ``` 每个目标都有一个 clean 目标,因此为了清理 swss,请执行: ``` make target/debs/swss_1.0.0_amd64.deb-clean ``` 建议使用 clean 目标来清理所有一起构建的软件包, 例如 dev 软件包。 为了更熟悉构建过程并对其进行一些更改, 建议阅读此简短[文档](README.buildsystem.md)。 ## 构建调试 dockers 和调试 SONiC 安装镜像 SONiC 构建系统支持构建带有调试工具和调试符号的 dockers 和 ONIE-image,以帮助进行实时和核心调试。 有关详细信息请参阅 [SONiC Buildimage 指南](https://github.com/sonic-net/sonic-buildimage/blob/master/README.buildsystem.md)。 ## SAI 版本 请参阅 [SONiC 路线图](https://github.com/sonic-net/SONiC/wiki/Sonic-Roadmap-Planning) 了解每个 SONiC 版本的 SAI 版本。 ## 说明 * 如果您是第一次运行 make,将自动构建 sonic-slave-${USER} docker 镜像。 这可能需要一些时间,但这是一次性操作,请耐心等待。 * root 用户账户已禁用。但是,创建的用户可以 `sudo`。 * 目标目录是 `./target`,包含 NOS 安装镜像和 docker 镜像。 * sonic-generic.bin: SONiC 交换机安装镜像 (ONIE 兼容) * sonic-aboot.bin: SONiC 交换机安装镜像 (Aboot 兼容) * docker-base.gz: 基础 docker 镜像,其他 docker 镜像基于此构建,仅在构建过程中使用 (gzip tar 归档) * docker-database.gz: 用于内存键值存储的 docker 镜像,用作进程间通信 (gzip tar 归档) * docker-fpm.gz: 启用了 fpm 模块的 quagga 的 docker 镜像 (gzip tar 归档) * docker-orchagent.gz: 用于 SWitch State Service (SWSS) 的 docker 镜像 (gzip tar 归档) * docker-syncd-brcm.gz: 用于同步数据库和 Broadcom 交换机 ASIC 的守护进程的 docker 镜像 (gzip tar 归档) * docker-syncd-cavm.gz: 用于同步数据库和 Cavium 交换机 ASIC 的守护进程的 docker 镜像 (gzip tar 归档) * docker-syncd-mlnx.gz: 用于同步数据库和 Mellanox 交换机 ASIC 的守护进程的 docker 镜像 (gzip tar 归档) * docker-syncd-nephos.gz: 用于同步数据库和 Nephos 交换机 ASIC 的守护进程的 docker 镜像 (gzip tar 归档) * docker-syncd-mrvl-teralynx.gz: 用于同步数据库和 Marvell-Teralynx 交换机 ASIC 的守护进程的 docker 镜像 (gzip tar 归档) * docker-syncd-mrvl-prestera.gz: 用于同步数据库和 Marvell-Prestera 交换机 ASIC 的守护进程的 docker 镜像 (gzip tar 归档) * docker-sonic-p4.gz: 用于 p4 软件交换机的一体化 docker 镜像 (gzip tar 归档) * docker-sonic-vs.gz: 用于软件虚拟交换机的一体化 docker 镜像 (gzip tar 归档) * docker-sonic-mgmt.gz: 用于 [管理、配置和监控 SONiC](https://github.com/sonic-net/sonic-mgmt) 的 docker 镜像 (gzip tar 归档) ## 贡献指南 所有贡献者在贡献被接受之前必须签署贡献许可协议。 访问 [EasyCLA - Linux Foundation](https://easycla.lfx.linuxfoundation.org)。 ## GitHub 工作流 我们遵循基本的 GitHub Flow。 如果您不知道我们在说什么,请查看 [GitHub 官方指南](https://guides.github.com/introduction/flow/)。 请注意,合并仅由仓库维护者执行。 提交指南: * 将每个提交隔离到一个组件/错误修复/问题/功能 * 使用标准的提交消息格式: 例如: * 每个开发者应该 fork 此仓库并 [将团队添加为贡献者](https://help.github.com/articles/adding-collaborators-to-a-personal-repository) * 将您的更改推送到您的私有 fork 并对此仓库进行 "pull-request" * 使用 pull request 进行代码审查 * 使用 issues 跟踪正在发生的事情 本项目采用了 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。 有关更多信息,请参阅 [行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/) 或联系 [opencode@microsoft.com](mailto:opencode@microsoft.com) 如有任何其他问题或意见。
标签:ASIC驱动, Azure, Broadcom, Debian, Makefile, Marvell, Mellanox, Nvidia, SDN, SONiC, SONiC构建镜像, 交换机, 固件构建, 客户端加密, 客户端加密, 开源网络, 数据中心网络, 构建系统, 编译脚本, 网络基础设施, 网络安全研究, 网络操作系统, 网络自动化, 裸机交换机, 请求拦截, 逆向工具