编译SONiC交换机镜像(转,参考2)

本文档详述了如何为网络交换机构建SONiC操作系统镜像及Docker镜像,涵盖构建流程、硬件需求、软件配置、镜像类型及目标,适用于Broadcom、Marvell、Mellanox等ASIC平台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sonic-buildimage

编译SONiC交换机镜像
描述

以下是关于如何为网络交换机构建(ONIE)兼容网络操作系统(NOS)安装程序镜像的说明,以及如何构建在NOS内运行的Docker镜像。请注意,SONiC镜像是根据每个ASIC平台来构建的。使用相同ASIC平台的交换机共享一个通用镜像。有关支持的交换机和ASIC的列表,请参阅此列表。

硬件

任何服务器都可作为构建映像的服务器。我们使用的服务器带有1T容量的硬盘。操作系统是Ubuntu 16.04。

 

先决条件
SAI 版本

请参考 SONiC 路线图 中关于每个SONiC版本所对应的SAI版本信息. SAI全称 Switch Abstraction Interface,交换机抽象接口。

克隆或者获取带有所有git子模块的代码库
为了递归克隆代码仓库,假设Git版本为1.9或更高版本:

git clone https://github.com/Azure/sonic-buildimage.git

用法
要构建SONiC安装程序镜像和Docker镜像,请运行以下命令:

# 确保你的开发系统上加载 'overlay' 模块
sudo modprobe overlay

# 进入源码目录
cd sonic-buildimage

# (可选的) 获取特定分支。默认情况下,使用主分支
git checkout [branch_name]

# 克隆仓库后执行make init一次,亦或取得带有子模块更新的远程仓库后也要执行一次
make init

# 执行make configure一次以配置ASIC
make configure PLATFORM=[ASIC_VENDOR]

# 构建SONiC镜像
make all


注意:

建议预留50G的可用空间以构建一个平台镜像.

如果Docker的工作目录 /var/lib/docker,位于没有足够可用空间的分区上,你可能会在Docker容器生成作业期间遇到如下错误:

/usr/bin/tar: /path/to/sonic-buildimage/<some_file>: Cannot write: No space left on device

解决方案是 移动目录 到由充足空闲空间的分区.

 

export http_proxy="http://XXXX:6080"      

export https_proxy="http://XXXX:6080"

在编译过程中,使用随后的命令开启Http(s)代理:http_proxy=[your_proxy] https_proxy=[your_proxy] make

将你的用户账号添加到 docker 组中,并使用此账号编译. 不支持 root 或者 sudo 命令.

 

SONiC安装程序包含需要的所有Docker镜像。SONiC对同一ASIC供应商的所有设备使用同一个镜像。支持的ASIC供应商包括:

PLATFORM=broadcom
PLATFORM=marvell
PLATFORM=mellanox
PLATFORM=cavium
PLATFORM=centec
PLATFORM=nephos
PLATFORM=p4
PLATFORM=vs
对于 Broadcom 公司的 ASIC平台硬件, 我们构建 ONIE 和 EOS 两个镜像.

Arista公司的硬件使用 EOS 镜像, ONIE 镜像用于所有其它基于Broadcom公司 ASIC 硬件的设备.

make configure PLATFORM=broadcom
# 构建 Debian stretch 所需目标
BLDENV=stretch make stretch
# 构建 ONIE 镜像
make target/sonic-broadcom.bin
# 构建 EOS 镜像
make target/sonic-aboot-broadcom.swi


你可能会发现规则/配置文件很有用。它们包含构建过程的配置选项,诸如添加更多详细信息或显示基础镜像的依赖关系、用户名和密码等.

每个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软件包。为了更熟悉构建过程并对其进行一些更改,建议阅读此简短的文档.

 

注意:
如果你是第一次运行make,则会自动生成以 sonic-slave-${USER} 命名的Docker镜像。这可能需要一段时间,但这是一次性操作,所以请耐心等待。

根root用户账号已禁用. 尽管如此,新创建的用户可使用 sudo 命令.

目标目录是./target,包含NOS安装程序镜像和docker镜像.

sonic-generic.bin: SONiC 交换机安装程序镜像 (ONIE compatible)
sonic-aboot.bin: SONiC 交换机安装程序镜像 (Aboot compatible)
docker-base.gz: 用于其它Docker镜像构建的基础Docker镜像,仅用于构建过程 (gzip tar archive)
docker-database.gz: 用于内存中键值对存储的Docker镜像,用作进程间通信 (gzip tar archive)
docker-fpm.gz: 启用FPM模块的Quagga路由软件包Docker镜像 (gzip tar archive)
docker-orchagent-brcm.gz: Broadcom平台上用作交换机状态服务(SWSS)的Docker镜像 (gzip tar archive)
docker-orchagent-cavm.gz: Cavium平台上用作交换机状态服务(SWSS)的Docker镜像 (gzip tar archive)
docker-orchagent-mlnx.gz: Mellanox平台上用作交换机状态服务(SWSS)的Docker镜像 (gzip tar archive)
docker-orchagent-nephos.gz: Nephos平台上用作交换机状态服务(SWSS)的Docker镜像 (gzip tar archive)
docker-syncd-brcm.gz: 用于守护进程同步数据库和Broadcom交换ASIC的Docker镜像 (gzip tar archive)
docker-syncd-cavm.gz: 用于守护进程同步数据库和Cavium交换ASIC的Docker镜像 (gzip tar archive)
docker-syncd-mlnx.gz: 用于守护进程同步数据库和Mellanox交换ASIC的Docker镜像 (gzip tar archive)
docker-syncd-nephos.gz: 用于守护进程同步数据库和Nephos交换ASIC的Docker镜像 (gzip tar archive)
docker-sonic-p4.gz: 用于P4软件交换机的综合Docker镜像 (gzip tar archive)
docker-sonic-vs.gz: 用于软件虚拟交换机的综合Docker镜像 (gzip tar archive)

贡献指南
贡献被接受之前,所有贡献者必须签署贡献许可协议。联系 sonic-cla-agreements@microsoft.com.
 

### 白盒交换机 Sonic OS 编译调试教程 #### 1. SONiC 操作系统的背景 SONiC 是一种开源的网络操作系统,专为白盒交换机设计。它支持多种硬件平台,并通过模块化架构提供灵活的功能扩展能力[^3]。 --- #### 2. 安装环境准备 为了成功编译和部署 SONiC,在主机环境中需要完成以下准备工作: ##### (1)Docker 环境配置 SONiC 使用 Docker 来构建其容器化的服务组件。以下是安装 Docker 所需的关键步骤: ```bash sudo apt-get update sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce ``` 此部分操作参考了通用的 Docker 安装流程[^4]。 ##### (2)Git 和 Build 工具链 确保系统已安装必要的工具链用于代码克隆和编译: ```bash sudo apt-get install git build-essential python-dev libssl-dev ``` --- #### 3. SONiC 源码获取与编译 ##### (1)克隆 SONiC 源码仓库 从 GitHub 获取最新的 SONiC 源码库: ```bash git clone --depth 1 https://github.com/Azure/sonic-buildimage.git cd sonic-buildimage ``` ##### (2)启动编译过程 执行以下命令以触发完整的编译流程: ```bash ./build.sh ``` 注意:整个编译过程可能耗时较长,具体时间取决于宿主机性能以及目标硬件的支持情况。 --- #### 4. 文件系统修复注意事项 在某些情况下,可能会遇到 `/dev/sdb1` 上文件系统未正常卸载的问题(如提示 `Volume was not properly unmounted`)。此时可以通过运行以下命令检查并修复文件系统错误: ```bash sudo fsck /dev/sdb1 ``` 这一操作有助于解决因安装介质损坏而导致的潜在问题[^1]。 --- #### 5. ASIC 平台适配 不同类型的交换机对应不同的 ASIC 芯片平台。例如: - Broadcom 基础的 ASIC 可能使用 `broadcom` 平台代码; - Barefoot Tofino 则采用 `p4` 平台代码。 用户可以根据实际使用的硬件型号访问 SONiC 社区文档页面确认具体的兼容性列表[^2]: [Supported Devices and Platforms](https://github.com/Azure/SONiC/wiki/Supported-Devices-and-Platforms) --- #### 6. 调试技巧 当 SONiC 成功部署到白盒交换机后,可通过以下方法进行调试: - **日志分析**: 查看关键服务的日志输出,路径通常位于 `/var/log/syslog` 或各服务对应的专用目录下。 - **CLI 接口测试**: 进入 SONiC CLI (`config mode`) 测试基本功能是否正常工作。 - **SNMP/MIB 验证**: 对于监控需求较高的场景,验证 SNMP 支持状态及其 MIB 数据准确性。 --- #### 7. 总结 综上所述,SONiC 提供了一种开放式的解决方案适用于现代数据中心中的白盒交换机应用场合。尽管目前仍存在一定局限性,但它凭借强大的社区支持和技术潜力正逐步成为主流选择之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值