Fix: Installation description/scripts pointing to outdated containernet
[osm/vim-emu.git] / README.md
1 [![Build Status](http://jenkins.sonata-nfv.eu/buildStatus/icon?job=son-emu)](http://jenkins.sonata-nfv.eu/job/son-emu)
2
3 # son-emu
4 This is the repository of [SONATA's](http://sonata-nfv.eu) emulation platform.
5
6 This emulation platform was created to support network  service developers to locally prototype and test complete network service chains in realistic end-to-end multi-PoP scenarios. It allows the direct execution of real network functions, packaged as Docker containers, in emulated network topologies running locally on the network service developer's machine.
7
8 ### Cite this work
9
10 If you use son-emu for your research and/or other publications, please cite the following paper to reference our work:
11
12 * Manuel Peuster, Holger Karl, and Steven van Rossem. "**MeDICINE: Rapid Prototyping of Production-Ready Network Services in Multi-PoP Environments.**" to appear in IEEE Conference on Network Function Virtualization and Software Defined Network (NFV-SDN), 2016.
13   * Pre-print online: http://arxiv.org/abs/1606.05995
14
15 A short demo that showcases son-emu together with its dummy gatekeeper is available [here](https://www.youtube.com/watch?v=ZANz97pV9ao).
16
17 ### Development
18
19 To install the emulator package in development mode, do:
20
21 * `python setup.py develop`
22
23 #### Folder Structure
24
25 * `ansible` Install scripts
26 * `misc` Example packages and VNFs
27 * `src` 
28         * `emuvim` Emulator components
29                 * `api` API endpoint implementations
30                         * `rest` REST API for son-emu-cli
31                 * `sonata` Dummy gatekeeper API
32                 * `cli` Command line client to control the emulator
33                 * `dcemulator` Emulator core
34                         * `resourcemodel` Resource limitation models
35         * `examples` Example topology scripts
36         * `test` Test scripts
37 * `utils` Helper scripts for SONATA's CI/CD setup
38
39
40 #### Run Unit Tests
41 * `cd ~/son-emu`
42 * `sudo py.test -v src/emuvim/test/unittests`
43
44
45 ### Building
46
47 Son-emu is entirely written in Python and does not require a special build process. Please check the [Installation](https://github.com/sonata-nfv/son-emu#installation) section for more details about the installation of son-emu.
48
49 ### Dependencies
50
51 Son-emu requires the latest version of [Containernet](https://github.com/mpeuster/containernet) to be installed on the system.
52
53 Despite of this son-emu has the following dependencies:
54
55 * [argparse](https://pypi.python.org/pypi/argparse) >= 1.4.0 (Python software foundation License)
56 * [docker-py](https://pypi.python.org/pypi/docker-py) == 1.7.1(Apache 2.0)
57 * [Flask](https://pypi.python.org/pypi/Flask) >= 0.11 (BSD)
58 * [flask_restful](https://pypi.python.org/pypi/Flask-RESTful) >= 0.3 (BSD)
59 * [networkx](https://pypi.python.org/pypi/networkx/) >= 1.11  (BSD)
60 * [oslo.config](http://docs.openstack.org/developer/oslo.config/) >= 3.9.0  (Apache 2.0)
61 * [prometheus_client](https://pypi.python.org/pypi/prometheus_client) >= 0.0.13 (Apache 2.0)
62 * [pyaml](https://pypi.python.org/pypi/pyaml) >=15.8.2 (WTFPL)
63 * [pytest-runner](https://pypi.python.org/pypi/pytest-runner) >= 2.8 (MIT)
64 * [pytest](https://pypi.python.org/pypi/pytest) >= 2.9 (MIT)
65 * [requests](https://pypi.python.org/pypi/requests) >= 2.10 (Apache 2.0)
66 * [ryu](https://pypi.python.org/pypi/ryu/4.4) >= 4.4 (Apache 2.0)
67 * [six](https://pypi.python.org/pypi/six/) >=1.9 (MIT)
68 * [tabulate](https://pypi.python.org/pypi/tabulate) >= 0.7.5 (public domain)
69 * [urllib3](https://pypi.python.org/pypi/urllib3) >= 1.15 (MIT)
70 * [zerorpc](http://www.zerorpc.io) >= 0.5.2 (MIT)
71
72 ### Contributing
73 Contributing to the son-emu is really easy. You must:
74
75 1. Clone [this repository](http://github.com/sonata-nfv/son-emu);
76 2. Work on your proposed changes, preferably through submiting [issues](https://github.com/sonata-nfv/son-emu/issues);
77 3. Submit a Pull Request;
78 4. Follow/answer related [issues](https://github.com/sonata-nfv/son-emu/issues) (see Feedback-Chanel, below).
79
80 ## Installation
81 There are two ways to install and use son-emu. The simple one is to use Vagrant to create a VirtualBox-based VM on you machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 14.04 LTS and is done by a ansible playbook.
82
83 ### Vagrant Installation
84
85 * Request VirtualBox and Vagrant to be installed on the system.
86 * `git clone https://github.com/sonata-nfv/son-emu.git`
87 * `cd ~/son-emu`
88 * `vagrant up`
89 * `vagrant ssh` to enter the new VM in which the emulator is installed.
90
91 Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper. The dummy-gatekeeper's default port 5000 is forwarded to the host machine and can be accessed from it by using, e.g., curl http://127.0.0.1:5000/packages.
92
93 ### Ansible Installation
94
95 * Requires: Ubuntu 14.04 LTS
96 * `sudo apt-get install ansible git aptitude`
97 * `sudo vim /etc/ansible/hosts`
98 * Add: `localhost ansible_connection=local`
99
100 #### 1. Containernet
101
102 * `cd`
103 * `git clone https://github.com/containernet/containernet.git`
104 * `cd ~/containernet/ansible`
105 * `sudo ansible-playbook install.yml`
106 * Wait (and have a coffee) ...
107
108 #### 2. Emulator
109
110 * `cd`
111 * `git clone https://github.com/sonata-nfv/son-emu.git`
112 * `cd ~/son-emu/ansible`
113 * `sudo ansible-playbook install.yml`
114
115 ## Usage
116
117 ### Examples
118 #### Manual Usage Example:
119
120 This simple example shows how to start the emulator with a simple topology (terminal 1) and how to start (terminal 2) some empty VNF containers in the emulated datacenters (PoPs) by using the son-emu-cli.
121
122 * First terminal (start the emulation platform):
123  * `sudo python src/emuvim/examples/simple_topology.py`
124 * Second terminal:
125  * `son-emu-cli compute start -d datacenter1 -n vnf1`
126  * `son-emu-cli compute start -d datacenter1 -n vnf2`
127  * `son-emu-cli compute list`
128 * First terminal:
129  * `containernet> vnf1 ifconfig`
130  * `containernet> vnf1 ping -c 2 vnf2`
131
132 #### Dummy Gatekeeper Example:
133
134 This example shows how to deploy a SONATA example package in the emulator using the dummy gatekeeper.
135
136 * First terminal (start the emulation platform):
137  * `sudo python src/emuvim/examples/sonata_y1_demo_topology_1.py`
138 * Second terminal (deploy the example package):
139  * Upload: `curl -i -X POST -F package=@sonata-demo-docker.son http://127.0.0.1:5000/packages`
140  * Instantiate: `curl -X POST http://127.0.0.1:5000/instantiations -d "{}"`
141  * Verify that service runs: `son-emu-cli compute list`
142
143 Note: The [son-push](https://github.com/mpeuster/son-cli) tool can be used instead of CURL.
144
145
146 ### Further Documentation
147 * [Full CLI command documentation](https://github.com/sonata-nfv/son-emu/wiki/CLI-Command-Overview)
148 * [Requirements for Docker containers executed by the emulator](https://github.com/sonata-nfv/son-emu/wiki/Container-Requirements)
149
150 ## License
151
152 Son-emu is published under Apache 2.0 license. Please see the LICENSE file for more details.
153
154 ## Useful Links
155
156 * [Mininet](http://mininet.org)
157
158 ---
159 #### Lead Developers
160
161 The following lead developers are responsible for this repository and have admin rights. They can, for example, merge pull requests.
162
163 * Manuel Peuster (https://github.com/mpeuster)
164 * Steven Van Rossem (https://github.com/stevenvanrossem)
165
166 #### Contributors
167
168 * Hadi Razzaghi Kouchaksaraei (https://github.com/hadik3r)
169 * Wouter Tavernier (https://github.com/wtaverni)
170 * Geoffroy Chollon (https://github.com/cgeoffroy)
171
172 #### Feedback-Chanel
173
174 * You may use the mailing list [sonata-dev@lists.atosresearch.eu](mailto:sonata-dev@lists.atosresearch.eu)
175 * [GitHub issues](https://github.com/sonata-nfv/son-emu/issues)