blob: 5dc7597c164721c9327911f22fa38e22b991ed99 [file] [log] [blame]
Ashlesh Gawande6c86e302019-09-17 22:27:05 -05001Install
2=======
3
4Prerequisites
5-------------
6
awlane73add712024-08-12 21:49:00 -05007Mini-NDN is officially supported on the following Linux distributions:
Junxiao Shi48ada892021-11-04 09:02:21 -06008
awlane73add712024-08-12 21:49:00 -05009- Ubuntu 22.04 (recommended)
Junxiao Shi48ada892021-11-04 09:02:21 -060010- Debian 11 (WiFi scenario does not work)
11- Fedora 33 (WiFi scenario does not work)
12
13You must have sudo privileges to install and run Mini-NDN.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050014
awlane0eb4ca42025-07-02 17:28:32 -050015Ubuntu 20.04 LTS is no longer supported as of v0.8.0, but users may still use the v0.7.0 release.
16
17Ubuntu 24.04 LTS is not currently supported due to issues with required libraries no longer being updated.
18
awlane73add712024-08-12 21:49:00 -050019Using Docker
20------------
21
Davide Pesaventoef240762025-02-21 21:42:10 -050022You can use the latest image from `GitHub Container Registry
Davide Pesavento750d0402025-02-25 16:50:50 -050023<https://github.com/named-data/mini-ndn/pkgs/container/mini-ndn>`__:
24
25.. code-block:: sh
Davide Pesavento82cc17a2025-02-17 18:30:05 -050026
Davide Pesavento28a09122025-02-18 17:50:20 -050027 docker run -it --cpus=4 --memory=4g --privileged \
28 -v /lib/modules:/lib/modules \
Davide Pesaventoef240762025-02-21 21:42:10 -050029 ghcr.io/named-data/mini-ndn
awlane73add712024-08-12 21:49:00 -050030
31Building your own Docker image
32------------------------------
33
34The provided Dockerfile can be used to build an image from scratch. To build with the Dockerfile:
Davide Pesavento28a09122025-02-18 17:50:20 -050035
Davide Pesavento750d0402025-02-25 16:50:50 -050036- Clone the repository and type:
37
38 .. code-block:: sh
awlane73add712024-08-12 21:49:00 -050039
40 docker build -t minindn .
41
Davide Pesavento750d0402025-02-25 16:50:50 -050042- You can then access the container through shell with:
43
44 .. code-block:: sh
awlane73add712024-08-12 21:49:00 -050045
Davide Pesavento28a09122025-02-18 17:50:20 -050046 docker run -it --cpus=4 --memory=4g --privileged \
awlane73add712024-08-12 21:49:00 -050047 -v /lib/modules:/lib/modules \
Davide Pesavento28a09122025-02-18 17:50:20 -050048 minindn
awlane73add712024-08-12 21:49:00 -050049
50Additional recommendations
51--------------------------
Davide Pesavento82cc17a2025-02-17 18:30:05 -050052
Davide Pesavento28a09122025-02-18 17:50:20 -050053- It is recommended to set reasonable constraints on memory (``--memory``) and CPU cores (``--cpus``),
54 especially on less powerful or non-dedicated systems.
55- ``--privileged`` is mandatory for Mininet to utilize the virtual switch.
56- The container working directory is ``/mini-ndn``, which contains the installation and examples.
57- The GUI may not work due to docker and xterm setup issues and is independent from Mini-NDN. If you intend
58 to run the GUI, pass ``-e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix`` to the ``docker run`` command.
awlane73add712024-08-12 21:49:00 -050059
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050060Using Vagrantfile
61-----------------
62
awlane58a83f62025-05-23 09:44:33 -050063With Vagrant installed, call ``vagrant up`` from a shell in the ``vagrant`` directory which will bring up
64an Ubuntu 22.04 virtual machine with Mini-NDN and all its dependencies installed on it. Please make sure to
65tweak the CPU core count (default 4 cores) and RAM (default 4GB) according to your needs before doing
66``vagrant up``. Mini-NDN can be found in ``/home/vagrant/mini-ndn``. A README with more information can also
67be found at ``vagrant/README.md``
68`(link to README on Github) <https://github.com/named-data/mini-ndn/blob/master/vagrant/README.md>`__.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050069
70Using install.sh
71----------------
72
Junxiao Shi48ada892021-11-04 09:02:21 -060073Mini-NDN has the following dependencies:
74
awlane73add712024-08-12 21:49:00 -050075- `NDN Forwarding Daemon (NFD) <https://docs.named-data.net/NFD/current/>`_
76- `Named Data Link State Routing (NLSR) <https://docs.named-data.net/NLSR/current/>`_
Junxiao Shi48ada892021-11-04 09:02:21 -060077- `NDN Essential Tools (ndn-tools) <https://github.com/named-data/ndn-tools>`_
78- `NDN Traffic Generator <https://github.com/named-data/ndn-traffic-generator>`_
79- `infoedit <https://github.com/NDN-Routing/infoedit>`_
Davide Pesavento82cc17a2025-02-17 18:30:05 -050080- `Mininet <https://mininet.org/>`_
Junxiao Shi48ada892021-11-04 09:02:21 -060081- `Mininet-WiFi <https://mininet-wifi.github.io/>`_ (optional)
82
83To install Mini-NDN and its dependencies, clone this repository and run:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050084
Davide Pesavento750d0402025-02-25 16:50:50 -050085.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050086
Junxiao Shi48ada892021-11-04 09:02:21 -060087 ./install.sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050088
Junxiao Shi48ada892021-11-04 09:02:21 -060089The script accepts various command line flags.
90Some notable flags are:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050091
Junxiao Shi48ada892021-11-04 09:02:21 -060092- ``-y`` skips interactive confirmation before installation.
Davide Pesavento28a09122025-02-18 17:50:20 -050093- ``--ppa`` prefers installing NDN software from the `named-data PPA <https://launchpad.net/~named-data/+archive/ubuntu/ppa>`__.
Junxiao Shi48ada892021-11-04 09:02:21 -060094 This shortens installation time by downloading binary packages, but is only available on Ubuntu.
95- ``--source`` prefers installing NDN software from source code.
awlaneeda7e072024-10-27 15:52:35 -050096- ``--use-existing`` will only install dependencies not already in the executable path.
Junxiao Shi48ada892021-11-04 09:02:21 -060097- ``--dummy-keychain`` patches ndn-cxx to use an in-memory dummy KeyChain, which reduces CPU overhead
98 and allows you to scale up Mini-NDN experiments. Large Mini-NDN experiments would run significantly
99 faster after applying this patch. However, your experiments cannot use any NDN security related
100 features (signatures, verifier, access control, etc).
101- ``--no-wifi`` skips Mininet-WiFi dependency.
102 Currently Mininet-WiFi only works on Ubuntu, so that you must specify this option when installing on other distros.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500103
Junxiao Shi48ada892021-11-04 09:02:21 -0600104You can see all command line flags by running:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500105
Davide Pesavento750d0402025-02-25 16:50:50 -0500106.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500107
Junxiao Shi48ada892021-11-04 09:02:21 -0600108 ./install.sh -h
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500109
Junxiao Shi48ada892021-11-04 09:02:21 -0600110The script uses ``setup.py develop`` to point the system install of Python packages to the codebase
111directory. Therefore, you can modify ``mininet``, ``mininet-wifi``, and ``mini-ndn``, and the
112changes will be reflected immediately.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500113
Junxiao Shi48ada892021-11-04 09:02:21 -0600114If NDN software is installed from source code (not PPA), the code is downloaded to ``dl`` directory
115under your ``mini-ndn`` clone. If you modify the source code, you need to manually recompile and
116reinstall the software (``./waf && sudo ./waf install``).
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500117
dulalsaurab8c8e6332021-05-21 20:37:03 +0000118
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500119Installing Dependencies
120-----------------------
121
awlane73add712024-08-12 21:49:00 -0500122This section outlines how to install dependencies manually.
Junxiao Shi48ada892021-11-04 09:02:21 -0600123If you used ``install.sh``, you do not need to perform these steps.
124
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500125Mininet
126_______
127
128Mini-NDN is based on Mininet. To install Mininet:
129
Davide Pesavento750d0402025-02-25 16:50:50 -0500130.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500131
132 git clone --depth 1 https://github.com/mininet/mininet.git
133
134After Mininet source is on your system, run the following command to
135install Mininet core dependencies and Open vSwitch:
136
Davide Pesavento750d0402025-02-25 16:50:50 -0500137.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500138
139 ./util/install.sh -nv
140
141To check if Mininet is working correctly, run this test:
142
Davide Pesavento750d0402025-02-25 16:50:50 -0500143.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500144
145 sudo mn --test pingall
146
147This will print out a series of statements that show the test setup and
148the results of the test. Look for ``Results:`` two-thirds of the way
149down where it will indicate the percentage of dropped packets. Your
150results should show "0% dropped (2/2 received)".
151
152NOTE: Mini-NDN, while providing a high level of emulation of hosts,
153requires programs to be installed onto your computer. It will not work
154if they are not installed. If you do not want NDN software installed
155onto your computer, you can use a virtual machine, which can be quite
156simply set up with the provided Vagrantfile.
157
158NDN dependencies
159________________
160
161Each node in Mini-NDN will run the official implementation of NDN
162installed on your system. The following dependencies are needed:
163
awlane73add712024-08-12 21:49:00 -0500164Mini-NDN uses ndn-cxx, NFD, NLSR, and ndn-tools.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500165
awlane73add712024-08-12 21:49:00 -0500166- To install ndn-cxx: https://docs.named-data.net/ndn-cxx/current/INSTALL.html
167- To install NFD: https://docs.named-data.net/NFD/current/INSTALL.html
168- To install NLSR: https://docs.named-data.net/NLSR/current/INSTALL.html
169- To install ndn-tools: https://github.com/named-data/ndn-tools/blob/master/INSTALL.md
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500170
171.. warning::
172 Please do not try to install NDN software from both the source (GitHub) and PPA (apt).
173 It will not work in most cases! If you used ./install.sh -a in the past but now want
174 to use apt, please run ``sudo ./waf uninstall`` in all the NDN projects before proceeding
175 with apt. Similarly, remove from apt if switching to source.
176
awlane73add712024-08-12 21:49:00 -0500177In cases where using NDN security is not important to the results, it is recommended
178to use the dummy keychain patch for ndn-cxx to disable it for improved scalability.
Davide Pesavento28a09122025-02-18 17:50:20 -0500179This patch is located at ``util/patches/ndn-cxx-dummy-keychain.patch``.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500180
181Note that all three of these can be installed from the Named Data PPA.
182Instructions for setting it up can be found in the NFD installation
183instructions. Note that PPA and installs from source **cannot** be
184mixed. You must completely remove PPA installs from the system if switching
185to source and vice-versa.
186
Davide Pesavento28a09122025-02-18 17:50:20 -0500187For PPA installs, if you are using a custom ``nfd.conf`` file in an experiment, you should
188place it in ``/usr/local/etc/ndn/`` rather than ``/etc/ndn/``. This is to avoid a bug with
189the default configuration file for the PPA, which is incompatible with Mini-NDN.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500190
191Infoedit
192________
193
194Infoedit is used to edit configuration files for NFD and NLSR.
195To install infoedit:
196
Davide Pesavento750d0402025-02-25 16:50:50 -0500197.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500198
199 git clone --depth 1 https://github.com/NDN-Routing/infoedit
200 cd infoedit
201 make
202 sudo make install
203
204Verification
205------------
206
207You can execute the following example to bring up the Mini-NDN command line
208with NFD and NLSR running on each node:
209
Davide Pesavento750d0402025-02-25 16:50:50 -0500210.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500211
212 sudo python examples/mnndn.py
213
214You can use these steps to run the sample pingall experiment:
215
2161. Issue the command: ``sudo python examples/nlsr/pingall.py``
2172. When the ``mini-ndn>`` CLI prompt appears, the experiment has
218 finished. On the Mini-NDN CLI, issue the command ``exit`` to exit the
219 experiment.
2203. Issue the command:
221 ``grep -c content /tmp/minindn/*/ping-data/*.txt``. Each file should
222 report a count of 50.
2234. Issue the command:
224 ``grep -c timeout /tmp/minindn/*/ping-data/*.txt``. Each file should
225 report a count of 0.
awlane022b2bf2024-08-28 19:22:46 -0500226
227
228Release Versions
229----------------
230
231We provide a set of shortcuts to install major release versions of NDN
232dependencies from source.
233
234You can install the most recent release using:
235
Davide Pesavento750d0402025-02-25 16:50:50 -0500236.. code-block:: sh
awlane022b2bf2024-08-28 19:22:46 -0500237
238 ./install.sh --source --release=current
239
240You can also select a specified release using:
241
Davide Pesavento750d0402025-02-25 16:50:50 -0500242.. code-block:: sh
awlane022b2bf2024-08-28 19:22:46 -0500243
244 ./install.sh --source --release=[chosen version]
245
awlane022b2bf2024-08-28 19:22:46 -0500246Currently, the compatible versions include:
247
248- ``2024-08``: ndn-cxx 0.9.0, NFD 24.07, NLSR 24.08, PSync 0.5.0,
249 ndn-tools 24.07, and compatible versions of ndn-traffic-generator
awlane749b07a2025-02-05 11:11:05 -0600250 and infoedit.
251
252Using gpsd (Experimental)
Davide Pesavento28a09122025-02-18 17:50:20 -0500253-------------------------
awlane749b07a2025-02-05 11:11:05 -0600254
255The gpsd application included currently is based on in-progress work and
Davide Pesavento28a09122025-02-18 17:50:20 -0500256is not treated as part of the main dependencies. To use it, install ``gpsd``
257and ``nc`` (netcat) from your package manager, if not already present,
Davide Pesavento82cc17a2025-02-17 18:30:05 -0500258to enable the functionality.