真是不敢相信花了大几个小时踩坑来装一个控制器。。既然踩了这么多坑那就记录下来吧

前三个部分就是图一乐,真要安装还得看最后一部分(推荐使用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

他本会将需要的ecdsasix都装上,但是到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

完成

Last modification:November 6th, 2021 at 05:35 pm