前言
話說最近需要開發一個 SDN 環境下的應用,打算趁這個機會學習 ONOS,在開始了良久之後,悟透了一個道理,就是 RYU 真的很方便,嗯。
要怎樣開始?
第一步當然是要把 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
及 單元測試一下
$ buck test
若 build 及 unit test 都沒有問題,那麼恭喜你,可以開始進行下一步了!
如何在本地開啟 ONOS?
首先呢,我們在onos的 Directory 中執行
$ buck run onos-local -- clean debug
以開啟 ONOS server,然後可以在另一個 Terminal 中開啟 ONOS 的 console:
$ onos localhost
成功後會看到如下圖所示:
ONOS 預設使用 8101 埠 作為其 console
再一次恭喜你,成功把 ONOS 開在本機上啦~
UI 介面
而當然 ONOS 也有提供 UI 介面,ONOS 的 UI 預設所使用的是 Port 8181,我們可以透過 http://localhost:8181/onos/ui 連接 ONOS 的 UI 介面。
預設的用戶名稱:onos
預設的用戶密碼:rocks
而進去後應該會看到以下介面
什麼? No Devices Are Connected? 那我們就來 Create some devices 吧!
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 裡面!
我們直接執行
mininet> pingall
再回到 ONOS UI
沒錯,這樣就對了!
如何新增屬於自己的應用?
ONOS 中的應用是通過 maven 來進行建置的,所以理所當然地我們要用 maven 來建置我們的第一支應用!
我們首先利用 onos 提供給我們的工具
$ onos-buck-publish-local
把 maven 需要用到的 artifacts 都 push 到 ~/.m2中。
然後找一個 onos 外的路徑,開始進行建置:
mvn archetype:generate -DarchetypeGroupId=org.onosproject -DarchetypeArtifactId=onos-bundle-archetype
或直接使用 onos 已經幫我們包好了的工具:
$ onos-create-app
注意:必須把
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 應用了!
如何把自己寫的應用安裝到 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/ 中執行
$ mvn compile
然後建立 .OAR
檔以作待安裝
$ mvn install
然後, 我們可以看到 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 執行
onos> apps -s
可以看到 oneping
已經被我們加到 ONOS 裡面了!可是這樣還未正式可以被使用,我們還必須要將其 activate
onos> app activate org.onosproject.oneping
同理,若想將其 deactivate
onos> app deactivate org.onosproject.oneping
完成!
ONOS 應用的安裝檔是使用 OAR 作為其格式