====== Ryu SDN-Controller von Github auf MacOS X installieren ======
Der Vorteil der Ryu-Variante direkt von Github ist die direkte Versorgung mit Patches oder Erweiterungen. Generell wird das PyPi Projekt nur mit jedem Major Release versorgt.
===== Voraussetzungen =====
* Ich verwende Mac OS X v10.9
* Python v2.7 ist bereits an Bord
* ''pip'' (alles notwendige ist [[https://pip.pypa.io/en/latest/installing.html#install-or-upgrade-pip|hier]] beschrieben!)
* ''virtualenv'' (''pip install virtualenv'')
* XCode v5.1.1 (Apple AppStore, wichtig sind die command-line Tools! Man sollte Zeit haben denn der Download ist umfangreich!)
* XCode Command-Line Tools (''pip'' will einiges kompilieren)
* ''git'' (sinnvollerweise auch ein Github Account)
===== Die Installation =====
Ich empfehle die Installation in folgenden Schritten.
Ohne "virtualenv" müllt man sich langsam aber sicher das System voll. Ich möchte eindringlich empfehlen dieses hilfreiche Werkzeug einzusetzen!
==== virtualenv erstellen & aktivieren ====
Macbook:Python Benny$ virtualenv ryu
New python executable in ryu/bin/python
Installing setuptools, pip...done.
Macbook:Python Benny$ source ryu/bin/activate
(ryu)Macbook:Python Benny$
==== Ryu Projekt forken und Upstream zum Originalprojekt herstellen ====
* Github von Ryu
* https://github.com/osrg/ryu
* Wie man ein Projekt auf Github forked ist ausführlich dokumentiert
* https://help.github.com/articles/fork-a-repo/
* https://help.github.com/articles/syncing-a-fork/
(ryu)Macbook:Python Benny$ cd ryu
(ryu)Macbook:ryu Benny$ git clone https://github.com//ryu.git
Cloning into 'ryu'...
remote: Counting objects: 16685, done.
remote: Total 16685 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (16685/16685), 18.83 MiB | 638.00 KiB/s, done.
Resolving deltas: 100% (12161/12161), done.
Checking connectivity... done.
(ryu)Macbook:ryu Benny$ git remote add upstream https://github.com/osrg/ryu.git
(ryu)Macbook:ryu Benny$ git remote -v
origin https://github.com//ryu.git (fetch)
origin https://github.com//ryu.git (push)
upstream https://github.com/osrg/ryu.git (fetch)
upstream https://github.com/osrg/ryu.git (push)
==== lxml zuerst installieren ====
Es ist wichtig das Kommando wie unten beschrieben einzugeben! ''lxml'' kompiliert sonst (zumindest bei mir) nicht!
(ryu)Macbook:ryu Benny$ STATIC_DEPS=true pip install lxml
Downloading/unpacking lxml
Downloading lxml-3.3.5.tar.gz (3.5MB): 3.5MB downloaded
Running setup.py (path:/Users/Benny/Python/ryu/build/lxml/setup.py) egg_info for package lxml
(... Jede Menge CLI-Kilometer ausgelassen ...)
Successfully installed lxml
Cleaning up...
==== Ryu installieren ====
(ryu)Macbook:ryu Benny$ python ./setup.py install
Installed /Users/Benny/Python/ryu/ryu/pbr-0.10.0-py2.7.egg
running install
Downloading/unpacking eventlet
Downloading eventlet-0.15.2-py2.py3-none-any.whl (150kB): 150kB downloaded
Requirement already satisfied (use --upgrade to upgrade): lxml in /Users/Benny/Python/ryu/lib/python2.7/site-packages
Downloading/unpacking msgpack-python>=0.3.0
Downloading msgpack-python-0.4.2.tar.gz (114kB): 114kB downloaded
Running setup.py (path:/Users/Benny/Python/ryu/build/msgpack-python/setup.py) egg_info for package msgpack-python
(... Jede Menge CLI-Kilometer ausgelassen ...)
running install_data
creating /Users/Benny/Python/ryu/etc
creating /Users/Benny/Python/ryu/etc/ryu
copying etc/ryu/ryu.conf -> /Users/Benny/Python/ryu/etc/ryu
running install_egg_info
Copying ryu.egg-info to /Users/Benny/Python/ryu/lib/python2.7/site-packages/ryu-3.14-py2.7.egg-info
running install_scripts
Installing ryu-manager script to /Users/Benny/Python/ryu/bin
Installing ryu script to /Users/Benny/Python/ryu/bin
(ryu)Macbook:ryu Benny$
=== Mögliche Fehlermeldung beim ersten Start! ===
(ryu)Macbook:ryu Benny$ ryu-manager ryu/app/simple_switch_13.py
Traceback (most recent call last):
File "/Users/Benny/Python/ryu/bin/ryu-manager", line 5, in
from pkg_resources import load_entry_point
File "/Users/Benny/Python/ryu/lib/python2.7/site-packages/pkg_resources.py", line 2697, in
working_set.require(__requires__)
File "/Users/Benny/Python/ryu/lib/python2.7/site-packages/pkg_resources.py", line 669, in require
needed = self.resolve(parse_requirements(requirements))
File "/Users/Benny/Python/ryu/lib/python2.7/site-packages/pkg_resources.py", line 572, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pbr>=0.6,!=0.7,<1.0
=== Lösung ===
(ryu)Macbook:ryu Benny$ pip install pbr
Downloading/unpacking pbr
Downloading pbr-0.10.0-py2.py3-none-any.whl (63kB): 63kB downloaded
Requirement already satisfied (use --upgrade to upgrade): pip in /Users/Benny/Python/ryu/lib/python2.7/site-packages (from pbr)
Installing collected packages: pbr
Successfully installed pbr
Cleaning up...
===== Ryu in Aktion! =====
(ryu)Macbook:ryu Benny$ ryu-manager --verbose ryu/app/simple_switch_13.py
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
BRICK SimpleSwitch13
CONSUMES EventOFPSwitchFeatures
CONSUMES EventOFPPacketIn
BRICK ofp_event
PROVIDES EventOFPSwitchFeatures TO {'SimpleSwitch13': set(['config'])}
PROVIDES EventOFPPacketIn TO {'SimpleSwitch13': set(['main'])}
CONSUMES EventOFPEchoRequest
CONSUMES EventOFPSwitchFeatures
CONSUMES EventOFPErrorMsg
CONSUMES EventOFPPortDescStatsReply
CONSUMES EventOFPHello
TODO: Hier noch erweitern .. :)