/*******************************************************/
补充:2020年5月11日 13点07分
近期有同学私信我安装过程中有这个报错,如下图
根据报错信息,似乎是下载这个包服务器501出错,很可能是因为内网无法下载这个包
我忘记说了,我当时是可以访问外网的,所以遇到这个问题我的建议是:
1.确保自己的虚拟机(不是宿主机)能够访问外网
2.如果仍无法解决,建议百度/google 报错信息,大部分都是可以解决的。
/*********************************************************/
补充:2020年3月7日13:16:03
不少人私信说下载出错等问题,我把虚拟机文件上传到我百度云了,需要的同学自己下吧,如果链接或者下载有问题可以私信我或者给我发邮件,gyphust@qq.com
链接:https://pan.baidu.com/s/1nP0CSNSsbaN4Pr6iXRVDCQ
提取码:bq0o
/************************************************************************************/
1.下载虚拟机镜像文件
官方教程:https://github.com/opennetworkinglab/onos/tree/master/apps/p4-tutorial
备注:官方教材是建议采用virtual box,但是在导入虚拟机过程中,一直报错,很久都未能解决问题,因此采用VMware进行虚拟机导入。
下载官方onos镜像,如下图所示:
onos镜像:https://www.virtualbox.org/wiki/Downloads
username:sdn
password:rocks
安装好VMware Workstation
自定义安装的位置,然后点击“导入”
在按照教程打开ONOS并运行的过程中,遇到了两种情况,一种是顺利的时候直接就打开了,不顺利的时候会报错说找不到 ok,恰好我两种情况都遇到了,这里分两种情况记录。
理论上来说,这个环境是官方配置好的,应该是不用配置的。
不过在这折腾了很久,最后发现真的很有意思。
建议大家看顺利情况下的配置过程。
2 顺利情况下
进入系统,打开终端,输入命令:
sudo chown -R sdn:sdn .mozilla
sudo chown -R sdn:sdn .cache
输入上面两条命令之后,界面上的Firefox浏览器可以正常访问。
开启终端,直接运行命令
cd onos
ONOS_APPS=proxyarp,hostprovider,lldpprovider ok clean
耐心等待,构建结束,第一次构建比较慢,我当时构建了半个多小时。
构建结束后,会进入运行阶段。之后的流程可以直接开始运行测试了。
3 不顺利情况下,配置onos环境,安装依赖
因为直接运行onos的命令“ok clean”无法识别,经查阅资料,发现需要配置onos的环境,接下来的操作主要参考这篇博客教程。
参考网站:https://www.sdnlab.com/15092.html
3.1需要安装Karaf
apache-Karaf的版本至少为3.0,笔者安装版本3.0.9。操作如下
安装apache-karaf
mkdir ~/Applications
cd ~/Applications
wget http://apache.fayea.com/karaf/3.0.9/apache-karaf-3.0.9.tar.gz
tar -xzf apache-karaf-3.0.9.tar.gz
CSDN下载地址:https://download.csdn.net/download/qq_34039018/11079908
3.2 安装apache-maven
apache-maven的版本至少为3.0,笔者安装版本3.2.2。操作如下
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.2-bin.tar.gz
tar -xzf apache-maven-3.2.2-bin.tar.gz
mv apache-maven-3.2.2 /usr/local/apache-maven
CSDN下载地址:https://download.csdn.net/download/qq_34039018/11079913
设置apache-maven的环境变量,编辑/etc/profile,添加如下几行命令
export M2_HOME=/usr/local/apache-maven
export PATH=$PATH:$M2_HOME/bin
然后执行
source /etc/profile
3.3 安装java(如果已经安装可以跳过)
安装java8有多种方法,笔者就按照官网提供的方法操作。
sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
sudo apt-get install oracle-java8-installer oracle-java8-set-default -y
执行下面的操作后,设置JAVA_HOME。编辑/etc/profile文件,添加下面一行。
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
然后执行
source /etc/profile
正确安装后,java -version和mvn --version打印的java版本应该一致。
3.4 环境变量配置
配置环境变量:
需要注意,ONOS_ROOT可以写成 ONOS_ROOT=~/onos 或者 ONOS_ROOT=/home/sdn/onos中,sdn是当前系统的用户名,需要改为自己的,比如本机系统的用户名为sdn
export ONOS_ROOT=~/onos
export KARAF_ROOT=~/Applications/apache-karaf-3.0.9
export M2_HOME=/usr/local/apache-maven
export PATH=$PATH:$M2_HOME/bin
然后执行:
source /etc/profile
source $ONOS_ROOT/tools/dev/bash_profile
4 打开并构建ONOS
4.1 新开一个终端1
进入onos的目录,开启一个终端1,开启ONOS服务,运行下面的命令:
cd onos
ONOS_APPS=proxyarp,hostprovider,lldpprovider ok clean
4.2 新开一个终端2
i.打开ONOS命令行,执行以下命令,访问ONOS CLI:
cd onos
onos localhost
ii.输入以下命令以激活BMv2驱动程序:
onos> app activate org.onosproject.drivers.bmv2
在ONOS日志上看到以下消息,具体内容可能与版本相关,大概意思是org.onosproject.drivers.bm2已经激活开启,同时终端1也会有相应的日志输出。
终端1:Application org.onosproject.drivers.bmv2 has been activated
终端2:Activated org.onosproject.drivers.bmv2
iii.输入以下命令以激活pipeconf:
onos> app activate org.onosproject.p4tutorial.pipeconf
终端1输出多行内容,
New pipeconf registered:p4-tutorial-pipeconf
Application org.onosproject.p4tutorial.pipeconf has been actived
终端2:Activated org.onosproject.p4tutorial.pipeconf
iv.要验证是否已激活所有必需的应用程序,请运行以下命令:
onos> apps -a -s
org.onosproject.generaldeviceprovider ... General Device Provider
org.onosproject.drivers ... Default Drivers
org.onosproject.proxyarp ... Proxy ARP/NDP
org.onosproject.lldpprovider ... LLDP Link Provider
org.onosproject.protocols.grpc ... gRPC Protocol Subsystem
org.onosproject.protocols.p4runtime ... P4Runtime Protocol Subsystem
org.onosproject.p4runtime ... P4Runtime Provider
org.onosproject.drivers.p4runtime ... P4Runtime Drivers
org.onosproject.hostprovider ... Host Location Provider
org.onosproject.drivers.bmv2 ... BMv2 Drivers
org.onosproject.p4tutorial.pipeconf ... P4 Tutorial Pipeconf
\
v.可选操作
更改流规则轮询间隔。在ONOS CLI中运行以下命令:
onos> cfg set org.onosproject.net.flow.impl.FlowRuleManager fallbackFlowPollFrequency 5
此命令告诉ONOS每5秒检查一次交换机上的流规则状态(默认值为30)。这用于获取更频繁的流规则统计信息,例如字节/数据包计数器。它还有助于更快地解决在ONOS存储中安装某些流规则但在设备上没有安装的问题(在同一VM中模拟大量设备时通常会发生这种情况)。
4.3 新开一个终端3
在终端窗口3上,运行Mininet以设置BMv2设备的拓扑
i.要运行Mininet,请使用以下命令:
sudo -E mn --custom $BMV2_MN_PY --switch onosbmv2,pipeconf=p4-tutorial-pipeconf --controller remote,ip=127.0.0.1
该--custom
参数告诉Mininet使用bmv2.py
自定义脚本来执行BMv2交换机。环境变量$BMV2_MN_PY
指向脚本的确切位置(您可以使用该命令 echo $BMV2_MN_PY
查找位置)。
该--switch
参数指定我们要内部Mininet运行类型的交换机实例。在这种情况下,我们运行的是BMv2版本,它还会生成一些ONOS用来发现设备的配置文件(请参阅下面的步骤),因此命名onosbmv2
。该pipeconf
子参数是用来告诉ONOS这pipeconf在所有设备上部署。
所述--controller
参数指定所述控制器,ONOS在这种情况下,这是我们正在执行的Mininet同一机器上运行的地址。
ii.作为此启动过程的一部分,在/tmp
文件夹中生成一组文件,以便查看它们(在单独的终端窗口上):
ls /tmp/bmv2-*
检查ONOS中每个应用程序插入的流规则。在ONOS CLI类型中:
onos> flows -s
你应该看到3个流程规则:
deviceId=device:bmv2:s1, flowRuleCount=3
ADDED, bytes=0, packets=0, table=0, priority=40000, selector=[ETH_TYPE:arp], treatment=[immediate=[OUTPUT:CONTROLLER], clearDeferred]
ADDED, bytes=0, packets=0, table=0, priority=40000, selector=[ETH_TYPE:bddp], treatment=[immediate=[OUTPUT:CONTROLLER], clearDeferred]
ADDED, bytes=0, packets=0, table=0, priority=40000, selector=[ETH_TYPE:lldp], treatment=[immediate=[OUTPUT:CONTROLL
iii.检测主机之间的连通性
mininet> pingall
可以看到无法通信,原因是我们没有激活还没有任何ONOS应用主机之间的连接性。
iv.在Mininet上运行ping操作时,使用ONOS CLI激活Reactive Forwarding应用程序:
再次pingall,发现能够正常通信
查看s1的流表规则
最初的时候,流规则为3条:
通信后:
一段时间后,流规则过期,只剩4条:
而因为过期被删除的两条恰好是h1->s1->h2和h2->s1->h1的流表,与Openflow的流表过期原理相近。
5 打开ONOS的web界面
网址:http://127.0.0.1:8181/onos/ui/login.html
用户名:onos 密码:rocks