Mininet Installation/Configuration Notes Mininet 1.0.0 --- The supported installation methods for Mininet are 1) using a pre-built VM image, and 2) native installation on Ubuntu or Debian. (Other distributions may be supported in the future - if you would like to contribute an installation script, we would welcome it!) 1. Easiest "install" - use our pre-built VM image! The easiest way to get Mininet running is to start with one of our pre-built virtual machine images from http://openflow.org/mininet Boot up the VM image, log in, and follow the instructions on the wiki page. An additional advantage of using the VM image is that it doesn't mess with your native OS installation or damage it in any way. 2. Native installation (experimental!) for Ubuntu 10.04 LTS If you are running Ubuntu 10.04 LTS (or possibly Debian 5), you may be able to use our handy install.sh script, which is in mininet/util. WARNING: USE AT YOUR OWN RISK! install.sh is a bit intrusive and may possibly damage your OS and/or home directory, by creating/modifying several directories such as mininet, openflow, openvswitch and noxcore. Although we hope it won't do anything completely terrible, you may want to look at the script before you run it, and you should make sure your system and home directory are backed up just in case! To install ALL of the software which we use for OpenFlow tutorials, you may use $ mininet/util/install.sh This takes about 20-30 minutes. Alternately, you can install just the pieces you need. We recommend the following steps, in order: [a) On Debian 5, first install a Mininet-compatible kernel: $ mininet/util/install.sh -k Reboot and run 'uname -r' to make sure you're running the new kernel.] b) Install mininet and its dependencies: $ mininet/util/install.sh -n c) Install OpenFlow 1.0 and associated useful software $ mininet/util/install.sh -f d) Install Open vSwitch and its kernel module $ mininet/util/install.sh -vm e) If you wish to install the version of NOX we use in the tutorial: $ mininet/util/install.sh -x Note: NOX development is progressing over time, so after you complete the tutorial you may wish to install the latest and greatest NOX from noxrepo.org. Good luck! Some additional installation notes are provided below, for the brave and/or Linux-savvy, or those who are trying to understand what is installed and why. p.s. Note that only one instance of Mininet is currently supported on a single machine - that's one reason we recommend using a VM to run it. --- Mininet Manual Installation Notes These installation notes assume you understand how to do things like compile kernels, apply patches, configure networks, write code, etc.. If this is unfamiliar territory, or if you run into trouble, we recommend using one of our pre-built virtual machine images (see above.) If you wish to try to create a VM to run Mininet, you may also wish to look at the Wiki page: http://openflow.org/foswiki/bin/view/OpenFlow/MininetVMCreationNotes 0. Obtaining Mininet If you're reading this, you've already done it, but the command to download mininet is: git clone git://openflow.org/mininet.git 1. Core Mininet installation The core Mininet installation requires gcc, make, python, and setuptools. On Ubuntu and Debian you may install them with: # aptitude install gcc make python setuptools To install Mininet itself, with root privileges: # cd mininet # make install This places the mininet package in /usr/lib/python-*/site-packages/, so that 'import mininet' will work, and installs the primary mn script (mn) as well as its helper utility (mnexec.) On Ubuntu and Debian, Mininet's dependencies and core files may also be installed using mininet/util/install.sh -n 2. Installation script for Ubuntu/Debian Lenny If you are running Ubuntu 10.04 or Debian Lenny, you may be able to use the util/install.sh script to install a compatible Linux kernel as well as other software including the OpenFlow reference implementation, the Open vSwitch switch implementation, and the NOX OpenFlow controller. Many different installation options are possible by passing different options to install.sh; install.sh -h lists them all. Assuming the mininet source tree is installed in ~/mininet, the steps to run install.sh to install EVERYTHING we use for OpenFlow tutorials are: % cd % time ~/mininet/util/install.sh # installs tons of stuff % sudo reboot # to load new kernel % ~/mininet/util/install.sh -c # to clean out unneeded kernel stuff This installs a lot of useful software, but it will take a while (30 minutes or more, depending on your network connection, computer, etc..) Probably the minimal semi-useful configuration would be to install Mininet itself, kernel support if necessary, and either the reference OpenFlow switch or Open vSwitch. This could be installed as follows: % sudo ~/mininet/util/install.sh -knvm Respectively, this installs kernel support, core mininet dependencies, Open vSwitch, and the Open vSwitch kernel module. If a new kernel was installed, then a reboot may be required. If install.sh cannot be used for some reason (e.g. you're on Fedora or some other Linux - please don't say CentOS) or if you don't want to install all of these components (they're useful!), the kernel and OpenFlow software requirements are described in steps [3] and [4], which follow. If you successfully used install.sh, congratulations! You're basically done. Proceed to step [6] for additional advice. 3. Linux Kernel requirements Mininet requires a kernel built with network namespace support enabled, i.e. with CONFIG_NET_NS=Y, such as the kernel shipped with Ubuntu 10.04 LTS, currently 2.6.32. On Ubuntu 10.04, you should not need to install or build a custom kernel, although 2.6.33+ is faster at tearing down virtual ethernet pairs. For Ubuntu and Debian, we provide a 2.6.33 kernel package which you may be able to install using "util/install.sh -k". Note our kernel package requires an ext2 or ext3 root file system, so it won't work if you have a default Ubuntu install, which uses ext4. If your kernel wasn't compiled with CONFIG_NET_NS=Y, you will need to build and install a kernel that does! >= 2.6.33 works better, but may be harder to get working, depending on your Linux distribution. A script for building Debian packages for 2.6.33.1 is provided in mininet/util/kbuild. You may wish to read it, as it applies patches to enable 2.6.33.1 to build under debian-stable, and to enable the tun driver to work correctly with Mininet. Earlier kernels (e.g. 2.6.29) work with CONFIG_NET_NS enabled and no additional patches, but are much slower at removing veth interfaces, resulting in much slower switch shutdown. For scalable configurations, you might need to increase some of your kernel limits. Sample params are in util/sysctl_addon, which can be appended to /etc/sysctl.conf (and modified as necessary for your desired configuration): sudo su -c "cat sysctl_addon >> /etc/sysctl.conf" To save the config change, run: sudo sysctl -p 4. OpenFlow software and configuration requirements Mininet requires either the reference OpenFlow switch implementation (from openflowswitch.org) or Open vSwitch (openvswitch.org) to be installed. "make test" requires the reference user space implementations as well as Open vSwitch. Note the reference kernel implementation is not currently included in OpenFlow 1.0. On Ubuntu and Debian, the install.sh script may be used with the '-f' option to install the OpenFlow reference implementation, the '-v' option to build Open vSwitch, and the '-m' option to install the Open vSwitch kernel module into /lib/modules (note: you must build Open vSwitch first!) Mininet will automatically load and remove kernel module dependencies for supported switch types, using modprobe and rmmod - but these modules must be in a location where modprobe can find them (e.g. something like /lib/modules/`uname -r`/kernel/drivers/net/) The reference OpenFlow controller (controller(8)) only supports 16 switches by default! If you wish to run a network with more than 16 switches, please recompile controller(8) with larger limits, or use a different controller such as nox. A patch to controller(8) is included as util/openflow-patches/controller.patch. 5. Other software dependencies On Ubuntu and Debian, other Mininet dependencies may be installed using the '-n' option of the install.sh script. To run the iperf test, you need to install iperf: sudo aptitude/yum install iperf We assume you already have ping installed. ;-) To use xterm or sshd with Mininet, you need the following: sudo aptitude/yum install sshd xterm screen Some examples may have additional requirements - consult the specific example file for details. The install.sh script has an '-x' option to install the version of NOX from the OpenFlow tutorial. 6. Other notes and recommendations If you did not install certain useful packages and you wish to later, it may be possible to install them using install.sh. Mininet should be run either on a machine with no other important processes, or on a virtual machine (recommended!) Multiple concurrent Mininet instances are not supported! Good luck! --- Historical information on OpenFlow 0.8.9 and the reference kernel module: The kernel reference implementation has been deprecated, but it may be possible to get it work with Mininet. To switch to the most recent OpenFlow 0.8.9 release branch (the most recent one with full NOX support and kernel datapath support) in your OpenFlow git tree: git checkout -b release/0.8.9 remotes/origin/release/0.8.9 A patch to enable datapath.c to compile with recent kernels is included in util/openflow-patches/datapath.patch. In OpenFlow 1.0, switch port numbering starts at 1 (for better or for worse.) To run with previous versions of OpenFlow, it may be necessary to change SWITCH_PORT_BASE from 1 to 0 in node.py.