ONOS 從零入門教學 (應用程式新增,安裝及測試)

ONOS 從零入門教學 (應用程式新增,安裝及測試)

Posted by laochanlam on September 16, 2017

前言

話說最近需要開發一個 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.nameonos.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 作為其格式