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编译成功。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2018-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2898
来自专栏魂祭心

原 canvas绘制clock

4004
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6588
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3035
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2612
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2605
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2667
来自专栏落花落雨不落叶

canvas画简单电路图

58411
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4798

扫码关注云+社区