Ubuntu22.04中安装mininet,可视化miniedit以及ryu
本人纯小白,第一次接触这些软件,下面是我的安装过程以及碰到的一些问题,仅供大家参考,如有问题希望大家能够指出,感谢!
一、安装mininet
1. 打开终端,切换到管理员用户
sudo su -
2. 更新软件包列表以及升级已安装的软件包
sudo apt-get update
sudo apt upgrade
3. 安装mininet
sudo apt-get install mininet
4. 测试是否安装成功
sudo mn --version
5. 启动mininet,这时会默认创建一个由一台控制器、一台交换机和两台主机构成的网络。
sudo mn
安装成功。
二、miniedit可视化
在实现可视化时,遇到一些问题,后来发现miniedit.py必须在桌面版系统或支持X11的情况下使用,之前安装的系统不支持,重新下载桌面系统之后解决此问题。
1. 配置环境
在启动miniedit之前,要确保系统已安装好python环境,且必须使用管理员账户。
下面是我使用时遇到的一些问题,以及尝试的解决办法。
使用以下命令进入miniedit.py所在目录:
cd /usr/share/doc/mininet/examples
然后,使用以下命令启用miniedit.py。
python ./miniedit.py
此时,报错显示无“tkinter”模块。使用如下指令给系统默认python安装tkinter模块:
sudo apt-get update
sudo apt-get -y install python-tk
接着启用miniedit.py,仍旧显示无“tkinter”模块,使用以下指令确认已安装的包:
pip list
发现tkinter确实没有安装成功(此前我将系统默认python从python3.10改成了python3.7)。重新使用以下指令安装:
sudo apt-get update
sudo apt-get install python3-tk
测试之后依旧显示没有“tkinter”模块。在终端输入以下指令查看python3-tk的版本:
dpkg --list | grep python3-tk
输出如下:
ii python3-tk: amd64 3.10.8-1~22.04 amd64 Tkinter - Writing Tk applications with Python 3.x
这说明安装的python3-tk面向python3.10版本,因此重新将系统默认python版本改为python3.10。重新测试,发现tkinter导入成功。
2. 启用miniedit.py
我使用了两种启用方法,
第一种:
进入miniedit.py所在目录,此时为usr/share/doc/mininet/examples,使用以下指令启用miniedit.py
cd /usr/share/doc/mininet/examples
python ./miniedit.py
图形界面成功出现。
第二种
直接将miniedit.py文件复制到桌面,然后在Desktop文件下打开终端,使用以下指令即可启用miniedit:
sudo python ./miniedit.py
注:
在后续测试的时候,发现miniedit.py又无法打开了,报错如下:
之后确认问题在于:启动miniedit时没有检测到图形显示环境。
接下来,先确定本地是否安装X11:
Xorg -version
此时若输出对应版本,则说明系统支持X11;若报错,则可以尝试安装x11,尝试安装命令如下,我这里成功显示X11的版本,无需再安装。
sudo apt update
sudo apt install xorg
(还有一点是X11需要和gnome或KDE一起工作,所以也需要确认是否安装gnome:
gnome-shell --version
若输出相应版本,则无需重新安装。若没有安装,则可使用以下指令安装:
sudo apt update
sudo apt install ubuntu-gnome-desktop
)
之后,需要启用X11。我这里直接更改系统设置为:在启动时自动进入图形界面,命令如下:
sudo systemctl set-default graphical.target
sudo systemctl start graphical.target
重启系统之后,使用如下命令确认上述更改是否生效:
systemctl get-default
若输出为graphical.target,说明更改生效。
接着,我再次尝试使用上面两种方法启动miniedit.py,第二种成功启动,但是第一种仍旧报错(要崩溃了)。
最后发现,如果在有图形桌面的环境中运行,但仍然报错,可以手动设置DISPLAY变量。因此在进入 miniedit.py所在目录后,手动添加DISPLAY变量,指令如下:
cd /usr/share/doc/mininet/examples
export DISPLAY=:0
python miniedit.py
之后成功打开miniedit界面。
注意,在每次使用第一种方法打开miniedit时,都需要重新添加DISPLAY变量。还有,在关闭miniedit窗口时,最好点击quit,不要直接点❌,不然下次打开miniedit时可能会报错。如果报错的话可尝试下列指令清理配置操作,然后重新打开miniedit。
sudo mn -c
手动分割线,在后续使用miniedit时,我又发现在导出文件时报错:
a bytes-like object is required,not ‘str’
解决办法参考Mininet可视化网络虚拟编辑界面使用与导出python代码
首先打开miniedit.py源文件,然后对源代码进行如下修改,并保存。
- 将 使用二进制模式(wb)打开文件 全部修改为 以文本模式(w)打开,即:
f = open(fileName, 'w')
大概位置在1687行和1706行;
- 将第1452行左右的代码注释掉,更改为:
self.appPrefs.update(loadedTopology['application'])
之后再次导出文件,文件成功导出。
三、安装Ryu
下载软件之前首先更新apt和pip,使用管理员账户。
指令如下:
sudo apt-get update
sudo apt-get upgrade
sudo apt install python3-pip
接着,获取ryu源码并安装
git clone https://gitclone.com/github.com/osrg/ryu
pip3 install ryu
进入ryu所在文件夹,安装所需的依赖。
cd ryu
sudo pip3 install -r tools/pip-requires
sudo python3 setup.py install
安装之后,检查ryu是否安装成功,如未报错,则成功。
sudo ryu-manager
注:
下面是安装时遇到的一些问题。
执行上述命令之后,第一次报错为:
结合博主的文章Ubuntu22.04安装mininet和ryu,将原本eventlet卸载,重新安装兼容版本,此问题解决。
sudo pip uninstall eventlet
sudo pip install eventlet==0.33.3
再次测试:
sudo ryu-manager
报错如下:
参考博客AttributeError: module ‘collections‘ has no attribute ‘MutableMapping,对源文件进行修改。不过文件修改需要更改文件权限,我参考了linux常用命令(7):chmod命令(给文件赋读写权限/chmod 777)和Linux查看、修改文件读写权限,将文件权限修改为“其他用户拥有读和写的权限,指令如下。
ls -l 报错源文件所在的地址 #此指令是查看文件的权限
sudo su -
chmod 666 需修改文件的地址
再次测试:
sudo ryu-manager
没有报错,安装成功,输出如下:
四、安装Ryu GUI
此处参考博客Ubuntu22.04安装mininet和ryu。
首先找到 gui_topology.py 所在的目录,然后进入此目录打开终端,输入以下指令:
sudo ryu-manager --observe-links --verbose gui_topology.py
终端输出如下:
鼠标点击图片上网址+ctrl进入此网页,会发现为空白图像,接着,同时运行mininet和Ryu。步骤如下:
首先要找到simple_switch_13.py的所在目录,此为最基础的OpenFlow 1.3交换机应用程序。
然后在 gui_topology.py 所在的目录下新建一个终端,输入以下命令:
sudo ryu-manager --observe-links 地址1 地址2
# 地址1为gui_topology.py的地址, 地址2为simple_switch_13.py的地址,二者之间有空格
每个人的文件地址不一样,需要按自己的输入。
接着,重新打开一个终端,输入以下命令启动mininet:
sudo mn --controller remote,ip=127.0.0.1 --topo linear,3 --mac --switch ovsk --link tc
终端输出如下:
最后,刷新一下浏览器,即可得到下图:
至此安装完毕。