前言
鉴于网上对于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按钮
下载odl之后还需要下载odlparent源码
继续下载distribution源码
3、github方式
odl控制器源码同时也会放在github上托管,浏览器输入https://github.com/opendaylight,找到controller
同理,下载controller之后需要下载odlparent源码
继续下载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文件,打开并修改,修改内容为:
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个小时,所以请耐心等待,出现如下说明编译成功
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
2、安装组件,比如我需要安装L2Switch,在控制台输
feature:install odl-l2switch-all
3、查看该组件是否安成功
feature:list -i|grep l2switch
得到
好了,一个发行版odl控制器的编译全过程就已经讲完了
下一篇文章将讲md-sal应用程序开发指南,文章写的仓促,有错误还请大家指点改正,谢谢,同时也非常热于和大家一起交流学习。