RYU Faucet (SDN Controller) on Raspberry Pi
I think I finally have a use for one of my 3 Raspberry Pi computers - an SDN controller.
I have an Allied Telesis switch about to arrive, which I will be using as an SDN device - buzzy and buzzwordy at the same time. I was planning on running Ryu-Faucet as my controller stack on a VM, but I had the genius move of moving my R730 server into another location - thinking the SDN controller should be near to the switch for noob-level troubleshooting (despite that being kind of against the spirit of SDN…) - I went with the nextmost NIX thing I could find - a Raspberry Pi 2 running Ubuntu 14.04 LTS.
So - how to go about doing this from a fresh Ubuntu install? Some garbled notes to follow - but first up - I am not a software developer, I can barely code to save myself - so using things like PyPi are new to me.
First up - an apt-get update / upgrade (I run everything from root for this process)
<br />
james@ubuntu:/# sudo su<br />
root@ubuntu:/home/ubuntu# apt-get update<br />
root@ubuntu:/home/ubuntu# apt-get upgrade<br />
That gets us up to date. On my home connection with the Raspberry Pi 2 it took about 15 minutes to complete. Next up, installing enough Python tools to install more Python tools.. Ubuntu 14.04 LTS comes with Python 2.7 by default - so that’s a good start.
Now, we grab Pip (more deets here):
<br />
root@ubuntu:/home/ubuntu# wget https://bootstrap.pypa.io/get-pip.py<br />
root@ubuntu:/home/ubuntu# python get-pip.py<br />
Cool, so that grabs Pip for us. Note: I ran get-pip.py twice, the first time it installed an old version, then it smoothly upgraded it (from version 1.5 to version 7.2!).
With Pip installed, we’re good to go installing Ryu-Faucet.. Except not quite. The instructions here don’t account for the fact that we’re not hardened Python devs (and that we’re running on an ARM CPU not an Intel one - I guess).
Grab some extra tools from apt:
root@ubuntu:/home/ubuntu# apt-get install python-dev
Now we can run Pip and pull down the file we want to install (ryu-faucet!):
<br />
root@ubuntu:/home/ubuntu# pip install https://pypi.python.org/packages/source/r/ryu-faucet/ryu-faucet-0.28a.tar.gz
Watch the magic occur!
root@ubuntu:/home/ubuntu# pip show ryu-faucet<br />
---<br />
Metadata-Version: 2.0<br />
Name: ryu-faucet<br />
Version: 0.28a0<br />
Summary: Ryu application to perform Layer 2 switching with VLANs.<br />
Home-page: http://http://openflowsdn.github.io/faucet<br />
Author: Shivaram Mysore, OpenflowSDN.Org<br />
Author-email: faucet-dev@OpenflowSDN.Org<br />
License: Apache License 2.0<br />
Location: /usr/local/lib/python2.7/dist-packages<br />
Requires: ryu, pyyaml
Cool. Next time, we’ll configure the Pi’s single ethernet interface to handle management and SDN controller duties and fling some packets across the data plane.