0x00 前言
话说最近需要开发一个 SDN 环境下的应用,打算趁这个机会学习 ONOS,在开始了良久之后,悟透了一个道理,就是 RYU 真的很方便,嗯。
0x01 要怎样开始?
第一步当然是要把 ONOS 的 Source Code 抓下来啰~
$ git clone https://gerrit.onosproject.org/onos
然后把 onos 中备有的 script 加入自己的 .bashrc
或 .bash_profile
中
$ export ONOS_ROOT=~/onos
$ source $ONOS_ROOT/tools/dev/bash_profile
然后就可以使用更多 ONOS 预先帮你写好的 alias 啦。
接着就可以 build ONOS
$ buck build onos --show-output
及 单元测试一下
若 build 及 unit test 都没有问题,那么恭喜你,可以开始进行下一步了!
0x02 如何在本地开启 ONOS?
注:此文写于 2017 年 9 月,新版本的 onos 的构建工具从 buck 换成了 bazel
首先呢,我们在onos的 Directory 中执行
$ buck run onos-local -- clean debug
以开启 ONOS server,然后可以在另一个 Terminal 中开启 ONOS 的 console:
成功后会看到如下图所示:
ONOS 预设使用
8101 埠 作为其 console
再一次恭喜你,成功把 ONOS 开在本机上啦~
0x03 UI 介面
而当然 ONOS 也有提供 UI 介面,ONOS 的 UI 预设所使用的是 Port 8181,我们可以透过 http://localhost:8181/onos/ui 连接 ONOS 的 UI 介面。
预设的用户名称:onos
预设的用户密码:rocks
而进去后应该会看到以下介面
什么? No Devices Are Connected? 那我们就来 Create some devices 吧!
0x04 Mininet
我们利用 Mininet 来建立一个简单的 SDN Network:
$ sudo mn --topo tree,2,3 --mac --switch ovsk --controller=remote,ip=<controllor ip>
这样我们就能拥有一个有 4 个 Open vSwitch 以及 9 个 Host 的 Network 了!
这样可以建立一个 tree,2,3 的 network topology,详细可以看 Mininet 的官方说明文件。
让我们木再回到 ONOS 的 UI 介面看看
看到 Controller 认出来的 4 台 Open vSwitch 了,可是 Host 呢?为什么点 h 都没有反应的?
cccc点 h 可以显示/隐藏 Host
没错,Open vSwitch 们还未知道 Hosts 们的存在,我们必须要让他们先 Ping 一次 Controller 才会把 flow install 到 switch 里面!
我们直接执行
再回到 ONOS UI
没错,这样就对了!
0x05 如何新增属于自己的应用?
ONOS 中的应用是通过 maven 来进行建置的,所以理所当然地我们要用 maven 来建置我们的第一支应用!
我们首先利用 onos 提供给我们的工具
$ onos-buck-publish-local
把 maven 需要用到的 artifacts 都 push 到 ~/.m2中。
然后找一个 onos 外的路径,开始进行建置:
mvn archetype:generate -DarchetypeGroupId=org.onosproject -DarchetypeArtifactId=onos-bundle-archetype
或直接使用 onos 已经帮我们包好了的工具:
注意:必须把
pom.xml
中的
onos.app.name
及
onos.app.origin
uncommemnt 掉,不然不会产生
.oar
档!
以上都是一些建立 maven 时可加入的定义参数,若想了解更多,详见此处。
直到看到这个上面这个画面,就大功告成啦!
整个资料夹的架构:
your-app/
├── pom.xml
└── src
├── main
│ └── java
│ └── org
│ └── lam
│ └── AppComponent.java
└── test
└── java
└── org
└── lam
└── AppComponentTest.java
有了一个最简单的 maven 架构,以后就可以根据要求开始编写自己的 ONOS 应用了!
0x06 如何把自己写的应用安装到 ONOS 中?
当我们真的写好一个 ONOS 应用后,到底要如何把他安装到我们的 ONOS 中使用呢?
让我们拿 onos-app-samples
中的 oneping
作为例子,首先我们需要把 onos-app-samples
复制到本机中
$ git clone git@github.com:opennetworkinglab/onos-app-samples.git
onos-app-samples
是 ONOS 属下的一连串 sample app 的一个专案,建议新加入 ONOS 的可以先由
onos-app-samples
中的应用开始学起。
我们先在 onos-app-samples/oneping/ 中执行
然后建立 .OAR
档以作待安装
然后, 我们可以看到onos-app-oneping-1.9.0-SNAPSHOT
已经被建立在oneping/target/ 中,下一步,我们终于可以把该.OAR
档安装到ONOS 里去了!
$ onos-app localhost install target/onos-app-oneping-1.9.0-SNAPSHOT.oar
完成上面的步骤后,进入 ONOS console 执行
可以看到 oneping
已经被我们加到 ONOS 里面了!可是这样还未正式可以被使用,我们还必须要将其 activate
onos> app activate org.onosproject.oneping
同理,若想将其 deactivate
onos> app deactivate org.onosproject.oneping
完成!
ONOS 应用的安装档是使用
OAR 作为其格式
本文首發於 laochanlam 个人博客,转载请注明出处。
个人主页 - laochanlamblog.laochanlam.com