环境搭建,运行官方Demo
一、 官方文档和源码地址
我不喜欢扯一堆废话,所以我们直接进入主题,先将ODL的生产环境搭建起来,能够正常运行。这对初学者是非常重要的,初学者对一门技术刚刚入门的时候会感到很迷茫不知道如何去掌握一门技术最主要的原因是不知道这门技术如何运行起来?有哪些功能?当能够将生产环境运行起来,新手就能先确认总体的方向是正确的,然后再去对这门技术的整体框架去熟悉,了解学习这门新技术需要哪些方面的知识,才能针对性的去找相关的资料和源码来深入了解它。这也是我多年自学各种开发技术领悟到的心得,毕竟我从事过3年半的iOS开发、4年Java后端开发+部分前端开发,再到现在的SDN开发,每次都相当于跨行了。现在市面上很多的书籍都是开篇先教你一大堆的基础语法等等乱七八糟的东西,你翻了半本书,都快腻了还不知道如何将Demo运行起来。
ODL的官方网站如下(友情提示ODL的官网由于国内一些和谐原因可能无法打开,而且ODL相关的资料百度上基本没有):
https://www.opendaylight.org/
ODL是开源项目,源码都放在github上面。
https://github.com/opendaylight
在ODL的官网上有开发者文档,从首页进去就能看到
点击右下角可以选择不同版本的文档,因为ODL各个版本间的差异性比较大,所以文档差异也比较大,不过由于官方文档很简陋,所以对学习帮助作用很有限。
本人采用的版本是铝版本的第三个官方发行版本(stable-aluminium SR3),具体的文档地址:
https://docs.opendaylight.org/en/stable-aluminium/index.html
这部分我们后续再看,先到github上将最终运行的源码下载下来,
github上的ODL仓库中有许多子项目,这些都是ODL的组件或者框架工具库,后续会详细说明,先找到distribution工程,这是最终打包成容器的工程,ODL是运行在karaf容器上的,后续会详细说明。
进入distribution子工程,网址:
https://github.com/opendaylight/integration-distribution
在版本列表中找到aluminium-sr3版本的源码下载下来。当然,你也可以到官网上把已经编译好的部署包下载下来进行部署,不过那对于开发人员没有任何意义,因为你一定会进行二次开发的,所以我就只介绍用源码编译的方案。
二、 搭建环境依赖组件
如下图所示,aluminium-sr3版本的环境依赖JDK11和maven3.以上版本,这里不光是开发环境,也包含生产运行环境。都需要相同的配置。
JDK和MAVEN的安装以及环境变量的配置,百度一下就有很多,这里就不多加描述了,要注意的一点是maven 镜像库要选用华为的私服,因为华为自己有做SDN开发,华为私服上可以下载到完整的依赖包,其他镜像可能找不到部分依赖包。华为私服的配置如下,替换maven的settings.xml就行了。
xmlns:xsi="http://www.w3.org//XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/ http://maven.apache.org/xsd/settings-.xsd"> |
Windows开发环境
安装JDK11,以及配置环境变量
官网下载地址:
https://www.oracle.com/java/technologies/downloads/#java11-windows |
因为是可执行文件,直接双击开始安装,然后一直点下一步,完成安装。
配置环境变量
右键“我的电脑”-> 点击“属性”-> 点击“高级系统设置”-> 选择“环境变量”。
新建系统变量JAVA_HOME,变量值就是安装路径,一般是C:\Program Files\Java\jdk-
再编辑Path添加Java配置
安装配置Maven
Maven官方地址
https://maven.apache.org/download.cgi# |
随便将Maven解压到一个空间,比如D:\apache-maven-
然后设置“环境变量”
添加MAVEN_HOME
然后在Path中添加Maven配置
使用终端输入mvn -v命令查看Maven是否配置完成。
Linux生产环境
同样在Oracle官网上下载二进制的JDK11包,如下
把安装包上传到linux服务器你要安装的位置,解压
tar -zxvf jdk-11_linux-x64_bin.tar.gz |
配置环境变量,命令
vi /etc/profile |
在文件末尾添加以下内容,
#java environment export JAVA_HOME=/www/server/java/jdk- export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin |
更新配置文件
source /etc/profile |
验证是否成功
java -version |
安装配置Maven
同样将Maven的安装包上传到linux服务器你要安装的位置,解压
tar -zxvf apache-maven--bin.tar.gz |
配置环境变量,命令
vi /etc/profile |
在文件末尾添加以下内容,
#maven environment export MAVEN_HOME=/www/server/maven/apache-maven- export PATH=$PATH:$MAVEN_HOME/bin |
更新配置文件
source /etc/profile |
验证是否成功
mvn -version |
三、 编译Distribution工程
使用IDE打开Distribution工程,如下图所示,
使用maven进行编译,设置maven编译配置如下,
1.编译目标选择工程根目录
2.编译参数是
clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true |
这里详细说明一下-Dmaven.test.skip=true这个配置,这个配置是让工程不要编译运行单元测试test里面的代码,-DskipTests这个配置只是跳过单元测试的运行,但是单元测试的代码还是要编译,ODL工程要是编译单元测试代码会消耗很多时间,所以我们正式打包编译的时候就不要去编译单元测试的代码。
3.maven版本选择自己安装的版本,settings配置选择华为镜像。
4. JDK选择版本
编译成功后,会在karaf -> target 目录下面生成karaf-.tar.gz和karaf-.zip两个压缩包,这两个压缩包就是最终拿到生成环境部署的karaf容器。两个包内容是相同的,只是压缩格式不同,可以自己选择不同格式的压缩包。自己开发的模块最终也是要集成到distribution工程中,编译打包之后也是用这个压缩包部署到生产环境中运行。(是aluminium-sr3的数字化版本,aluminium的版本是从~)
四、 运行Karaf容器
将karaf-.tar.gz复制到Linux服务器的任意目录上,这里放在/opt目录下面,使用命令tar -xf karaf-.tar.gz解压到当前目录下。可以看到解压结果出行karaf-目录。
进入解压后的目录,并进入bin目录,如下图所示。
这里先说明四个重要的运行脚本,其他的目录和文件的作用在第三章会有详细的说明。
karaf脚本:在开启的终端窗口运行karaf容器,执行命令 ./karaf
start脚本:在后台运行karaf容器,执行命令 ./start
stop脚本:关闭在后台运行的karaf容器,与start脚本配置使用,执行命令 ./stop
client脚本:当karaf容器在后台运行时,通过client脚本进入karaf容器的操作界面,执行命令 ./client
执行karaf脚本之后启动karaf容器结果如下图所示(当执行start脚本在后台运行karaf容器的情况下使用client脚本也会进入相同的界面):
由于karaf脚本是在当前终端窗口运行karaf容器,所以当使用ctrl+d快捷键,或者输入system:shutdown或者logout命令之后都能关闭karaf容器。但是如果是client脚本进入的操作界面使用ctrl+d快捷键和logout命令只会退出当前client的操作界面,只有使用system:shutdown命令才能关闭karaf容器。
五、 安装Bundle组件
在karaf的操作界面输入feature:list命令回车后,就能显示出当前karaf容器中带有的Bundle组件,如下图所示:
odl的karaf容器在打包的时候已经将odl官方提供的许多Bundle组件打包到karaf容器中了,本书后续统称这样的karaf容器为ODL容器,在上图中可以看到这些组件的状态都是Uninstalled的,我们需要用命令去安装启动这些Bundle组件,我们先以ODL官方提供的NetConf组件为例。
我们先使用feature:list |grep netconf命令过滤出ODL容器中已经带有的NetConf组件,如下图所示,都是Uninstall状态。
安装NetConf相关Bundle组件:
feature:install odl-netconf-connector-all feature:install odl-netconf-topology feature:install odl-mdsal-apidocs feature:install odl-netconf-callhome-ssh feature:install odl-restconf |
这时候再查看一下NetConf相关的Bundle组件,就可以看到组件的状态已经变成Started了。
访问swagger界面:http://localhost:/apidoc/explorer/index.html
输入账号密码: admin/admin
ODL容器有自带Swagger-UI组件可以让你测试面向北向开放的API接口。
到这里为止,ODL的容器已经成功运行起来了,新手在入门的时候必须要按照正确的方法把ODL容器运行起来。这样你才能确认自己学习的方向是正确的,也才能有信心学习后面的知识,也能证明我不是在忽悠读者骗钱。