SDN 环境配置及问题解决:Mininet + Ryu + OpenFlow 1.3 + Ubuntu 20.04

项目需要,指定了软件版本:

  • Mininet - 2.3

  • Ryu - 4.34

  • Ovs - 2.9.8

  • Openflow - 1.3

Mininet

没有 git 先安装 git:sudo apt install git

第三行的 -n3v2.9.8 是指定安装 mininet 核心功能、OpenFlow 1.3、OpenvSwitch 2.9.8。

git clone git://github.com/mininet/mininet
cd mininet/util
sudo ./install.sh -n3v2.9.8

如果报错可能要更新一下:

sudo apt update 
sudo apt upgrade

输入 sudo mn 检验是否安装成功:

wu@wu-ubuntu:~$ sudo mn
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>

输入 exit 即可退出mininet。

这里若报错尝试运行下 sudo apt-get install mininet

Ryu

没有 pip3 先安装pip3

sudo apt update 
apt install python3-pip

pip3 -V 可查看 pip 版本和位置。如果因为 Python2 和 Python3 共存导致无法定位到 pip3,运行以下命令:

sudo python3 -m pip install --upgrade pip

pip 换清华源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/

pip 安装 Ryu

按照 github 上的官方说明,如果安装过程中有错误信息,需要先安装 Python 依赖包:

sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev

直接 pip 安装 ryu 4.34

sudo pip3 install ryu==4.34

查看版本是否成功:

ryu --version

功能选配:ryu 的一些功能需要额外的包。

  • OF-Config 需要 lxml 和 ncclient

  • NETCONF 需要 paramiko

  • BGP speaker(SSH 控制台)需要 paramiko

  • Zebra 协议服务(数据库)需要 SQLAlchemy

如果要使用这些功能,使用安装命令:

sudo pip install -r tools/optional-requires

git 安装 Ryu

发现用 pip 装的 Ryu 没有 GUI 的 HTML 文件,还是得用 git 装。

git clone git://github.com/osrg/ryu.git
sudo pip install -r tools/pip-requires
cd ryu
sudo python setup.py install 

启动Ryu

直接在任意路径启动 sudo ryu-manager 应该也是可以的,进入安装文件夹不是必须。不过如果要运行某个应用就需要先进 app 文件夹了。

通过命令:

 sudo pip show ryu 

可以看到 ryu 安装路径:Location: /usr/local/lib/python3.8/dist-packages

cd 进入安装文件夹 cd /usr/local/lib/python3.8/dist-packages/ryu,可以看到下面的文件:

wu@wu-ubuntu:/usr/local/lib/python3.8/dist-packages/ryu$ ls
app   cfg.py  contrib     exception.py  hooks.py     lib     ofproto      services  topology
base  cmd     controller  flags.py      __init__.py  log.py  __pycache__  tests     utils.py

cd app 进入 app 文件夹,运行 ryu 管理:

sudo ryu-manager

我这里报错:

ImportError: cannot import name 'ALREADY_HANDLED' from 'eventlet.wsgi' (/home/wu/.local/lib/python3.8/site-packages/eventlet/wsgi.py)

查了下,原因是 eventlet 版本问题。使用 pip show eventlet 命令查看版本为 Version: 0.33.0

删除重新安装 0.30.2 版本:

sudo pip uninstall eventlet
sudo pip install eventlet==0.30.2

再次运行成功。

wu@wu-ubuntu:~$ sudo ryu-manager
loading app ryu.controller.ofp_handler
instantiating app ryu.controller.ofp_handler of OFPHandler

由于用 pip 安装,全局都可以使用 ryu-manager 命令(也许吧?)

测试

进入到 ryu/app文件夹,ls查看内容:

bmpstation.py         __pycache__           simple_switch_12.py       simple_switch.py
cbench.py             rest_conf_switch.py   simple_switch_13.py       simple_switch_rest_13.py
conf_switch_key.py    rest_firewall.py      simple_switch_14.py       simple_switch_snort.py
example_switch_13.py  rest_qos.py           simple_switch_15.py       simple_switch_stp_13.py
gui_topology          rest_router.py        simple_switch_igmp_13.py  simple_switch_stp.py
__init__.py           rest_topology.py      simple_switch_igmp.py     simple_switch_websocket_13.py
ofctl                 rest_vtep.py          simple_switch_lacp_13.py  wsgi.py
ofctl_rest.py         simple_monitor_13.py  simple_switch_lacp.py     ws_topology.py

这个文件夹下就是各种应用,可以自己编辑,可使用ryu-manager simple_switch.py命令指定运行应用为 simple_switch.py,来检验一下ryu是否安装成功。

打开另一个终端,运行mininet。

sudo mn --controller=remote

可以在 ryu 终端看到运行成功。
在这里插入图片描述感觉 pip 安装的 app 文件夹不太好找,git 下来自己安装ryu的可能方便点?或者尝试把文件直接移出去?

尝试了下新建路径 ~/RyuApp,把 ryu/app 里的 simple_switch.py 文件单独复制到此路径下,然后在此路径下运行该文件 ryu-manager simple_switch.py 发现也能正常运行。那应该 app 里的文件可以放到任何位置都能运行。

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值