Mininet+Ryu安装教程

最近要做一个Mininet的网络环境,网络设备由Mininet来模拟,SDN控制器用Ryu来做,为了避免每次重新做再去翻查资料,我在这里系统地整理一遍

硬件需求

我在 VMWare Workstation 16 Player虚拟机上运行的Ubuntu 22.04.1

硬件 需求
内存 至少4G以上,我分配了8个G
CPU 至少2个核心,我分配了4个
硬盘 30G以上,我分配了100G

版本需求

软件 版本
Ubuntu 22.04.1
Mininet 2.3.0
Ryu 4.34
Python 3.8
Ovs 2.9.8
Openflow 1.3

软件安装

这两句随时准备着,出问题的时候先尝试一下

sudo apt update 
sudo apt upgrade

Mininet安装

sudo apt-get install git
git clone https://github.com/mininet/mininet
cd mininet
git tag 
git checkout -b mininet-2.3.0 2.3.0 
cd ..
mininet/util/install.sh -a

第一个问题,端口拒绝访问:
Cloning into 'openflow'... fatal: unable to connect to github.com: github.com[0: 20.27.177.113]: errno=Connection refused

git config --global url.https://github.com/.insteadOf git://github.com/
mininet/util/install.sh -a

安装完毕后测试:

sudo mn --switch ovsbr --test pingall

测试成功:
在这里插入图片描述

Ryu安装

接下来这几步我只是为了说明python3.10中运行Ryu的困难,我搞了一整天,甚至不小心删除了python3.10搞崩了Ubuntu,也没有搞定这些问题,嫌麻烦的同学直接跳到下载python3.8的部分

sudo apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev -y
sudo pip install ryu
cd ryu
sudo pip install -r tools/pip-requires

查看Ryu4.34安装与测试运行:

 sudo pip show ryu 
 sudo ryu-manager

第一个问题,eventlet版本太新:
ImportError: cannot import name 'ALREADY_HANDLED' from 'eventlet.wsgi' (/home/jzjs/.local/lib/python3.10/site-packages/eventlet/wsgi.py)

sudo pip uninstall eventlet
sudo pip install eventlet==0.30.2

第二个问题,Python版本太新:
TypeError: cannot set 'is_timeout' attribute of immutable type 'TimeoutError'

解决办法:下载python3.8,并启用虚拟环境ryu-venv,重新安装Ryu,注意有些地方不能用sudo:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.8 python3.8-venv python3.8-dev
python3.8 -m venv ryu-venv
source ryu-venv/bin/activate
pip install ryu
cd ryu
pip install -r tools/pip-requires
pip uninstall eventlet
pip install eventlet==0.30.2

重新查看Ryu4.34安装,这次确实是安装在python3.8/site-packages当中了:

pip show ryu 
ryu-manager

测试成功:
在这里插入图片描述

随时进入和关闭虚拟环境:

source ryu-venv/bin/activate
deactivate

要是关闭后忘记了路径就敲下面的命令:

find ~/ -name "activate"

Ryu GUI安装

Ryu GUI所需要的webob和routes库已经在下面的命令中安装完毕:

pip install -r tools/pip-requires

测试Ryu的GUI,注意,你的路径和我的不一样:

cd /home/jzjs/ryu/ryu-venv/lib/python3.8/site-packages/ryu/app/gui_topology
sudo ryu-manager --observe-links --verbose gui_topology.py

浏览器打开http://0.0.0.0:8080后,发现有如下问题:
OSError: Path does not exist or is not directory: '/home/jzjs/ryu/ryu-venv/lib/python3.8/site-packages/ryu/app/gui_topology/html/'

Ryu的GUI找不到所需文件,为了解决这个问题,手动创建所需的目录并将GUI应用程序的源代码复制到那里:

git clone https://github.com/osrg/ryu.git

mkdir -p /home/jzjs/ryu/ryu-venv/lib/python3.8/site-packages/ryu/app/gui_topology/html/

cp -r ryu/ryu/app/gui_topology/html/* /home/jzjs/ryu/ryu-venv/lib/python3.8/site-packages/ryu/app/gui_topology/html/

sudo ryu-manager --observe-links --verbose gui_topology.py

成功打开:
在这里插入图片描述

Mininet和Ryu联动

继续在上面的路径里,运行openflow1.3的交换机:

ryu-manager --observe-links ryu/ryu/app/gui_topology/gui_topology.py ryu/ryu/app/simple_switch_13.py

另外打开一个终端,输入Mininet的语句:

sudo mn --controller remote,ip=127.0.0.1 --topo linear,3 --mac --switch ovsk --link tc

刷新一下浏览器,可以看到下面的界面便大功告成:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41656968/article/details/130457754
ryu