操作系統(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
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