SONiC-P4 image build解析

作者简介:彭晓军,成都共维科技资深网络工程师,主要从事SD-WAN产品及方案的设计及开发工作。

SONiC-P4是Barefoot公司开发的P4模拟交换机程序,运行真实的SONiC网络协议栈。因此基于此环境,可以方便的开发和测试基于SONiC的上层特性。当前SONiC-P4可使用docker image,可运行在任何系统docker环境。本文主要基于SONiC-P4的Building Guide并结合作者自身在image build过程中遇到的问题进行说明,通过新增对OVS的支持举例说明扩展新模块时对应build的修改点,希望对后续基于SONiC的开发人员所启示。

一、build 源码

(一)Git下载代码

(二)make操作

按照buidling guide的解释,以上步骤编译完成后,在./target下生成target的image,PLATFORM=p4则生成docker-sonic-p4.gz 。但理想和现实总会有所差距,在大陆环境编译首先会遇到docker build的Dockfile的更新包错误,因为源码的部分package会去googlesource.com,useso.com去获取,失败就在所难免了。这时比较彻底的解决方式是把你的代码迁移到海外的build server去make,当然使用本地穿墙的渠道或有足够耐心根据错误逐个替换成大陆地区可访问的资源来获取也可以解决。

二、Build框架

下文是对building guide的解释,一是build框架,二是主要部分的作用。

(一)SONiC buildimage框架

SONiC将build过程定义为前端和后端两个部分:

后端(Backend):一系列makefile的动作集合,定义target groups。

Makefile,slave.mk和sonic-slave/Dockerfile,是buildimage的后端。

Makefile基于sonic-slave 的docker image打包,生成最终docker文件。

Salve.mk是实际执行的makefile,为target groups定义一系列规则。在recipe里定义的每个target都有一个make规则。

每部分的build都是在sonic-slave这个容器里进行的。当第一次进行build时,一个基于sonice-slave/Dockerfile的新的sonic-slave image会被build出来。随后在此容器里,make命令会被执行,基于容器的make过程对外是透明的。

前端(Frontend):一系列recipes的集合,为target定义metadata。

Rules/包含平台无关target的一系列recipe,每个recipe是一个描述具体target的metadata的文件。

Rules/config 通过对参数选择enable/disable,为build系统所使用的配置文件。

Platform/包含具体vendor的recipe。

(二)Recipes和target groups

Recipe是makefile文件,定义build的具体target相关的一组变量。如果需要新增target,则需对应添加该target的recipe。

Target groups是根据相同规则来build的一组target的集合。每个recipe设置自己所属于的target group。如SONIC_DEPKG_DEBS、SONIC_MAKE_DEBS、SONIC_COPY_DEBS、SONCI_COPY_FILES、SONIC_ONLINE_DEBS、SONIC_ONLINE_FILES,在salve.mk里会看到对这些target的分类处理。

三、build增加OVS支持

SONiC-P4源码并没有对OpenFlow支持,尝试基于SONiC-P4的build框架,增加对OVS的支持从而使该vSwitch支持OpenFlow特性。Target groups可选用SONIC_MAKE_DEBS方式,也可采用SONIC_COPY_DEBS方式编译,每种方式都需要增加修改前端及后端编译文件,主要修改点如下:

1、src下增加ovs目录,根据采用的target groups方式编写相应Makefile,主要目的是生成ovs的deb文件,并copy到target/debs目录下。

2、Platform/p4/下增加ovs.mk

3、Platform/p4/rules.mk增加include ovs.mk

4、修改platform/p4/docker-sonic-p4/Dockerfile.j2,

以便满足对应lib的加载要求,解决docker下的依赖问题。形如:

5、platform/p4/docker-sonic-p4.mk,增加OVS对应deb文件的编译。

6、加载编译后的docker image验证 OVS编译成功。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180604B1NVVK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券