blob: 3c4cd2a536d45bc247ecf0c2e01c71d4b219e87b [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 Pesavento82cc17a2025-02-17 18:30:05 -050020You can use the nightly build from GitHub package registry::
21
Davide Pesavento28a09122025-02-18 17:50:20 -050022 docker run -it --cpus=4 --memory=4g --privileged \
23 -v /lib/modules:/lib/modules \
24 ghcr.io/named-data/mini-ndn:master
awlane73add712024-08-12 21:49:00 -050025
26NOTE: This nightly build is only currently supported for x86_64. ARM64 support
27(i.e. Apple silicon Macs) will be added in the future.
28
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
awlane73add712024-08-12 21:49:00 -050034 - Clone the repository and type::
35
36 docker build -t minindn .
37
38 - You can then access the container through shell with::
39
Davide Pesavento28a09122025-02-18 17:50:20 -050040 docker run -it --cpus=4 --memory=4g --privileged \
awlane73add712024-08-12 21:49:00 -050041 -v /lib/modules:/lib/modules \
Davide Pesavento28a09122025-02-18 17:50:20 -050042 minindn
awlane73add712024-08-12 21:49:00 -050043
44Additional recommendations
45--------------------------
Davide Pesavento82cc17a2025-02-17 18:30:05 -050046
Davide Pesavento28a09122025-02-18 17:50:20 -050047- It is recommended to set reasonable constraints on memory (``--memory``) and CPU cores (``--cpus``),
48 especially on less powerful or non-dedicated systems.
49- ``--privileged`` is mandatory for Mininet to utilize the virtual switch.
50- The container working directory is ``/mini-ndn``, which contains the installation and examples.
51- The GUI may not work due to docker and xterm setup issues and is independent from Mini-NDN. If you intend
52 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 -050053
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050054Using Vagrantfile
55-----------------
56
Davide Pesavento28a09122025-02-18 17:50:20 -050057With Vagrant installed, simply do ``vagrant up`` which will bring up an Ubuntu 20.04 virtual machine
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050058and install Mini-NDN and all its dependencies on it. Please make sure to tweak the CPU core count
Davide Pesavento28a09122025-02-18 17:50:20 -050059(default 4 cores) and RAM (default 4GB) according to your needs before doing ``vagrant up``. Mini-NDN
60can be found in ``/home/vagrant/mini-ndn`` which is a symlink to ``/vagrant`` if Vagrantfile was used
61from within mini-ndn cloned on the host. Otherwise it is an actual clone of mini-ndn.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050062
63Using install.sh
64----------------
65
Junxiao Shi48ada892021-11-04 09:02:21 -060066Mini-NDN has the following dependencies:
67
awlane73add712024-08-12 21:49:00 -050068- `NDN Forwarding Daemon (NFD) <https://docs.named-data.net/NFD/current/>`_
69- `Named Data Link State Routing (NLSR) <https://docs.named-data.net/NLSR/current/>`_
Junxiao Shi48ada892021-11-04 09:02:21 -060070- `NDN Essential Tools (ndn-tools) <https://github.com/named-data/ndn-tools>`_
71- `NDN Traffic Generator <https://github.com/named-data/ndn-traffic-generator>`_
72- `infoedit <https://github.com/NDN-Routing/infoedit>`_
Davide Pesavento82cc17a2025-02-17 18:30:05 -050073- `Mininet <https://mininet.org/>`_
Junxiao Shi48ada892021-11-04 09:02:21 -060074- `Mininet-WiFi <https://mininet-wifi.github.io/>`_ (optional)
75
76To install Mini-NDN and its dependencies, clone this repository and run:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050077
78::
79
Junxiao Shi48ada892021-11-04 09:02:21 -060080 ./install.sh
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050081
Junxiao Shi48ada892021-11-04 09:02:21 -060082The script accepts various command line flags.
83Some notable flags are:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050084
Junxiao Shi48ada892021-11-04 09:02:21 -060085- ``-y`` skips interactive confirmation before installation.
Davide Pesavento28a09122025-02-18 17:50:20 -050086- ``--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 -060087 This shortens installation time by downloading binary packages, but is only available on Ubuntu.
88- ``--source`` prefers installing NDN software from source code.
awlaneeda7e072024-10-27 15:52:35 -050089- ``--use-existing`` will only install dependencies not already in the executable path.
Junxiao Shi48ada892021-11-04 09:02:21 -060090- ``--dummy-keychain`` patches ndn-cxx to use an in-memory dummy KeyChain, which reduces CPU overhead
91 and allows you to scale up Mini-NDN experiments. Large Mini-NDN experiments would run significantly
92 faster after applying this patch. However, your experiments cannot use any NDN security related
93 features (signatures, verifier, access control, etc).
94- ``--no-wifi`` skips Mininet-WiFi dependency.
95 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 -050096
Junxiao Shi48ada892021-11-04 09:02:21 -060097You can see all command line flags by running:
Ashlesh Gawande6c86e302019-09-17 22:27:05 -050098
99::
100
Junxiao Shi48ada892021-11-04 09:02:21 -0600101 ./install.sh -h
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500102
Junxiao Shi48ada892021-11-04 09:02:21 -0600103The script uses ``setup.py develop`` to point the system install of Python packages to the codebase
104directory. Therefore, you can modify ``mininet``, ``mininet-wifi``, and ``mini-ndn``, and the
105changes will be reflected immediately.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500106
Junxiao Shi48ada892021-11-04 09:02:21 -0600107If NDN software is installed from source code (not PPA), the code is downloaded to ``dl`` directory
108under your ``mini-ndn`` clone. If you modify the source code, you need to manually recompile and
109reinstall the software (``./waf && sudo ./waf install``).
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500110
dulalsaurab8c8e6332021-05-21 20:37:03 +0000111
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500112Installing Dependencies
113-----------------------
114
awlane73add712024-08-12 21:49:00 -0500115This section outlines how to install dependencies manually.
Junxiao Shi48ada892021-11-04 09:02:21 -0600116If you used ``install.sh``, you do not need to perform these steps.
117
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500118Mininet
119_______
120
121Mini-NDN is based on Mininet. To install Mininet:
122
123::
124
125 git clone --depth 1 https://github.com/mininet/mininet.git
126
127After Mininet source is on your system, run the following command to
128install Mininet core dependencies and Open vSwitch:
129
130::
131
132 ./util/install.sh -nv
133
134To check if Mininet is working correctly, run this test:
135
136::
137
138 sudo mn --test pingall
139
140This will print out a series of statements that show the test setup and
141the results of the test. Look for ``Results:`` two-thirds of the way
142down where it will indicate the percentage of dropped packets. Your
143results should show "0% dropped (2/2 received)".
144
145NOTE: Mini-NDN, while providing a high level of emulation of hosts,
146requires programs to be installed onto your computer. It will not work
147if they are not installed. If you do not want NDN software installed
148onto your computer, you can use a virtual machine, which can be quite
149simply set up with the provided Vagrantfile.
150
151NDN dependencies
152________________
153
154Each node in Mini-NDN will run the official implementation of NDN
155installed on your system. The following dependencies are needed:
156
awlane73add712024-08-12 21:49:00 -0500157Mini-NDN uses ndn-cxx, NFD, NLSR, and ndn-tools.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500158
awlane73add712024-08-12 21:49:00 -0500159- To install ndn-cxx: https://docs.named-data.net/ndn-cxx/current/INSTALL.html
160- To install NFD: https://docs.named-data.net/NFD/current/INSTALL.html
161- To install NLSR: https://docs.named-data.net/NLSR/current/INSTALL.html
162- To install ndn-tools: https://github.com/named-data/ndn-tools/blob/master/INSTALL.md
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500163
164.. warning::
165 Please do not try to install NDN software from both the source (GitHub) and PPA (apt).
166 It will not work in most cases! If you used ./install.sh -a in the past but now want
167 to use apt, please run ``sudo ./waf uninstall`` in all the NDN projects before proceeding
168 with apt. Similarly, remove from apt if switching to source.
169
awlane73add712024-08-12 21:49:00 -0500170In cases where using NDN security is not important to the results, it is recommended
171to use the dummy keychain patch for ndn-cxx to disable it for improved scalability.
Davide Pesavento28a09122025-02-18 17:50:20 -0500172This patch is located at ``util/patches/ndn-cxx-dummy-keychain.patch``.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500173
174Note that all three of these can be installed from the Named Data PPA.
175Instructions for setting it up can be found in the NFD installation
176instructions. Note that PPA and installs from source **cannot** be
177mixed. You must completely remove PPA installs from the system if switching
178to source and vice-versa.
179
Davide Pesavento28a09122025-02-18 17:50:20 -0500180For PPA installs, if you are using a custom ``nfd.conf`` file in an experiment, you should
181place it in ``/usr/local/etc/ndn/`` rather than ``/etc/ndn/``. This is to avoid a bug with
182the default configuration file for the PPA, which is incompatible with Mini-NDN.
Ashlesh Gawande6c86e302019-09-17 22:27:05 -0500183
184Infoedit
185________
186
187Infoedit is used to edit configuration files for NFD and NLSR.
188To install infoedit:
189
190::
191
192 git clone --depth 1 https://github.com/NDN-Routing/infoedit
193 cd infoedit
194 make
195 sudo make install
196
197Verification
198------------
199
200You can execute the following example to bring up the Mini-NDN command line
201with NFD and NLSR running on each node:
202
203::
204
205 sudo python examples/mnndn.py
206
207You can use these steps to run the sample pingall experiment:
208
2091. Issue the command: ``sudo python examples/nlsr/pingall.py``
2102. When the ``mini-ndn>`` CLI prompt appears, the experiment has
211 finished. On the Mini-NDN CLI, issue the command ``exit`` to exit the
212 experiment.
2133. Issue the command:
214 ``grep -c content /tmp/minindn/*/ping-data/*.txt``. Each file should
215 report a count of 50.
2164. Issue the command:
217 ``grep -c timeout /tmp/minindn/*/ping-data/*.txt``. Each file should
218 report a count of 0.
awlane022b2bf2024-08-28 19:22:46 -0500219
220
221Release Versions
222----------------
223
224We provide a set of shortcuts to install major release versions of NDN
225dependencies from source.
226
227You can install the most recent release using:
228
229::
230
231 ./install.sh --source --release=current
232
233You can also select a specified release using:
234
235::
236
237 ./install.sh --source --release=[chosen version]
238
239
240Currently, the compatible versions include:
241
242- ``2024-08``: ndn-cxx 0.9.0, NFD 24.07, NLSR 24.08, PSync 0.5.0,
243 ndn-tools 24.07, and compatible versions of ndn-traffic-generator
awlane749b07a2025-02-05 11:11:05 -0600244 and infoedit.
245
246Using gpsd (Experimental)
Davide Pesavento28a09122025-02-18 17:50:20 -0500247-------------------------
awlane749b07a2025-02-05 11:11:05 -0600248
249The gpsd application included currently is based on in-progress work and
Davide Pesavento28a09122025-02-18 17:50:20 -0500250is not treated as part of the main dependencies. To use it, install ``gpsd``
251and ``nc`` (netcat) from your package manager, if not already present,
Davide Pesavento82cc17a2025-02-17 18:30:05 -0500252to enable the functionality.