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

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

  • 在编译过程中,使用随后的命令开启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.

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐