SDN开发笔记(三):ODL源码编译生成发行版控制器

前言


鉴于网上对于SDN开发相关的资料较少又乱的现状,从这篇文章开始,我将陆续分享我在SDN开发过程中的经验,我的SDN项目开发是基于OpenDaylight的release-lithium-sr3版本,该版本相对稳定。分享内容都是经过我精心测试与验证,包括:

1、SDN开发环境的搭建(win7环境)

2、SDN控制器的使用(ubuntu环境搭建、controller使用、mininet的使用)

3、ODL源码编译生成发行版控制器

4、md-sal应用程序开发指南

5、应用程序集成到ODL控制器

6、yang模型详解

7、md-sal的l2switch源码分析


环境搭建


继前两篇文章《SDN开发环境的搭建(win7环境)》和《SDN控制器的使用(ubuntu环境搭建、controller使用、mininet的使用)》之后,参照上述两篇文章将开放环境搭建好,开始尝试从源码编译生成发行版二进制文件,顺便也解答下一些网友在此过程中遇到的问题,从源码编译生成odl控制器这一步骤是每个开发人员都要掌握的内容。


在Ubuntu中搭建好环境(参照ubuntu环境搭建这篇文章)之后,需要下载odl源码。

编译前准备

1、下载odl源码

下载odl源码有两种方式,一种是从gerrit上下载,一种是从github上下载。


2、Gerrit方式

gerrit是odl控制器源代码官方存储位置,在浏览器中输入https://git.opendaylight.org,点击Projects按钮

SDN开发笔记(三):ODL源码编译生成发行版控制器
下载odl之后还需要下载odlparent源码
SDN开发笔记(三):ODL源码编译生成发行版控制器继续下载distribution源码

3、github方式

odl控制器源码同时也会放在github上托管,浏览器输入https://github.com/opendaylight,找到controller

SDN开发笔记(三):ODL源码编译生成发行版控制器同理,下载controller之后需要下载odlparent源码
SDN开发笔记(三):ODL源码编译生成发行版控制器
继续下载distribution源码

4、源码上传至ubuntu

本例中采用github的方式将odl的controller与odlparent源码下载下来,同时还需要下载的组件有aaa、dlux、l2switch、openflowjava、topoprocessing,使用Xshell工具将上述文件上传至ubuntu,如下:


5、准备仓库

在安装好maven之后,maven会在制定目录创建一个repository本地仓库,以后编译出来的jar包会自动安装到该仓库中,比如我的maven本地仓库为/root/.m2/repository。


6、准备parent

在编译之前,需要将odlparent的settings.xml复制到maven仓库


比如我的maven仓库放在/root/.m2/中,所以讲settings.xml复制到该目录下


编译源码


1、经过上述准备之后,就需要修改feature了,将需要编译的组件加进distribution,这样编译出来的控制器发行版本就在distribution/distributions/karaf/target当中。这就是为什么我们从官网下载下来的odl控制器二进制文件的名字为distribution-karaf-xx-xx,比如distribution-karaf-0.3.3-Lithium-SR3.tar.gz


2、修改feature,在/distribution/features/index/src/main/resources中找到features.xml文件,打开并修改,修改内容为:

SDN开发笔记(三):ODL源码编译生成发行版控制器




3、其实上述的修改就是将需要的组件编译进distribution,比如我想将l2switch组件和openflowplugin组件编译进distribution,则需要添加如下代码。

4、修改好的feature文件保存,这时准备工作基本做完了


5、编译源码

在*目录输入 mvn clean install 开始编译,其他编译命令和说明如下:



mvn clean install --settings ./settings.xml  完整编译

mvn clean --settings ./settings.xml  清除编译成果。

mvn clean install --settings ./settings.xml>trace-name.log  保留log。

mvn clean install --settings ./settings.xml–errors    详细错误信息。

mvn clean install --settings ./settings.xml  -Dcheckstyle.skip  忽略检查,加快编译。

继续编译。

mvn clean install --settings ./ settings.xml-Dcheckstyle.skip–DskipTests -rf  :xxx

编译过程中失败,无需从头开始再编译,从失败位置续编。

以工程sal为例,在根目录下运行命令:

mvn clean install --settings ./ settings.xml-Dcheckstyle.skip–DskipTests–rf  :sal

注意,命令中的sal与具体工程(sal)目录下pom.xml中的artifactId指定的名称一致。


6、编译成功,整个编译过程需要2-3个小时,所以请耐心等待,出现如下说明编译成功

SDN开发笔记(三):ODL源码编译生成发行版控制器

7、在/distribution/distributions/karaf/target下可以看到以下文件

assembly

distribution-karaf-0.3.3-Lithium-SR3.tar.gz

distribution-karaf-0.3.3-Lithium-SR3.zip


assembly 目录下有karaf文件,可以直接运行启动odl控制器,

distribution-karaf-0.3.3-Lithium-SR3.tar.gz是采用tar方式打包的odl控制器二进制文件

distribution-karaf-0.3.3-Lithium-SR3.zip是采用zip方式打包的odl控制器二进制文件

后两者就是官网发布的两种打包方式的二进制文件,可以复制到其他虚拟机启动了。

测试验证

1、将distribution-karaf-0.3.3-Lithium-SR3.zip复制到安装好jdk环境的虚拟机,解压运行./karaf

SDN开发笔记(三):ODL源码编译生成发行版控制器
2、安装组件,比如我需要安装L2Switch,在控制台输

feature:install odl-l2switch-all

3、查看该组件是否安成功

feature:list -i|grep l2switch

得到
SDN开发笔记(三):ODL源码编译生成发行版控制器
好了,一个发行版odl控制器的编译全过程就已经讲完了


下一篇文章将讲md-sal应用程序开发指南,文章写的仓促,有错误还请大家指点改正,谢谢,同时也非常热于和大家一起交流学习。


上一篇:OpenStack与SDN控制器的集成


下一篇:SDN技术分享(十):GoogleFiber的宽带接入速率控制解决方案