blob: 9a04804e0f7f9c076d88729442b3337f5317e152 [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 20.04
10- Ubuntu 22.04 (recommended)
11- Ubuntu 24.04
Junxiao Shi48ada892021-11-04 09:02:21 -060012- Debian 11 (WiFi scenario does not work)
13- Fedora 33 (WiFi scenario does not work)
14
15You must have sudo privileges to install and run Mini-NDN.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050016
awlane73add712024-08-12 21:49:00 -050017Using Docker
18------------
19
Davide Pesaventoef240762025-02-21 21:42:10 -050020You can use the latest image from `GitHub Container Registry
Davide Pesavento750d0402025-02-25 16:50:50 -050021<https://github.com/named-data/mini-ndn/pkgs/container/mini-ndn>`__:
22
23.. code-block:: sh
Davide Pesavento82cc17a2025-02-17 18:30:05 -050024
Davide Pesavento28a09122025-02-18 17:50:20 -050025 docker run -it --cpus=4 --memory=4g --privileged \
26 -v /lib/modules:/lib/modules \
Davide Pesaventoef240762025-02-21 21:42:10 -050027 ghcr.io/named-data/mini-ndn
awlane73add712024-08-12 21:49:00 -050028
29Building your own Docker image
30------------------------------
31
32The provided Dockerfile can be used to build an image from scratch. To build with the Dockerfile:
Davide Pesavento28a09122025-02-18 17:50:20 -050033
Davide Pesavento750d0402025-02-25 16:50:50 -050034- Clone the repository and type:
35
36 .. code-block:: sh
awlane73add712024-08-12 21:49:00 -050037
38 docker build -t minindn .
39
Davide Pesavento750d0402025-02-25 16:50:50 -050040- You can then access the container through shell with:
41
42 .. code-block:: sh
awlane73add712024-08-12 21:49:00 -050043
Davide Pesavento28a09122025-02-18 17:50:20 -050044 docker run -it --cpus=4 --memory=4g --privileged \
awlane73add712024-08-12 21:49:00 -050045 -v /lib/modules:/lib/modules \
Davide Pesavento28a09122025-02-18 17:50:20 -050046 minindn
awlane73add712024-08-12 21:49:00 -050047
48Additional recommendations
49--------------------------
Davide Pesavento82cc17a2025-02-17 18:30:05 -050050
Davide Pesavento28a09122025-02-18 17:50:20 -050051- It is recommended to set reasonable constraints on memory (``--memory``) and CPU cores (``--cpus``),
52 especially on less powerful or non-dedicated systems.
53- ``--privileged`` is mandatory for Mininet to utilize the virtual switch.
54- The container working directory is ``/mini-ndn``, which contains the installation and examples.
55- The GUI may not work due to docker and xterm setup issues and is independent from Mini-NDN. If you intend
56 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 -050057
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050058Using Vagrantfile
59-----------------
60
awlane58a83f62025-05-23 09:44:33 -050061With Vagrant installed, call ``vagrant up`` from a shell in the ``vagrant`` directory which will bring up
62an Ubuntu 22.04 virtual machine with Mini-NDN and all its dependencies installed on it. Please make sure to
63tweak the CPU core count (default 4 cores) and RAM (default 4GB) according to your needs before doing
64``vagrant up``. Mini-NDN can be found in ``/home/vagrant/mini-ndn``. A README with more information can also
65be found at ``vagrant/README.md``
66`(link to README on Github) <https://github.com/named-data/mini-ndn/blob/master/vagrant/README.md>`__.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050067
68Using install.sh
69----------------
70
Junxiao Shi48ada892021-11-04 09:02:21 -060071Mini-NDN has the following dependencies:
72
awlane73add712024-08-12 21:49:00 -050073- `NDN Forwarding Daemon (NFD) <https://docs.named-data.net/NFD/current/>`_
74- `Named Data Link State Routing (NLSR) <https://docs.named-data.net/NLSR/current/>`_
Junxiao Shi48ada892021-11-04 09:02:21 -060075- `NDN Essential Tools (ndn-tools) <https://github.com/named-data/ndn-tools>`_
76- `NDN Traffic Generator <https://github.com/named-data/ndn-traffic-generator>`_
77- `infoedit <https://github.com/NDN-Routing/infoedit>`_
Davide Pesavento82cc17a2025-02-17 18:30:05 -050078- `Mininet <https://mininet.org/>`_
Junxiao Shi48ada892021-11-04 09:02:21 -060079- `Mininet-WiFi <https://mininet-wifi.github.io/>`_ (optional)
80
81To install Mini-NDN and its dependencies, clone this repository and run:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050082
Davide Pesavento750d0402025-02-25 16:50:50 -050083.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050084
Junxiao Shi48ada892021-11-04 09:02:21 -060085 ./install.sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050086
Junxiao Shi48ada892021-11-04 09:02:21 -060087The script accepts various command line flags.
88Some notable flags are:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050089
Junxiao Shi48ada892021-11-04 09:02:21 -060090- ``-y`` skips interactive confirmation before installation.
Davide Pesavento28a09122025-02-18 17:50:20 -050091- ``--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 -060092 This shortens installation time by downloading binary packages, but is only available on Ubuntu.
93- ``--source`` prefers installing NDN software from source code.
awlaneeda7e072024-10-27 15:52:35 -050094- ``--use-existing`` will only install dependencies not already in the executable path.
Junxiao Shi48ada892021-11-04 09:02:21 -060095- ``--dummy-keychain`` patches ndn-cxx to use an in-memory dummy KeyChain, which reduces CPU overhead
96 and allows you to scale up Mini-NDN experiments. Large Mini-NDN experiments would run significantly
97 faster after applying this patch. However, your experiments cannot use any NDN security related
98 features (signatures, verifier, access control, etc).
99- ``--no-wifi`` skips Mininet-WiFi dependency.
100 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 -0500101
Junxiao Shi48ada892021-11-04 09:02:21 -0600102You can see all command line flags by running:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500103
Davide Pesavento750d0402025-02-25 16:50:50 -0500104.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500105
Junxiao Shi48ada892021-11-04 09:02:21 -0600106 ./install.sh -h
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500107
Junxiao Shi48ada892021-11-04 09:02:21 -0600108The script uses ``setup.py develop`` to point the system install of Python packages to the codebase
109directory. Therefore, you can modify ``mininet``, ``mininet-wifi``, and ``mini-ndn``, and the
110changes will be reflected immediately.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500111
Junxiao Shi48ada892021-11-04 09:02:21 -0600112If NDN software is installed from source code (not PPA), the code is downloaded to ``dl`` directory
113under your ``mini-ndn`` clone. If you modify the source code, you need to manually recompile and
114reinstall the software (``./waf && sudo ./waf install``).
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500115
dulalsaurab8c8e6332021-05-21 20:37:03 +0000116
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500117Installing Dependencies
118-----------------------
119
awlane73add712024-08-12 21:49:00 -0500120This section outlines how to install dependencies manually.
Junxiao Shi48ada892021-11-04 09:02:21 -0600121If you used ``install.sh``, you do not need to perform these steps.
122
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500123Mininet
124_______
125
126Mini-NDN is based on Mininet. To install Mininet:
127
Davide Pesavento750d0402025-02-25 16:50:50 -0500128.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500129
130 git clone --depth 1 https://github.com/mininet/mininet.git
131
132After Mininet source is on your system, run the following command to
133install Mininet core dependencies and Open vSwitch:
134
Davide Pesavento750d0402025-02-25 16:50:50 -0500135.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500136
137 ./util/install.sh -nv
138
139To check if Mininet is working correctly, run this test:
140
Davide Pesavento750d0402025-02-25 16:50:50 -0500141.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500142
143 sudo mn --test pingall
144
145This will print out a series of statements that show the test setup and
146the results of the test. Look for ``Results:`` two-thirds of the way
147down where it will indicate the percentage of dropped packets. Your
148results should show "0% dropped (2/2 received)".
149
150NOTE: Mini-NDN, while providing a high level of emulation of hosts,
151requires programs to be installed onto your computer. It will not work
152if they are not installed. If you do not want NDN software installed
153onto your computer, you can use a virtual machine, which can be quite
154simply set up with the provided Vagrantfile.
155
156NDN dependencies
157________________
158
159Each node in Mini-NDN will run the official implementation of NDN
160installed on your system. The following dependencies are needed:
161
awlane73add712024-08-12 21:49:00 -0500162Mini-NDN uses ndn-cxx, NFD, NLSR, and ndn-tools.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500163
awlane73add712024-08-12 21:49:00 -0500164- To install ndn-cxx: https://docs.named-data.net/ndn-cxx/current/INSTALL.html
165- To install NFD: https://docs.named-data.net/NFD/current/INSTALL.html
166- To install NLSR: https://docs.named-data.net/NLSR/current/INSTALL.html
167- To install ndn-tools: https://github.com/named-data/ndn-tools/blob/master/INSTALL.md
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500168
169.. warning::
170 Please do not try to install NDN software from both the source (GitHub) and PPA (apt).
171 It will not work in most cases! If you used ./install.sh -a in the past but now want
172 to use apt, please run ``sudo ./waf uninstall`` in all the NDN projects before proceeding
173 with apt. Similarly, remove from apt if switching to source.
174
awlane73add712024-08-12 21:49:00 -0500175In cases where using NDN security is not important to the results, it is recommended
176to use the dummy keychain patch for ndn-cxx to disable it for improved scalability.
Davide Pesavento28a09122025-02-18 17:50:20 -0500177This patch is located at ``util/patches/ndn-cxx-dummy-keychain.patch``.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500178
179Note that all three of these can be installed from the Named Data PPA.
180Instructions for setting it up can be found in the NFD installation
181instructions. Note that PPA and installs from source **cannot** be
182mixed. You must completely remove PPA installs from the system if switching
183to source and vice-versa.
184
Davide Pesavento28a09122025-02-18 17:50:20 -0500185For PPA installs, if you are using a custom ``nfd.conf`` file in an experiment, you should
186place it in ``/usr/local/etc/ndn/`` rather than ``/etc/ndn/``. This is to avoid a bug with
187the default configuration file for the PPA, which is incompatible with Mini-NDN.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500188
189Infoedit
190________
191
192Infoedit is used to edit configuration files for NFD and NLSR.
193To install infoedit:
194
Davide Pesavento750d0402025-02-25 16:50:50 -0500195.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500196
197 git clone --depth 1 https://github.com/NDN-Routing/infoedit
198 cd infoedit
199 make
200 sudo make install
201
202Verification
203------------
204
205You can execute the following example to bring up the Mini-NDN command line
206with NFD and NLSR running on each node:
207
Davide Pesavento750d0402025-02-25 16:50:50 -0500208.. code-block:: sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500209
210 sudo python examples/mnndn.py
211
212You can use these steps to run the sample pingall experiment:
213
2141. Issue the command: ``sudo python examples/nlsr/pingall.py``
2152. When the ``mini-ndn>`` CLI prompt appears, the experiment has
216 finished. On the Mini-NDN CLI, issue the command ``exit`` to exit the
217 experiment.
2183. Issue the command:
219 ``grep -c content /tmp/minindn/*/ping-data/*.txt``. Each file should
220 report a count of 50.
2214. Issue the command:
222 ``grep -c timeout /tmp/minindn/*/ping-data/*.txt``. Each file should
223 report a count of 0.
awlane022b2bf2024-08-28 19:22:46 -0500224
225
226Release Versions
227----------------
228
229We provide a set of shortcuts to install major release versions of NDN
230dependencies from source.
231
232You can install the most recent release using:
233
Davide Pesavento750d0402025-02-25 16:50:50 -0500234.. code-block:: sh
awlane022b2bf2024-08-28 19:22:46 -0500235
236 ./install.sh --source --release=current
237
238You can also select a specified release using:
239
Davide Pesavento750d0402025-02-25 16:50:50 -0500240.. code-block:: sh
awlane022b2bf2024-08-28 19:22:46 -0500241
242 ./install.sh --source --release=[chosen version]
243
awlane022b2bf2024-08-28 19:22:46 -0500244Currently, the compatible versions include:
245
246- ``2024-08``: ndn-cxx 0.9.0, NFD 24.07, NLSR 24.08, PSync 0.5.0,
247 ndn-tools 24.07, and compatible versions of ndn-traffic-generator
awlane749b07a2025-02-05 11:11:05 -0600248 and infoedit.
249
250Using gpsd (Experimental)
Davide Pesavento28a09122025-02-18 17:50:20 -0500251-------------------------
awlane749b07a2025-02-05 11:11:05 -0600252
253The gpsd application included currently is based on in-progress work and
Davide Pesavento28a09122025-02-18 17:50:20 -0500254is not treated as part of the main dependencies. To use it, install ``gpsd``
255and ``nc`` (netcat) from your package manager, if not already present,
Davide Pesavento82cc17a2025-02-17 18:30:05 -0500256to enable the functionality.