以下是关于如何为网络交换机构建(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.