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问题的主要内容,如果未能解决你的问题,请参考以下文章

SDN中ryu安装出现的问题

SDN实验---Ryu的源码分析

vty_read_config: failed to open configuration file /root/ryu/SDN-IP-Ryu/sdn-ip-topology/quagga-sdn.c

SDN-IP-Ryu

SDN实验---Ryu的应用开发北向接口RESTAPI

[环境搭建]SDN网络感知服务与最短路径应用