Mininet问题合集

我的环境:Ubuntu 22.04.5 LTS

# ovs版本
liu@liu-Ubuntu-Desktop:~/桌面$ ovs-vsctl -V
ovs-vsctl (Open vSwitch) 2.17.9
DB Schema 8.3.0
# Mininet版本
liu@liu-Ubuntu-Desktop:~/桌面$ mn --version
2.3.0
# python版本
liu@liu-Ubuntu-Desktop:~/桌面$ python3
Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux

一、MiniEdit中将拓扑另存为python文件时报错

报错信息如下:

image-20241016155421891

这个报错原因通常是因为使用了python3来启动miniedit.py。

如果有python2环境,使用python2打开就能解决。

# 查看当前环境中的python版本
liu@liu-Ubuntu-Desktop:~/桌面$ which python2
/usr/bin/python2	# 说明我当前环境中有python2
liu@liu-Ubuntu-Desktop:~/桌面$ which python3
/usr/bin/python3	# 说明我当前环境中有python3

# 如果有python2,那么使用python2来打开miniedit
sudo python2 miniedit.py的路径
# 例如:
sudo python2 ~/mininet/examples/miniedit.py

如果环境中没有python2或者想要使用python3启动,那么就需要修改miniedit.py文件的内容。

根据报错信息可知,我的miniedit.py是在/usr/lib/python3/dist-packages/mininet/examples/目录下。(如果你是使用git clone,之后执行install.py安装的mininet,那么你的)

先备份miniedit.py文件.

sudo cp [miniedit.py的路径]/miniedit.py [miniedit.py的路径]/miniedit_backup.py 
# 示例
sudo cp /usr/lib/python3/dist-packages/mininet/examples/miniedit.py /usr/lib/python3/dist-packages/mininet/examples/miniedit_backup.py

使用vim编辑器打开miniedit.py文件。

# 示例
sudo vim /usr/lib/python3/dist-packages/mininet/examples/miniedit.py

打开后输入:1707,回车。

image-20241016162130659

跳转到1707行后,按i进入编辑模式,找到wb,将其修改为wt

image-20241016162341986

再按Esc建,退出编辑模式,再输入:wq保存并退出。

image-20241016162455182

若保存退出时出现下面这种情况,清输入wq!保存并强制退出。

image-20241016162930026

此时,重新使用python3启动MiniEdit(也就是miniedit.py文件),就可以将拓扑图保存为python文件了。

# 示例
sudo python3 /usr/lib/python3/dist-packages/mininet/examples/miniedit.py

二、MiniEdit中点击Run运行时闪退、以python脚本保存的拓扑文件运行报错

MiniEdit中点击Run运行时闪退,或者以python脚本保存的拓扑文件运行出现类似下图中所示的报错,提示Cannot find required executable controller.

image-20241016183239169

这是因为ovs-controller从OVS 2.1.0开始不再打包,但是mininet仍然需要使用ovs-controller。

mininet的github上也有说明:https://github.com/mininet/mininet/issues/301

image-20241016184828563

目前我的OVS版本是2.17.9,且我是通过sudo apt install mininet命令直接安装的mininet,所以没有ovs-controller。

方法一(未解决)

如果你是使用git clone mininet的仓库,并通过install.sh脚本来安装的,那么你可以尝试重新安装mininet来解决此问题。(我在使用git安装mininet【版本为2.3.1】的虚拟机中尝试使用这种方法,重新安装,仍然无法解决)

# 进入到解压后的mininet目录
cd /[mininet路径]/mininet/util/
# 反复执行安装脚本(记得加上-a选项)
sudo ./install.sh -a

如果多次尝试重新安装无果后,请尝试下面的方法。

方法二(解决)

注:如果你的环境中有ovs-controller,但是运行python脚本时仍然出现上面的错误,可以尝试,给ovs-controller添加一个名称为controlle的符号链接r。

# 执行下面这条命令,如果能够显示出帮助信息,则说明有ovs-controller
ovs-controller --help

image-20241016124135268

环境中有ovs-controller,那么只需要设置一个符号链接即可。

sudo ln /usr/bin/ovs-controller /usr/bin/controller

此方法在我使用git方法安装的虚拟机(配置如下)中,能够解决该问题。(安装过程:Mininet安装记录 - 最爱喝开水 - 博客园 (cnblogs.com)

root@UbuntuDesktop:~# ovs-vsctl -V
ovs-vsctl (Open vSwitch) 2.0.2
Compiled Dec  9 2015 14:08:08
root@UbuntuDesktop:~# mn --version
2.3.1b1
root@UbuntuDesktop:~# python
Python 2.7.6 (default, Nov 13 2018, 12:45:42)

方法三(已解决)

如果你是使用apt安装的mininet,可以尝试下面提供的解决方法。

解决方法是,使用安装openvswitch-testcontroller,并为openvswitch-testcontroller创建符号链接为controller

# 安装openvswitch-testcontroller
sudo apt-get install openvswitch-testcontroller
# 创建符号链接
sudo ln /usr/bin/ovs-testcontroller /usr/bin/controller

img

接下来还需要关闭OVS的controller服务,否则mininet会报错。

# 关闭服务
sudo service openvswitch-testcontroller stop
# 查看服务状态(按Ctrl+C退出)
sudo service openvswitch-testcontroller status
# 禁止开机自启
sudo update-rc.d openvswitch-testcontroller disable

没有关闭OVS的controller服务的后果。

MiniEdit点击Run运行时:

image-20241016170105710

运行保存的python脚本时:

image-20241016165316469

使用测试命令时:

image-20241016165405370

此时,再次运行脚本文件,成功执行。

image-20241016191527789

该方法在我Ubuntu22.04的环境中可以正常解决问题。

posted @ 2024-10-16 19:30  最爱喝开水  阅读(67)  评论(0编辑  收藏  举报