项目需要,指定了软件版本:
-
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 里的文件可以放到任何位置都能运行。