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 条评论
登录 后参与评论

相关文章

来自专栏Winter漫聊技术

NowView——站酷、MONO、知乎等图文精选AppNowView 4.1

一款Android图文精选app,通过抓取网页获得图文列表。目前包含站酷(Zcool)精选、国家地理(National Geographic)每日一图、MONO...

851
来自专栏腾讯社交用户体验设计

高效编写微信小程序-你还在手动创建新项目吗?

1313
来自专栏张戈的专栏

重置多说配置后的问题,这是不让我从良的节奏啊(附禁用谷歌在线字体的方法)!

本想今天发文从良,金盆洗手,从此不再折腾博客,安心写文章的。结果,发现多说又不能同步服务器评论到本地了!特么真是怕什么来什么啊!想来这金盆暂时用不着了。。。 想...

3665
来自专栏技术之路

Docker部属Nsq集群

  用一了段时间NSQ还是很稳定的。除了稳定,还有一个特别值的说的就是部署非常简单。总想写点什么推荐给大家使用nsq来做一些东西。但是就是因为他太简单易用,文档...

3189
来自专栏杨建荣的学习笔记

shell动态脚本和pl/sql动态脚本的比较

最近项目有一个需求,需要在多个数据库的schema上跑一些脚本。希望dba能够提供一个脚本,能够根据需求在环境中执行指定的脚本。 乍一听,没什么技术难点,为了更...

3656
来自专栏数据小魔方

DIY你的菜单和工具栏,订制属于你自己的工作界面!

DIY你的菜单工具栏 订制自己的专属工作界面! 今天是小魔方的第二篇推送,教程是昨晚熬夜写的,但是平台限制订阅号每天只能发送一篇推送,所以才拖到现在! 平时我...

2588
来自专栏全华班

SpringBoot学习手册-什么springboot(入门)

一、重新认识spring 一个简单的spring应用需要包含哪些基础的东西呢? 一个项目结构 ,需要引入一些web应用的依赖包 一个web.xml文件 一...

3174
来自专栏彭湖湾的编程世界

【Atom】在一个中/大型项目中,那些好用而强大的atom功能

作为一个学生党,一开始使用atom时候并没有意识到atom一些小功能的巨大作用,直到自己实习参与了项目,才知道这些功能在一个项目中是能极大提高工作效率的开发利器...

17710
来自专栏上善若水

Emacs001学用Emacs之入门:关于配置文件

编辑器是我们经常要打交道的工具,工欲善其事,必先利其器。每一个领域都有专用的好的工具,比如android开发用android sduio, 我先用emacs填...

1274
来自专栏iOSDevLog

XcodeXcode 9 的全新功能您会喜欢的工具。内建 Interface BuilderXcode IDE

在 Apple 平台上打造精彩超凡的 app 所需要的一切,Xcode 9 都已为您准备好。即使在编辑最大的文件时,它也能保持超乎想象的高速流畅。它比以往更了解...

623

扫码关注云+社区