Skip to content
Snippets Groups Projects
INSTALL 8.37 KiB
Newer Older
Bob Lantz's avatar
Bob Lantz committed

Preliminary Mininet Installation/Configuration Notes
Bob Lantz's avatar
Bob Lantz committed
Pre-Beta version, August 2010
Bob Lantz's avatar
Bob Lantz committed
---

(Disclaimer: we're still pre-beta - things may be broken!)
Bob Lantz's avatar
Bob Lantz committed

The easiest way to get Mininet running is to start with one of our pre-built 
virtual machine images from:
Bob Lantz's avatar
Bob Lantz committed

http://www.openflowswitch.org/foswiki/bin/view/OpenFlow/MininetGettingStarted

Once you have booted up the VM image, all you need to do to install
Bob Lantz's avatar
Bob Lantz committed
Mininet into it is:
Bob Lantz's avatar
Bob Lantz committed
 git clone git://yuba.stanford.edu/mininet.git
 cd mininet
 sudo make install

At this point, it should be possible to run a simple Mininet configuration
from the command line:

 sudo mn

As an alternative, if you are Linux-savvy, do not wish to use the VM
image, and wish to take on the challenge of installing Mininet and its
dependencies from scratch, the requirements are described below.

---

Mininet Manual Installation Notes
Bob Lantz's avatar
Bob Lantz committed
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://www.openflowswitch.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://yuba.stanford.edu/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:
Bob Lantz's avatar
Bob Lantz committed
  # 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.)
Bob Lantz's avatar
Bob Lantz committed
  On Ubuntu and Debian, Mininet's dependencies and core files may also be 
  installed using mininet/util/install.sh -n
Bob Lantz's avatar
Bob Lantz committed
2. Installation script for Ubuntu/Debian Lenny
Bob Lantz's avatar
Bob Lantz committed

  If you are running Ubuntu 10.04 or Debian Lenny, you may be able to use the
Bob Lantz's avatar
Bob Lantz committed
  util/install.sh script to install a compatible Linux kernel as well as
  other software including the OpenFlow reference implementation, the Open
Bob Lantz's avatar
Bob Lantz committed
  vSwitch switch implementation, and the NOX OpenFlow controller. 
Bob Lantz's avatar
Bob Lantz committed

Bob Lantz's avatar
Bob Lantz committed
  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
Bob Lantz's avatar
Bob Lantz committed
  install.sh to install EVERYTHING we use for OpenFlow tutorials are:
Bob Lantz's avatar
Bob Lantz committed
  
Bob Lantz's avatar
Bob Lantz committed
  % cd
Bob Lantz's avatar
Bob Lantz committed
  % time ~/mininet/util/install.sh  # installs tons of stuff
Bob Lantz's avatar
Bob Lantz committed
  % sudo reboot  # to load new kernel
  % ~/mininet/util/install.sh -c  # to clean out unneeded kernel stuff

Bob Lantz's avatar
Bob Lantz committed
  This installs a lot of useful software, but it will take a while (30
  minutes or more, depending on your network connection, computer, etc..)
Bob Lantz's avatar
Bob Lantz committed
  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.
Bob Lantz's avatar
Bob Lantz committed

Bob Lantz's avatar
Bob Lantz committed
  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
Bob Lantz's avatar
Bob Lantz committed
  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.
      
Bob Lantz's avatar
Bob Lantz committed
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
Bob Lantz's avatar
Bob Lantz committed
  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.
Bob Lantz's avatar
Bob Lantz committed
  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.
    
Bob Lantz's avatar
Bob Lantz committed
  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,
Bob Lantz's avatar
Bob Lantz committed
  resulting in much slower switch shutdown.
  For scalable configurations, you might need to increase some of your
Bob Lantz's avatar
Bob Lantz committed
  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:
Bob Lantz's avatar
Bob Lantz committed
4. OpenFlow software and configuration requirements

  Mininet requires either the reference OpenFlow switch implementation
Bob Lantz's avatar
Bob Lantz committed
  (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!)
Bob Lantz's avatar
Bob Lantz committed
  
Bob Lantz's avatar
Bob Lantz committed
  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
Bob Lantz's avatar
Bob Lantz committed
  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
Bob Lantz's avatar
Bob Lantz committed
  as util/openflow-patches/controller.patch.
Bob Lantz's avatar
Bob Lantz committed
  
Bob Lantz's avatar
Bob Lantz committed
5. Other software dependencies
  On Ubuntu and Debian, other Mininet dependencies may be installed using
  the '-n' option of the install.sh script.

Bob Lantz's avatar
Bob Lantz committed
  To run the iperf test, you need to install iperf:
    sudo aptitude/yum install iperf
  We assume you already have ping installed. ;-)
  
Bob Lantz's avatar
Bob Lantz committed
  To use xterm or sshd with Mininet, you need the following:
    sudo aptitude/yum install sshd xterm screen
    
Bob Lantz's avatar
Bob Lantz committed
  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.
  
Bob Lantz's avatar
Bob Lantz committed
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.
  
Bob Lantz's avatar
Bob Lantz committed
  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.