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文件时报错
报错信息如下:
这个报错原因通常是因为使用了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
,回车。
跳转到1707行后,按i
进入编辑模式,找到wb
,将其修改为wt
。
再按Esc建,退出编辑模式,再输入:wq
保存并退出。
若保存退出时出现下面这种情况,清输入wq!
保存并强制退出。
此时,重新使用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.
这是因为ovs-controller从OVS 2.1.0开始不再打包,但是mininet仍然需要使用ovs-controller。
mininet的github上也有说明:https://github.com/mininet/mininet/issues/301
目前我的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
环境中有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
接下来还需要关闭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运行时:
运行保存的python脚本时:
使用测试命令时:
此时,再次运行脚本文件,成功执行。
该方法在我Ubuntu22.04的环境中可以正常解决问题。