最近在研究onos模态app开发, 光本地开发环境就折腾了两天, 网上实在没多少资料能参考,目前在debian上能打开onos的webui, 通过mininet创建虚拟设备, 在onos中查看topo图, 理论上ubuntu也可以, 废话不多说, 开整, 如有疏漏, 欢迎指正!
版本: onos 2.8.0 mininet 2.3.0
注意, 全部在root账号下进行
1.docker安装onos, 至于如何安装docker, 这里不在赘述, 自行百度
docker pull onosproject/onos:latest
sudo docker run -it -p 8181:8181 -p 8101:8101 -p 6653:6653 -p 6640:6640 -p 5005:5005 --env JAVA_DEBUG_PORT="0.0.0.0:5005" --name onos onosproject/onos
通过docker inspect 容器id 可以查看onos的ip
2.连接ONOS
有两种方式可以连接进入ONOS,分别是使用ssh和使用web图形界面
2.1 使用ssh连接ONOS命令行
在终端输入:ssh -p 8101 karaf@127.0.0.1
,使用密码:karaf登陆
若提示连接失败,可能是由于ssh不支持ssh-rsa加密导致, 根据提示自行判断, ssh-rsa加密导致失败的话,如下
执行:
vim ~/.ssh/config
添加以下内容:
Host 127.0.0.1
Port 8101
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
如图:
重新ssh到onos即可
注意:每次ssh连接onos, onos服务都回生成不同的密钥, 而本机的密钥固定了,因此需要先执行
rm -rf ~/.ssh/known_hosts
总结:
要ssh连接onos命令行, 先后执行:
rm -rf ~/.ssh/known_hosts
ssh -p 8101 karaf@127.0.0.1
当然, ssh没有加密问题的话, 不需要执行rm -rf ~/.ssh/known_hosts
2.2 使用web图形界面
打开浏览器,在地址栏输入:http://127.0.0.1:8181/onos/ui/login.html
,使用帐号/密码:onos/onos
进行登陆
2.3 在web页面, 查找appid 为
org.onosproject.openflow
org.onosproject.drivers.bmv2
的app, 安装这两个app, 其中openflow会影响onos是否展示topo图, bmv2是与p4通信所需要用的基础包集合,安装bmv2时, onos会自动重启
3.本机安装mininet
sudo apt-get install mininet
终端输入 mn 回车, 检查mininet是否安装成功, 若提示mn命令不存在
则执行 sudo mn, 检查mininet是否安装成功,
如果sudo mn能执行mininet命令, 则执行which mn查看mininet安装位置
例如
输入
vim ~/.bashrc
添加内容:
export PATH=$PATH:/usr/bin/mn
如图:
添加后保存, 执行
source ~/.bashrc
终端执行mn, 检查mininet是否安装成功, 一般这个时候mininet就可以用了
4.将mininet连接到ONOS
在mininet中输入:
sudo mn --controller=remote,ip=127.0.0.1,prot=6653 --switch=ovs,protocols=OpenFlow13 --topo tree,2
注意: --switch=ovs,protocols=OpenFlow13必须要加, 意思是指定mininet所使用的openflow版本, mininet默认的版本和onos不兼容, onos会报错
我目前安装的onos版本是2.8, 测试只有OpenFlow13版本才能往onos发送topo成功,
理论上, onos2.7也是openflow13
ctrl+d: 退出mininet命令行
注意: 退出mininet后, onos中的topo图不会被清除
因为ONOS作为一个控制器,它记录并维护着网络设备的状态,直到这些设备主动断开连接或ONOS本身重启