首页 > 编程语言 >SDN控制器-ONOS源码编译与mininet快速入门

SDN控制器-ONOS源码编译与mininet快速入门

时间:2022-11-27 13:35:41浏览次数:76  
标签:mininet ONOS bazel 编译 源码 install 安装 onos


SDN控制器-ONOS源码编译与mininet

  • ​​所需环境​​
  • ​​系统要求​​
  • ​​onos编译软件环境安装​​
  • ​​依赖软件安装​​
  • ​​Bazel/Bazelisk安装​​
  • ​​jdk11安装(可选)​​
  • ​​克隆代码​​
  • ​​进行编译​​
  • ​​运行测试​​
  • ​​mininet模拟交换机和主机​​

SDN控制器-ONOS源码编译与mininet快速入门_bazel

ONOS作为开源SDN控制器中的一个重要项目,很有必要学习一下

在学习时,为了后续编码的需要,这里先体验下源码编译

其过程也比较简单,直接在官方wiki中找到对应的文档即可。

其官方链接为:
​​​https://wiki.onosproject.org/display/ONOS/Developer+Quick+Start​

如果在编译过程中一直卡住的话,需要检查下网络是否能联通。

SDN控制器-ONOS源码编译与mininet快速入门_onos源码编译_02

所需环境

系统要求

  • 系统:linux或者mac(本文中采用的是ubuntu18.04版本,在虚拟机的)

onos编译软件环境安装

onos编译的软件环境根据官方的来就行。
官方地址为:
​​​https://wiki.onosproject.org/display/ONOS/Installing+required+tools​

其中要注意的一点是:onos的开发和部署的操作系统仅支持linux和mac os的X86_64位操作系统。

ONOS development and deployment is only supported on Linux and Mac OS Operating systems for x86_64 architectures.

为了少走弯路,系统的选择上也建议根据官方的来。当然愿意折腾下其他的系统的话也可以尝试一下。

我这里选择的是稍微成熟一点的ubuntu18.04系统。之所以选择它也是因为之前在装open stack时,最新版本的ubuntu22.04中对很多包的更新支持度还没有赶上,报一些奇奇怪怪的错走了很多弯路,所以为了确保软件包的稳定性,选个老一点的稳定版系统稳定应该不大。


另外还有一点很重要,编译ONOS时不要以root用户进行操作,否则编译过程中可能会报错


所需要的软件安装根据官方的说明一步步安装就行了,也可参考下面的操作。

依赖软件安装

先安装python2和python3这些软件:

sudo apt install python
sudo apt install python3
sudo apt install python-pip python-dev python-setuptools
sudo apt install python3-pip python3-dev python3-setuptools

pip3 install --upgrade pip
pip3 install selenium

再安装git以克隆代码:

sudo apt-get install git
sudo apt-get install git-review

Bazel/Bazelisk安装

由于当前版本的ONOS是用Bazel进行打包的,还需要安装Bazel。

官方推荐的是不直接安装Bazel,安装它的管理软件Bazelisk即可,这样可以省去很多麻烦。

wget https://github.com/bazelbuild/bazelisk/releases/download/v1.4.0/bazelisk-linux-amd64
chmod +x bazelisk-linux-amd64
sudo mv bazelisk-linux-amd64 /usr/local/bin/bazel
cd ~/onos
bazel version

但如果在某些时候遇到Bazelisk找不到Bazel对应版本的情况下,就可能手动安装一下Bazel了。

具体需要安装哪个版本的bazel,可通过ONOS源码下的 .bazelversion 文件查看。

手动安装时,直接从官网中下载对应的安装文件即可。

bazel的所有版本,可在bazel的github中找到。其github地址为:
​​​https://github.com/bazelbuild/bazel/releases​

以安装bazel-6.0.0-pre.20220421.3这个版本的为例。

SDN控制器-ONOS源码编译与mininet快速入门_mininet_03

从官网下载好安装包后,执行对应的安装命令即可。

./bazel-6.0.0-pre.20220421.3-installer-linux-x86_64.sh --user

其他可选配置,可参照官网说明。
​​​https://bazel.build/install/ubuntu​

jdk11安装(可选)

需要注意的是,在编译时对于jdk的安装不是必须的。但如果在运行onos的话,就必须要将jdk装上了。以onos-2.7.0版本为例,所需要安装的jdk版本需要为jdk11

sudo apt-get install openjdk-11-jdk

再配置环境变量

sudo vim /etc/profile

在profile文件末尾添加下面的内容

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

之后验证一下java是否安装正确

java -version

SDN控制器-ONOS源码编译与mininet快速入门_onos源码编译_04

克隆代码

当软件安装好了后,就可以克隆出onos的代码了。
onos的代码主要有两个来源:

其主要区别在ReadMe中有也说明:

SDN控制器-ONOS源码编译与mininet快速入门_bazel_05

github中的onos源码仅作为一个mirror,所以建议直接使用onos官方版本的源码进行clone,以确保代码最新。

git clone https://gerrit.onosproject.org/onos

克隆后再切换到想要编译的分支。

以本文为例,想要编译的分支为当前最新稳定版本的tag为2.7.0。

SDN控制器-ONOS源码编译与mininet快速入门_ONOS_06

所以将代码checkout到2.7.0分支即可。

git checkout 2.7.0

进行编译

所需的编译软件和源码都有了之后,就可以进行编译了。

切换到onos的源码根目录,再执行bazel version命令将对应的bazel下载下来。

cd ~/onos
bazel version

再执行编译命令

bazel build onos

或者使用如下命令进行编译

bazel build onos --action_env=HTTP_PROXY=$HTTP_PROXY

但需要提前配置如下信息:

export https_proxy=http://ip:port;
export http_proxy=http://ip:port;
export all_proxy=socks5://ip:port

配置好后可以用如下命令进行验证:

curl cip.cc

如果在编译过程中报了一些错,可根据提示进行信息尝试一些搜索看看有没有解决方案。如果网上没有找到对应的解决方案,需要了解一下bazel的相关知识,并结合编译的代码一起排查。

如我之前编译时一直卡在web/gui处,通过查看了对应的BUILD脚本,才知道原来是我少加了代理信息导致的。

SDN控制器-ONOS源码编译与mininet快速入门_ONOS_07

如果一切顺利,执行编译命令后等个一小会儿,就会提示编译成功了

SDN控制器-ONOS源码编译与mininet快速入门_ONOS_08

如上图所示,编译成功后,会在onos的根目录下生成bazel-bin目录,所编译好的onos文件为onos.tar.gz文件

运行测试

当编译成功后,再来测试一下所编译出来的onos,看下能否运行成功。

将编译好的onos拷贝到某个目录,并进行解压。

这里以root用户运行onos为例,验证一下:

su换到root下去运行

su #切换到root用户
mv onos/bazel-bin/onos.tar.gz /root/
cd /root/
tar -zxvf onos.tar.gz
mkdir onos
cp -r onos-2.7.0/* onos/
cd onos
bin/onos-service start

显示启动成功,访问对应的web界面

​​http://ip:8181/onos/ui​

SDN控制器-ONOS源码编译与mininet快速入门_sdn_09

输入默认的用户名和密码:onos/rocks

SDN控制器-ONOS源码编译与mininet快速入门_sdn_10

当看到上面的界面时,就证明ONOS的打包+启动成功了。

mininet模拟交换机和主机

启动成功后再用mininet模拟点设备数据上来,让onos动起来。

此部分也可直接参考官方的文档:
​​​https://wiki.onosproject.org/display/ONOS/onos.py+Prerequisites​

先安装mininet和网桥:

sudo apt-get install mininet bridge-utils

安装好后,运行mininet和onos下的测试脚本

cd到onos的源码目录

cd ~/onos/tools/dev/mininet

同时由于脚本原因,还需要将onos.tar.gz拷贝到指定的目录中去。我这里的是root用户运行的,所以拷贝到 /root/onos/bazel-out/k8-fastbuild/bin目录下去。

mkdir -p /root/onos/bazel-out/k8-fastbuild/bin/
cp /root/onos.tar.gz /root/onos/bazel-out/k8-fastbuild/bin/onos.tar.gz

执行mininet进行测试。

sudo mn --custom onos.py --controller onos,1 --topo tree,2,2

SDN控制器-ONOS源码编译与mininet快速入门_mininet_11

再在mininet中让主机ping一下:pingall

mininet-onos> pingall
*** Ping: testing ping reachability
h1 -> h2 h3 h4
h2 -> h1 h3 h4
h3 -> h1 h2 h4
h4 -> h1 h2 h3
*** Results: 0% dropped (12/12 received)

全部都收到了。

最后,再看下onos界面中对于上面mininet所模拟设备对应的拓扑图:

SDN控制器-ONOS源码编译与mininet快速入门_sdn_12


能看到交换机和主机,及对应的连接关系。

大功告成!


标签:mininet,ONOS,bazel,编译,源码,install,安装,onos
From: https://blog.51cto.com/u_2837193/5890021

相关文章

  • SpringBoot源码-00-环境
    一源码附上带注释的源码分支my-study-3.0.1二编译环境版本Spring-Boot3.0.1OSmacOS11.5.2Java17.0.1Gradle7.4.2IDEA2022.2.1三文件......
  • 读 RocketMQ 源码,学习并发编程三大神器
    笔者是RocketMQ的忠实粉丝,在阅读源码的过程中,学习到了很多编程技巧。这篇文章,笔者结合RocketMQ源码,分享并发编程三大神器的相关知识点。1CountDownLatch实现网络......
  • Spring源码-00-环境
    一源码附上带注释的源码分支my-study-6.0.3二编译环境版本Spring6.0.3-SNAPSHOTOSmacOS11.5.2Java17.0.1Gradle7.4.2IDEA2022.2.1三......
  • mybatis源码环境搭建
    MyTest.java@Testpublicvoidtest(){Stringresource="mybatis-config.xml";InputStreaminputStream=null;try{inputStream=Resour......
  • LevelDB源码剖析(1) Arena内存管理
    1.背景对于数据库来说,内存的分配非常重要,当我们使用C++默认的内存分配方式malloc/free或者new/delete的时候,如果遇到很小的键值对时,每次调用的平均开销就会比较大,同时会......
  • LevelDB源码剖析(2) 编码与字符串
    1.背景编码指的是内存里的整数和字符串放到磁盘上的方式,其主要目的有两个对不定长整数以及字符串能够在读取的时候感知到已经读取完了整个值最大程度的节省在磁盘上占......
  • easylogging++的那些事(四)源码分析(二)日志记录宏(一)CLOG宏(五)其他相关类
    目录el::base::Writer类el::base::NullWriter类el::LogMessage类el::Logger类isValidId接口flush接口initUnflushedCount接口el::base::MessageBuilder类成员变量成员函数......
  • springboot事务源码分析
    1、本次使用springboot框架分析事务源码2、打开spring-boot-autoconfigure查看spring.factories发现关于事务的自动配置包含:DataSourceTransactionManagerAutoConfigurati......
  • k8s源码分析6-kubectl功能和对象总结
    kubectl的职责主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等)然后其会把用户提交的这些东西组织成一个数据结构体然后把其发送给APIServerkubectl的代......
  • 实验三·bdev原理和源码分析
    任务配置bdev运行环境运行hello_bdev程序并分析源码通过bdev接口写入数据并读取Bdev是在物理设备上的进一步抽象,物理层有NVM、NVMeOF、CEPHRBD等,通过bdev向......