SDN開(kāi)發(fā)之Linux Ubuntu系統(tǒng)下OpenDaylight源碼編譯安裝和調(diào)試

操作系統(tǒng):Linux x64 / Ubuntu 14.04

研究領(lǐng)域:軟件定義網(wǎng)絡(luò)SDN (Software-defined Networking)

開(kāi)發(fā)組件:OpenDaylight

本文原文鏈接:https://jiang-hao.com/articles/2018/coding-BuildandInstallOpenDaylightonUbuntu.html

一驮俗、環(huán)境搭建

1. Java+Apache Maven基本開(kāi)發(fā)環(huán)境搭建储玫。詳見(jiàn)相應(yīng)的前面兩篇文檔:

《Linux Ubuntu系統(tǒng)下Java開(kāi)發(fā)環(huán)境搭建》

《Linux Ubuntu系統(tǒng)下Apache Maven的安裝和配置》

2. 安裝用來(lái)獲取OpenDaylight源碼的Git工具具伍。

sudo apt-get install git-core
image.gif

3. 針對(duì)Opendaylight燥狰,安裝好Maven后,需要編輯一個(gè)非常重要的文件 settings.xml捕儒。直接修改該文件芳肌,就能在機(jī)器上全局地定制 Maven的行為。/.m2是默認(rèn)的maven本地倉(cāng)庫(kù)肋层。剛裝好maven的后/.m2下是沒(méi)有settings.xml的文件的亿笤。在/etc/maven下有settings.xml的原型,一般情況下栋猖,我們更偏向于復(fù)制該文件至home目錄下的.m2/目錄下(這里~表示用戶(hù)目錄)净薛,然后修改該文件,在用戶(hù)范圍定制 Maven的行為蒲拉。前者又被叫做全局配置肃拜,后者被稱(chēng)為用戶(hù)配置。如果兩者都存在雌团,它們的內(nèi)容將被合并燃领,并且用戶(hù)范圍的settings.xml優(yōu)先。在這里要在~/目錄下創(chuàng)建.m2文件夾锦援,然后執(zhí)行修改命令(詳見(jiàn)官網(wǎng):https://wiki.opendaylight.org/view/GettingStarted:Development_Environment_Setup):

sudo mkdir .m2
sudo cp -n ~/.m2/settings.xml{,.orig} ; \wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml

[圖片上傳中...(image-37f55f-1555335231823-9)]

完成后輸入“sudo gedit /.m2/settings.xml”查看settings.xml內(nèi)容猛蔽,應(yīng)該顯示如下:

# Shortcut command for grabbing settings.xml
cp -n ~/.m2/settings.xml{,.orig} ; \
wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <profiles>
    <profile>
      <id>opendaylight-release</id>
      <repositories>
        <repository>
          <id>opendaylight-mirror</id>
          <name>opendaylight-mirror</name>
          <url>http://nexus.opendaylight.org/content/repositories/public/</url>
          <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>opendaylight-mirror</id>
          <name>opendaylight-mirror</name>
          <url>http://nexus.opendaylight.org/content/repositories/public/</url>
          <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>

    <profile>
      <id>opendaylight-snapshots</id>
      <repositories>
        <repository>
          <id>opendaylight-snapshot</id>
          <name>opendaylight-snapshot</name>
          <url>http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>opendaylight-snapshot</id>
          <name>opendaylight-snapshot</name>
          <url>http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</url>
          <releases>
            <enabled>false</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>opendaylight-release</activeProfile>
    <activeProfile>opendaylight-snapshots</activeProfile>
  </activeProfiles>
</settings>

[圖片上傳中...(image-eeb9b9-1555335231823-8)]

二、OpenDaylight源碼獲取灵寺、編譯和安裝

1. 新建項(xiàng)目文件夾曼库,獲取OpenDaylight源碼:

sudo mkdir openDayLight
cd openDayLight
sudo git clone https://git.opendaylight.org/gerrit/p/controller.git

[圖片上傳中...(image-17b9a4-1555335231823-7)]

2. 指定編譯ODL的版本(以L(fǎng)ithium鋰版本為例)并查看確認(rèn):

cd controller
sudo git checkout stable/lithium
git branch

[圖片上傳中...(image-24df09-1555335231823-6)]

3. 聯(lián)網(wǎng)編譯Controller(確認(rèn)之前的settings.xml文件已經(jīng)修改好):

mvn clean install

[圖片上傳中...(image-73d2a2-1555335231823-5)]

  • 如果編譯過(guò)程中出現(xiàn)Test編譯錯(cuò)誤,可以加上 -DskipTests 跳過(guò)測(cè)試加快編譯速度略板,其他編譯錯(cuò)誤和嘗試解決方案:

| 目前遇到兩種:
a. 指定目錄不能創(chuàng)建或訪(fǎng)問(wèn):更改文件夾讀寫(xiě)權(quán)限毁枯,進(jìn)入sudo模式重新編譯
b. pom.xml相關(guān)錯(cuò)誤:將~/.m2下的settings.xml復(fù)制到/root/.m2目錄下:sudo cp ~/.m2/settings.xml /root/.m2,重新編譯
編譯成功叮称! |

4. 控制器驗(yàn)證運(yùn)行种玛。

舊版本的目錄結(jié)構(gòu)是“controller/opendaylight/distribution”,在新版本的目錄結(jié)構(gòu)中不再存在“distribution”這個(gè)子文件夾瓤檐,這就是很多朋友參照以前的指南卻找不到distribution子文件夾來(lái)啟動(dòng)控制器的原因赂韵。在這里應(yīng)該cd進(jìn)入“controller/karaf/opendaylight-karaf”文件夾,輸入:

./target/assembly/bin/karaf

[圖片上傳中...(image-c22e69-1555335231823-4)]

這時(shí)將啟動(dòng)控制器進(jìn)入opendaylight-user@root>模式距帅。這個(gè)時(shí)候右锨,Opendaylight的controller項(xiàng)目初步安裝就完成了括堤!

*三碌秸、TEST:Integration項(xiàng)目源碼的編譯安裝

*之前編譯好的Controller項(xiàng)目是沒(méi)有WebGUI(DLUX)等豐富Feature的核心控制器绍移。Integration是一個(gè)框架性的工程,所有自己開(kāi)發(fā)和修改的部分(包括controller讥电、openflowPlugin&Java三個(gè)工程)編譯為包后蹂窖,都可以放在該工程的目錄下一起執(zhí)行。注意恩敌,如果是自己開(kāi)發(fā)的包瞬测,則可以直接放到該目錄下。但是如果是修改的原本工程纠炮,然后編譯的包要替換掉上面目錄中原來(lái)的包月趟,這里有個(gè)問(wèn)題是 integration 的 plugin目錄下的包名和 controller, openflowplugin恢口, openflowjava 中編譯出來(lái)的包命名方式有點(diǎn)小差別孝宗,復(fù)制過(guò)去之前先重命名下,使之和目錄下的原來(lái)包文件名一致耕肩,再?gòu)?fù)制替換因妇。(參考自@jason-zhou童鞋的《OpenDaylight開(kāi)發(fā)學(xué)習(xí)筆記基礎(chǔ)之Controller篇》)。將各個(gè)工程的jar包c(diǎn)opy到integration里后猿诸,運(yùn)用mvn clean install 編譯integration婚被。工程所在目錄:

username@ubuntu:~/developApps/openDayLight/integration/distributions/karaf/target/assembly/system/org/opendaylight$ ls
aaa               integration      neutron         sdninterfaceapp  usc
bgpcep            iotdm            nic             sfc              vpnservice
capwap            l2switch         odlparent       snmp             vtn
<strong><span style="color:#ff0000;">controller</span></strong>        lacp             <strong><span style="color:#ff0000;">openflowjava</span></strong>    sxp              yangtools
coretutorials     lispflowmapping  <span style="color:#ff0000;"><strong>openflowplugin</strong></span>  tcpmd5
didm              mdsal            ovsdb           topoprocessing
dlux              nemo             packetcable     tsdr
groupbasedpolicy  netconf          reservation     ttp

[圖片上傳中...(image-cc7704-1555335231822-3)]

*這里僅給出基本的Integration項(xiàng)目的編譯安裝步驟,Openflowplugin和Openflowjava工程將另文詳述梳虽。

1. 下載并編譯Integration址芯。

回到openDaylight根目錄,輸入如下命令獲取Integration源碼:

git clone https://git.opendaylight.org/gerrit/p/integration.git

[圖片上傳中...(image-d02f4c-1555335231822-2)]

操作完成后可以看到目錄下多出了integration目錄窜觉,進(jìn)入integration目錄是复,指定版本(checkout)為stable/lithium,進(jìn)行編譯:

cd integration
git checkout stable/lithium
mvn clean install -DskipTests        (或者 cd進(jìn)入子目錄/distributions/karaf下執(zhí)行此命令)

[圖片上傳中...(image-5f90ac-1555335231822-1)]

2.編譯完成后竖螃,進(jìn)入integration/distributions/karaf/target/assembly目錄淑廊,運(yùn)行如下命令啟動(dòng)ODL:

bin/karaf

[圖片上傳中...(image-b35342-1555335231822-0)]

此時(shí)進(jìn)入ODL命令行界面,通過(guò)“feature:list -i”命令可以查看已經(jīng)安裝的功能模塊特咆,通過(guò)“feature:install <feature>”命令可以安裝想要的feature季惩。

  • Karaf module會(huì)把控制器的Plugin制作成Karaf Feature,然后打包成可以導(dǎo)入到Apache karaf的kar文件腻格。Karaf基于OSGI的運(yùn)行環(huán)境画拾,做為OSGI應(yīng)用的管理容器提供各種管理utility。

到這里菜职,一個(gè)可供開(kāi)發(fā)和安裝豐富Feature功能模塊的OpenDaylight控制器已經(jīng)基本搭建完成青抛。

本文永久更新地址:https://jiang-hao.com/articles/2018/coding-BuildandInstallOpenDaylightonUbuntu.html

博客地址:https:/jiang-hao.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酬核,隨后出現(xiàn)的幾起案子蜜另,更是在濱河造成了極大的恐慌适室,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件举瑰,死亡現(xiàn)場(chǎng)離奇詭異捣辆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)此迅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)汽畴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人耸序,你說(shuō)我怎么就攤上這事忍些。” “怎么了坎怪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵坐昙,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我芋忿,道長(zhǎng)炸客,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任戈钢,我火速辦了婚禮痹仙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殉了。我一直安慰自己开仰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布薪铜。 她就那樣靜靜地躺著众弓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隔箍。 梳的紋絲不亂的頭發(fā)上谓娃,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蜒滩,去河邊找鬼滨达。 笑死,一個(gè)胖子當(dāng)著我的面吹牛俯艰,可吹牛的內(nèi)容都是我干的捡遍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竹握,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼画株!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谓传,失蹤者是張志新(化名)和其女友劉穎蜈项,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體良拼,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年充边,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庸推。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浇冰,死狀恐怖贬媒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肘习,我是刑警寧澤际乘,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站漂佩,受9級(jí)特大地震影響脖含,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜投蝉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一养葵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘩缆,春花似錦关拒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至熟尉,卻和暖如春归露,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斤儿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工靶擦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雇毫。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓玄捕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棚放。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枚粘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容