作者简介:周正强,北京邮电大学未来网络实验室在读研究生,目前还在网络初级阶段捣鼓,希望能够与大家一起交流学习。
引言
ONOS诞生也有好几年了,更新了无数个版本,onos1.3版本及以下的安装教程sdnlab上挺多的,但是在onos采用buck以后的内容相关资料很少,以下是根据官网和google论坛查阅得来,还望大家指点。
何为BUCK
首先让我们了解一下BUCK是什么:
- BUCK是一个由facebook开发使用的编译系统
- 它是为了鼓励更细粒度的可复用的代码和资源的模块构建
- 在多平台上支持多种语言
BUCK优点
- 加速build
- 为build增加了重现性
- 可以获取到正确的增量版本
- 了解相关依赖
- 与IDE集成
BUCK中常用的命令
- 构建命令:
1buck build - 执行命令(执行一个可执行的target):
1buck run - 生成project(可导入idea):
1buck projectONOS
onos使用buck安装方法
从onos1.7开始改版使用BUCK机制,比起之前的Maven安装更加高效也更加方便。具体的安装方法如下(在官网中也有说明):
- 首先准备工具环境:
123sudo apt-get install git -ysudo apt-get install curl -ysudo apt-get install zip -y
- 下载安装jdk:
12345sudo apt-get install software-properties-common -y -y && \sudo add-apt-repository ppa:webupd8team/java -y && \sudo apt-get update && \echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections && \sudo apt-get install oracle-java8-installer oracle-java8-set-default -y
- 下载编译ONOS(onos1.7或者onos1.8虽然也可以使用buck编译,但是之后开发时会有问题,之后再说明),使用show-ouput参数会在编译构建之后打印出生成的onos.tar.gz的生成路径:
123git clone https://gerrit.onosproject.org/onos(可指定版本号)cd onostool/build/onos-buck build onos --show-ouput
- 添加环境变量(每次开启终端都需要添加),把该变量写入~/.profile或者/etc/profile中:
12export ONOS_ROOT=~/onossource $ONOS_ROOT/tools/dev/bash_profile
- 执行代码测试命令如下(可以检查checkstyle,以防报错):
12cd onostools/build/onos-buck test
- 生成project,使得可导入idea:
1tools/build/onos-buck project
- 开启ONOS(需要有环境变量):
1tools/build/onos-buck run onos-local -- clean debug
或者:
1onos-buck run onos-local这样就会在后台开启ONOS了如下图中所示:
- 进入到经典的KARAF终端界面(另开一个终端执行如下命令):
1tools/test/bin/onos localhost
或者:
1onos localhost将会显示经典的界面,如下图中所示:
- 此时就可以像之前的ONOS那样,执行命令查看app或者激活app了:
1234apps -a -s(-a是active的缩写,-s是short的缩写)app activate ****(*代表你要激活的app)app deactivate ****(与上条命令作用相反)feature:list | grep ****(可以查找安装的某个app)
- 上述内容都是官网有的,因此结合上面的内容写了一个onos安装脚本(安装了几次都没什么问题,采用的ubuntu16.04),脚本链接如下:
1https://github.com/zhouwaiqiang/onos/blob/master/onos_install.sh
我把几个模块封装成了几个函数封装,因为一开始防止安装过程中出错,具体模块如下:
1234567install_backupinstall_mkinstall_javadownload_onosconfigure_settingset_envinstall_onos
- install_backup是安装一些基本软件,不过需要注意先把apt源设置成,使用apt-get update是否能正常执行,这一步很容易有问题,关于ubuntu的源列表可从下述网址中查找:
1http://wiki.ubuntu.org.cn/源列表
- install_mk是一开始采用老版方式maven安装使用的,之后保留了,但是由于之后开发如果采用之前的mvn构建也需要使用mvn,所以可以直接用这个函数安装即可
- install_java是安装jdk
- download_onos是为了下载onos
- configure_setting是为了配置环境变量
- set_env是onos1.7以下在feature中追加onos用的,buck构建中不需要
- install_onos就是编译构建onos
onos开发使用:
- 将artificates导入~/.m2文件夹中,采用onos中的脚本,执行以下命令即可(需要source环境变量)
12cd onosonos-buck-publish-local
- 然后采用maven构建:
12cd $ONOS_ROOT/tools/package/archetypesmvn clean install
- 之后就可以使用onos脚本创建新的项目了:
1onos-create-app
显示如下:
- 然后将该项目文件夹下pom.xml中的<!—comment这个注释去掉,使得编译可生成oar文件:
显示如下:
- 再执行mvn编译成功即可:
1mvn clean install
- 然后采用onos-app脚本将编译生成的oar文件安装到onos中:
1onos-app localhost install target/***.oar
FAQ
在这个过程中有几个地方可能会报错,有的错误还没找到解决办法,一起学习吧,问题如下:
- 没有know_hosts文件,显示如下图:
解决办法:
使用终端ssh到别的终端,或者ssh自己的ip就会自动生成know_hosts文件,如果不是第一次ssh应该就不会报错
2、onos1.7或者1.8将artificates push到.m2中时报错sed ** no such file(当时没截图): \
这个问题找了好久都没找到解决方案,网上也没用相关的内容都把google翻遍了,后来去查看源码的安装脚本,发现onos-1.7和onos-1.8中的该脚本和onos1.9及以上的内容完成不一样,瞬间明白了,可能是当时处于版本交替所以这两个版本做的不完善,所以解决办法就是buck安装最好不要使用这两个版本的onos。
参考链接
https://wiki.onosproject.org/display/ONOS/Template+Application+Tutorial
https://wiki.onosproject.org/display/ONOS/Developer+Quick+Start