Mininet+OVS+ONOS搭建SDN仿真环境

最近又开始了疯狂的学习模式,为了方便学习、开发、测试,有一套SDN仿真环境,就显得很重要了。如果是控制面的开发,不涉及性能问题,完全可以先在Mininet的环境下,写几个Deamon。本文,就记录下,使用Ubuntu如何搭建一套Mininet+OVS+ONOS的SDN仿真环境,注意,以下的操作都在普通用户权限下进行

Ubunut

我这里选用的Ubuntu是ubuntu-18.04.2LTS(Bionic Beaver)版,下载链接如下:
http://120.198.248.41/cache/releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso?ich_args2=30-05202509001074_56bfc1eb28abf9721328755ab0a40e58_10001002_9c89612dd0cbf9d69539518939a83798_99a52f5e2482f7b0f5af737b3e5b3518

注意:
1、使用VM安装时,最好不要是简易安装系统(不过,不简易安装,好像也没多装啥工具,都需要后面apt安装)
2、安装完后记得更新下apt源,可在清华开源镜像站下(https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/),找到此ubuntu版本适合的源

安装Mininet

Mininet是一款网络仿真软件,具体安装步骤如下(这个版本,带的是2.9.2的OVS)

git clone git://github.com/mininet/mininet #先clone下来  
git checkout 1969669f510a7443f58b27b1640884b06b6867d4 #转到2.3.0d4这个版本分支上  
cd ./mininet/util  
./install.sh -a #安装全部组件  
mn --version #安装完成后,使用该命令,即可查看到其版本为2.3.0d4  

解决JAVA依赖

ONOS的安装,主要也是按照它wiki上所说的做(最新版的onos是要求使用bazel编译器了,所以,网上有些过时的安装教程就不可参考了)
按wiki上说的,我们先安装下java依赖

sudo apt-get install software-properties-common -y && \
sudo add-apt-repository ppa:webupd8team/java -y && \
sudo apt-get update && \
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections && \
sudo apt-get install oracle-java8-installer oracle-java8-set-default -y    

安装bazel

之后还需要装下bazel编译器。注意,wiki上说支持onos的最后一版bazel编译器版本是0.19.2(我这里用最新的0.23.1)。在https://github.com/bazelbuild/bazel/releases上找到bazel-0.23.1-installer-linux-x86_64.sh并下载,之后在执行(如果要跟换版本,也只需要下载相应版本的sh文件,再--user执行,并设置好环境变量即可):

./bazel-0.23.1-installer-linux-x86_64.sh --user    

#设置环境变量
export PATH="$PATH:$HOME/bin"     

安装Karaf

进入karaf的官网,下载apache-karaf-4.2.3该版本的源码(非二进制代码)

cd /root
mkdir Applications
#再将源码解压至Applications目录下

编译ONOS

之后,就可以使用bazel编译ONOS了
下载ONOS源码,并编译

git clone https://gerrit.onosproject.org/onos 
sudo chmod -R 777 onos #开放此文件夹的权限
cd onos
git checkout -b 2.0.0 #使用目前最新的onos发布版本     

#配置下环境变量
export ONOS_ROOT=/home/lz/Desktop/ONOS/onos #保证能定位到onos文件夹即可
source $ONOS_ROOT/tools/dev/bash_profile    

#编译onos
bazel build onos    

测试ONOS

之后,再测试下onos,看下是否成功编译了

#成功启动后,可以通过http://localhost:8181/onos/ui进行访问
#onos/rocks是默认的用户名和密码      
bazel run onos-local -- clean debug  

测试Mininet+ONOS

1、首先,在ONOS的web界面中,开启openflow(openflow协议)和fwd(转发功能)应用(默认是开启的)
2、之后,执行类似如下的命令sudo mn –custom ./custom/topo-2sw-2host.py –topo mytopo –controller remote,ip=127.0.0.1,port=6653
3、之后在ONOS的web界面,或后台LOG中,都能看到在mininet中创建的设备了

配置环境变量

最后说下启动ONOS时,环境变量的配置,在~/.bashrc中加入如下命令

#配置bazel环境变量
export PATH="$PATH:$HOME/bin"  

#配置ONOS环境变量
export ONOS_ROOT=/home/lz/Desktop/ONOS/onos
source /home/lz/Desktop/ONOS/onos/tools/dev/bash_profile