SDN安装Ryu及GUI,并解决Disconnected问题
Posted remo0x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDN安装Ryu及GUI,并解决Disconnected问题相关的知识,希望对你有一定的参考价值。
1 安装Ryu
最简单的方式是通过pip安装:
pip install ryu
如果需要,也可以通过源码安装:
git clone git://github.com/osrg/ryu.git
cd ryu; pip install .
2 安装GUI
下载Ryu的Web GUI补丁,将ryu/ryu中的gui/文件夹复制到Ryu的安装目录ryu/ryu中:
cp -r ./ryu/ryu/gui ~/ryu/ryu/
Ryu的Web GUI是通过Flask来显示的,安装以下依赖套件:
sudo apt-get install python-flask
sudo apt-get install python-gevent-websocket
由于在gui/templates/base.html文件中,用到了几个在线的库,而jsplumb这个库无法获取到,因此换用国内提供的在线库。在库里找到对应版本的链接用于替换base.html中的:
<script src="https://cdn.bootcss.com/jsPlumb/1.3.16/jquery.jsPlumb.min.js" type="text/javascript"></script>
3 运行
打开终端启动Mininet:
sudo mn --controller remote --topo tree,depth=3
打开另一个终端启动Ryu Server:
ryu-manager --verbose --observe-links ryu.topology.switches ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch
再打开一个终端启动Ryu的GUI:
python ./ryu/gui/controller.py
打开浏览器访问网址:
http://127.0.0.1:8000
这时应该会看到如下界面:
4 解决Disconnected问题
4.1 查明原因
查看运行GUI的终端会发现有如下错误:
2019-04-07 16:15:30,962 [DEBUG] WebSocket request accepted, switching protocols
2019-04-07 16:15:30,087 [ERROR] ImportError (views.websocket)
2019-04-07 16:15:30,096 [DEBUG] Closed WebSocket
2019-04-07 16:15:30,097 [DEBUG] Failed to write closing frame -> closing socket
2019-04-07 16:15:30,097 [DEBUG] Closed WebSocket
2019-04-07 16:15:30,097 [DEBUG] Initializing WebSocket
当前能得到的信息是不能引用views.websocket,然后找到gui/views/文件夹发现已经有websocket.py文件,但是不能正常引用。
为了得到更多信息,新建一个test.py文件,只引用websocket:
import views.websocket
在终端运行test.py文件,得到如下错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
import views.websocket
File "/home/widiot/ws/graduation-pro/Source/ryu/ryu/gui/views/websocket.py", line 20, in <module>
from models.topology import TopologyWatcher
File "/home/widiot/ws/graduation-pro/Source/ryu/ryu/gui/models/topology.py", line 27, in <module>
from ryu.app.client import TopologyClient
File "/usr/lib/python2.7/dist-packages/gevent/builtins.py", line 93, in __import__
result = _import(*args, **kwargs)
ImportError: No module named client
这次可以知道错误的根本原因是ryu/app/包下没有client.py文件。
4.2 补齐文件
Ryu的app有两种版本:
https://github.com/osrg/ryu/tree/master/ryu/app
https://github.com/o3project/ryu-oe/tree/master/ryu/app
如果通过git clone git://github.com/osrg/ryu.git
安装,则使用的是缺失client.py文件的app版本。所以需要将缺失的文件补齐。下载RYU-OE:
git clone https://github.com/o3project/ryu-oe.git
然后将ryu-oe/ryu/app中的文件复制到Ryu的安装目录ryu/ryu/app中:
cp -ri ryu-oe/ryu/app/* ~/ryu/ryu/app
然后运行Ryu安装目录下的setup.py文件:
sudo python ./setup.py install
重新运行GUI,刷新浏览器就能看到拓扑结构:
5 参考
以上是关于SDN安装Ryu及GUI,并解决Disconnected问题的主要内容,如果未能解决你的问题,请参考以下文章
vty_read_config: failed to open configuration file /root/ryu/SDN-IP-Ryu/sdn-ip-topology/quagga-sdn.c