真是不敢相信花了大几个小时踩坑来装一个控制器。。既然踩了这么多坑那就记录下来吧
前三个部分就是图一乐,真要安装还得看最后一部分(推荐使用anaconda来安装ryu)
准备工作
既然是完整的,那么首先先从配置初始虚拟机开始吧。。。
平台:win10下的Vitual BOX
版本:Mininet 2.2.2(自带了miniedit,好用, ubuntu版本为14.04)
使用软件为Vitual BOX,下载mininet官网镜像后,直接解压导入就行
使用账号密码mininet
进行登录
先配置网络,毕竟要安装一些拓展依赖和ryu控制器的。。
而且配置好之后就可以用我喜欢的ssh方式连接了,以后配合xmanager和xshell可以实现可视化的一些东西
配置STEP:
将vitual box中的网络设置为桥接模式
- 需要重启才能生效
- 设置好之后就可以用
ip addr
查看被分配的IP地址然后用ssh登录了
- 在Ubuntu中进行各种网络信息填入
ssh登录后先习惯性的先切换成root
账户,毕竟每次都sudo
怪麻烦的
sudo -i
在随便ping
一个网站看能不能通吧,一般都通了
一、安装ryu所需的依赖包
在使用pip安装包之前,先更新一下库信息
apt-get update
之后安装pip
apt-get -y install python-pip
ryu的官网上说了必要的依赖有这些
apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev
之后在安装一些其他的包,包括eventlet, routes,webob, paramiko
pip install -U eventlet # 安装eventlet
easy_install routes # 安装routes
pip install webob # 安装webob
paramiko这东西得单独摘出来,因为就它最麻烦
安装paramiko
所需的依赖有:Pycrypto
,six
,ecdsa
后面两个它会自己装
pip install pycrypto
接下来如果你想直接安装paramiko的话,一片红色的报错会将你直接劝退
正确的做法就是进入pypi.org里面找到paramiko的老版本,我选的1.17.1版,亲测不报错
新版本可能跟python2有点兼容问题吧,反正就是各种报错
# 先在pypi.org里面找到paramiko,然后用wget下载whl文件
pip install paramiko-1.17.1-py2.py3-none-any.whl
他本会将需要的ecdsa
和 six
都装上,但是到six
的时候提示
Installing collected packages: six
Found existing installation: six 1.5.2
Not uninstalling six at /usr/lib/python2.7/dist-packages, owned by OS
Successfully installed six
可以看到six
因为系统内有了所以没有安装也没有更新,此时import paramiko
仍然会提示失败
File "/usr/local/lib/python2.7/dist-packages/ecdsa/ellipticcurve.py", line 51, in <module>
from six import python_2_unicode_compatible
ImportError: cannot import name python_2_unicode_compatible
我们需要将six
更新至1.9.0版本以上,但是直接使用pip install -U six
同样也会像上面那样不让我们装
在stackoverflow.com(像海外知乎)查到的解决方法就是
easy_install -U six
# Easy_install managed to upgrade the package even when pip failed. ——来自回答者mika
现在测试import paramiko
就不会报错了
二、终于可以开始装ryu了
pip install ryu
报错
好吧,那我试试另一种安装方式
git clone https://github.com/faucetsdn/ryu.git
cd ryu
pip install .
仍然报错,我吐了
查看错误分析发现貌似是setuptools的问题,好吧,那我更新一下这个
pip install -U setuptools
继续报错,不让更新了??看一下错误信息
root@mininet-vm:~# pip install -U setuptools
Downloading/unpacking setuptools from https://files.pythonhosted.org/packages/a7/e0/30642b9c2df516506d40b563b0cbd080c49c6b3f11a70b4c7a670f13a78b/setuptools-50.3.2.zip#sha256=ed0519d27a243843b05d82a5e9d01b0b083d9934eaa3d02779a23da18077bd3c
Downloading setuptools-50.3.2.zip (2.1MB): 2.1MB downloaded
Running setup.py (path:/tmp/pip_build_root/setuptools/setup.py) egg_info for package setuptools
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "setuptools/__init__.py", line 16, in <module>
import setuptools.version
File "setuptools/version.py", line 1, in <module>
import pkg_resources
File "pkg_resources/__init__.py", line 1365
raise SyntaxError(e) from e
^
SyntaxError: invalid syntax
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "setuptools/__init__.py", line 16, in <module>
import setuptools.version
File "setuptools/version.py", line 1, in <module>
import pkg_resources
File "pkg_resources/__init__.py", line 1365
raise SyntaxError(e) from e
^
SyntaxError: invalid syntax
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/setuptools
Storing debug log for failure in /root/.pip/pip.log
傻了,什么都看不出来,气得我当场决定推倒重来,就没见过有这么多坑的
三、推倒重来
这次换个思路,可能是ryu控制器和一些其他的依赖对一些老版本的系统兼容不太好(mininet附赠的为14.04版Ubuntu),这次我将ryu控制器单独拿出来装,安装环境为Ubuntu 20.04
这次怕出错,直接先上anaconda,毕竟在虚拟环境里面装出什么错都不怕
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
bash Anaconda3-5.3.1-Linux-x86_64.sh
装好anaconda后重启系统,然后新建一个python2.7的虚拟环境,开始安装ryu
conda create --name ryu python=2.7
创建好后切换到这个环境里面去
conda activate ryu
开始安装ryu和paramiko以及他们的依赖
pip install eventlet
pip install routes
pip install webob
pip install pycrypto
pip install paramiko
过程顺利的让我有些害怕
git clone https://github.com/faucetsdn/ryu.git
cd ryu
pip install .
终于报错了,分析一下错误信息
ERROR: Could not find a version that satisfies the requirement pbr (from versions: none)
ERROR: No matching distribution found for pbr
好吧,那我装一下pbr
wget https://files.pythonhosted.org/packages/fb/48/69046506f6ac61c1eaa9a0d42d22d54673b69e176d30ca98e3f61513e980/pbr-5.5.1-py2.py3-none-any.whl
pip install pbr-5.5.1-py2.py3-none-any.whl
再次尝试安装
pip install .
随着不断跳动的白色字符,心情也愈发激动。当过程结束时,发现没有任何错误信息出来,我赶紧确认一下安装是否成了
ryu-manager --help
正常无报错
好吧,花了我大几个小时的ryu控制器终于可以正常使用了
这波我只想说:anaconda牛啤酒!o( ̄▽ ̄)d
再更新一次使用python3来装ryu控制器
conda create -n ryu python=3.7
conda activate ryu
pip install eventlet
pip install routes
pip install webob
pip install paramiko
cd ryu
pip install -r tools/pip-requires
python setup.py install
完成