blob: 188ceebc1a421a1a99340190686755f5a696a0bd [file] [log] [blame]
Davide Pesavento17521592020-05-14 19:01:32 -04001Getting started with NFD
Steve DiBenedetto62a93942014-08-24 17:13:52 -06002========================
Alexander Afanasyev284257b2014-04-11 14:16:51 -07003
Davide Pesavento69857c32020-04-05 16:36:26 -04004Supported platforms
5-------------------
Steve DiBenedetto62a93942014-08-24 17:13:52 -06006
Davide Pesavento69857c32020-04-05 16:36:26 -04007NFD is built against a continuous integration system and has been tested on the
8following platforms:
9
Davide Pesavento3bc8e192022-12-31 01:40:11 -050010- Ubuntu 18.04 / 20.04 / 22.04
Davide Pesaventoe541d1b2022-08-17 15:10:32 -040011- Debian 11
12- CentOS Stream 9
Davide Pesavento3bc8e192022-12-31 01:40:11 -050013- macOS 10.15 / 11 / 12 / 13
Davide Pesavento69857c32020-04-05 16:36:26 -040014
15NFD is known to work on the following platforms, although they are not officially
16supported:
17
Davide Pesaventoe541d1b2022-08-17 15:10:32 -040018- Alpine >= 3.12
19- Fedora >= 29
20- Gentoo Linux
21- Raspberry Pi OS (formerly Raspbian) >= 2019-06-20
Davide Pesavento6d6f2072022-09-12 23:08:34 -040022- FreeBSD >= 12.2
Davide Pesavento69857c32020-04-05 16:36:26 -040023
24.. _Install NFD on Ubuntu Linux using the NDN PPA repository:
25
26Install NFD on Ubuntu Linux using the NDN PPA repository
Steve DiBenedetto62a93942014-08-24 17:13:52 -060027--------------------------------------------------------
28
Davide Pesavento69857c32020-04-05 16:36:26 -040029NFD binaries and related tools for supported versions of Ubuntu can be installed using
30PPA packages from the **named-data** repository. First, you will need to add the
31``named-data/ppa`` repository to the binary package sources and update the list of
32available packages.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060033
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -040034Preliminary steps if you have not used PPA packages before
35~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Steve DiBenedetto62a93942014-08-24 17:13:52 -060036
Davide Pesavento69857c32020-04-05 16:36:26 -040037To simplify adding new PPA repositories, Ubuntu provides the ``add-apt-repository`` tool,
Davide Pesaventocc7bee72016-04-22 02:21:13 +020038which is not installed by default on some systems.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060039
40::
41
Davide Pesavento69857c32020-04-05 16:36:26 -040042 sudo apt install software-properties-common
Steve DiBenedetto62a93942014-08-24 17:13:52 -060043
Davide Pesavento69857c32020-04-05 16:36:26 -040044Adding the NDN PPA
45~~~~~~~~~~~~~~~~~~
Steve DiBenedetto62a93942014-08-24 17:13:52 -060046
Davide Pesavento69857c32020-04-05 16:36:26 -040047After installing ``add-apt-repository``, run the following commands to add the `NDN PPA
48repository`_::
Steve DiBenedetto62a93942014-08-24 17:13:52 -060049
50 sudo add-apt-repository ppa:named-data/ppa
Davide Pesavento69857c32020-04-05 16:36:26 -040051 sudo apt update
Steve DiBenedetto62a93942014-08-24 17:13:52 -060052
53Installing NFD and other NDN packages
54~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55
Davide Pesavento69857c32020-04-05 16:36:26 -040056After you have added the `NDN PPA repository`_, NFD and other NDN packages can be easily
57installed either using ``apt``, as shown below, or any other compatible package manager.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060058
59::
60
Davide Pesavento69857c32020-04-05 16:36:26 -040061 sudo apt install nfd
Steve DiBenedetto62a93942014-08-24 17:13:52 -060062
Davide Pesavento69857c32020-04-05 16:36:26 -040063For the list of available packages, refer to the `NDN PPA repository`_ page.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060064
65.. _NDN PPA repository: https://launchpad.net/~named-data/+archive/ppa
66
Davide Pesavento69857c32020-04-05 16:36:26 -040067Building from source
Steve DiBenedetto62a93942014-08-24 17:13:52 -060068--------------------
69
Davide Pesavento69857c32020-04-05 16:36:26 -040070Downloading from git
Steve DiBenedetto62a93942014-08-24 17:13:52 -060071~~~~~~~~~~~~~~~~~~~~
72
Davide Pesavento69857c32020-04-05 16:36:26 -040073The first step is to obtain the source code for NFD and its main dependency, the
74*ndn-cxx* library. If you do not want a development version of NFD, make sure you
Davide Pesavento3bc8e192022-12-31 01:40:11 -050075checkout the correct release tag (e.g., ``*-0.8.1``) from both repositories.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060076
Davide Pesavento9f6a7d92020-10-06 15:21:48 -040077.. code-block:: sh
Steve DiBenedetto62a93942014-08-24 17:13:52 -060078
79 # Download ndn-cxx
Davide Pesavento69857c32020-04-05 16:36:26 -040080 git clone https://github.com/named-data/ndn-cxx.git
Steve DiBenedetto62a93942014-08-24 17:13:52 -060081
82 # Download NFD
Davide Pesavento69857c32020-04-05 16:36:26 -040083 git clone --recursive https://github.com/named-data/NFD.git
Alexander Afanasyev284257b2014-04-11 14:16:51 -070084
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -040085.. note::
Davide Pesavento69857c32020-04-05 16:36:26 -040086 While we strive to ensure that the latest version (git master branch) of NFD and ndn-cxx
87 always compiles and works properly, we cannot guarantee that there will be no issues.
88 If this is discovered to be the case, please use matching released versions (git tag or
89 tarball) of NFD and ndn-cxx instead.
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -040090
Alexander Afanasyev284257b2014-04-11 14:16:51 -070091Prerequisites
Steve DiBenedetto62a93942014-08-24 17:13:52 -060092~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -070093
Davide Pesaventobf4c1312023-02-23 20:32:01 -050094Install the `ndn-cxx library <https://docs.named-data.net/ndn-cxx/current/INSTALL.html>`__
Davide Pesavento69857c32020-04-05 16:36:26 -040095and its prerequisites.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070096
Davide Pesavento69857c32020-04-05 16:36:26 -040097On Linux, NFD needs the following dependencies to enable optional features:
Junxiao Shie5e1e252014-12-13 22:07:35 -070098
Davide Pesaventoe541d1b2022-08-17 15:10:32 -040099- On **Debian** and **Ubuntu**:
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400100
101 .. code-block:: sh
Junxiao Shie5e1e252014-12-13 22:07:35 -0700102
Davide Pesavento17521592020-05-14 19:01:32 -0400103 sudo apt install libpcap-dev libsystemd-dev
104
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400105- On **CentOS** and **Fedora**:
106
107 .. code-block:: sh
Davide Pesavento17521592020-05-14 19:01:32 -0400108
Davide Pesavento17521592020-05-14 19:01:32 -0400109 sudo dnf install libpcap-devel systemd-devel
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700110
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600111Build
112~~~~~
113
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400114The following commands can be used to build and install NFD from source:
115
116.. code-block:: sh
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700117
Davide Pesavento2150da82022-07-08 18:18:51 -0400118 ./waf configure
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700119 ./waf
120 sudo ./waf install
121
Davide Pesavento69857c32020-04-05 16:36:26 -0400122If you have installed ndn-cxx and/or any other dependencies into a non-standard path,
123you may need to modify the ``PKG_CONFIG_PATH`` environment variable before running
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400124``./waf configure``. For example:
125
126.. code-block:: sh
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700127
Davide Pesavento69857c32020-04-05 16:36:26 -0400128 export PKG_CONFIG_PATH="/custom/lib/pkgconfig:$PKG_CONFIG_PATH"
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700129 ./waf configure
130 ./waf
131 sudo ./waf install
132
Davide Pesavento69857c32020-04-05 16:36:26 -0400133Refer to ``./waf --help`` for more options that can be used during the ``configure`` stage.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600134
Alexander Afanasyev508411e2014-12-16 13:27:59 -0800135.. note::
Davide Pesavento69857c32020-04-05 16:36:26 -0400136 If you are working on a source repository that has been compiled before, and you have
137 upgraded one of the dependencies, please execute ``./waf distclean`` to clear object files
138 and start over.
Alexander Afanasyev508411e2014-12-16 13:27:59 -0800139
Alexander Afanasyev26181532014-05-07 23:38:51 -0700140Debug symbols
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600141~~~~~~~~~~~~~
Alexander Afanasyev26181532014-05-07 23:38:51 -0700142
Davide Pesavento17521592020-05-14 19:01:32 -0400143The default compiler flags include debug symbols in binaries. This should provide
144more meaningful debugging information if NFD or other tools happen to crash.
Alexander Afanasyev26181532014-05-07 23:38:51 -0700145
Davide Pesavento17521592020-05-14 19:01:32 -0400146If this is not desired, the default flags can be overridden to disable debug symbols.
147The following example shows how to completely disable debug symbols and configure
148NFD to be installed into ``/usr`` with configuration in the ``/etc`` directory.
Alexander Afanasyev26181532014-05-07 23:38:51 -0700149
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400150.. code-block:: sh
Alexander Afanasyev26181532014-05-07 23:38:51 -0700151
152 CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
153 ./waf
154 sudo ./waf install
155
Davide Pesavento69857c32020-04-05 16:36:26 -0400156For Ubuntu PPA packages, debug symbols are available in ``*-dbg`` packages.
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -0400157
Davide Pesavento69857c32020-04-05 16:36:26 -0400158Customizing the compiler
159~~~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800160
Davide Pesavento69857c32020-04-05 16:36:26 -0400161To build NFD with a different compiler (rather than the platform default), set the
162``CXX`` environment variable to point to the compiler binary. For example, to build
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400163with clang on Linux, use the following:
164
165.. code-block:: sh
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800166
Eric Newberry81a9a862016-12-27 22:59:27 -0700167 CXX=clang++ ./waf configure
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800168
Davide Pesavento69857c32020-04-05 16:36:26 -0400169Building the documentation
170~~~~~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700171
Davide Pesavento9f6a7d92020-10-06 15:21:48 -0400172Tutorials and API documentation can be built using the following commands:
173
174.. code-block:: sh
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700175
176 # Full set of documentation (tutorials + API) in build/docs
177 ./waf docs
178
Davide Pesavento69857c32020-04-05 16:36:26 -0400179 # Only tutorials in build/docs
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700180 ./waf sphinx
181
Davide Pesavento69857c32020-04-05 16:36:26 -0400182 # Only API docs in build/docs/doxygen
183 ./waf doxygen
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700184
Davide Pesavento17521592020-05-14 19:01:32 -0400185If ``sphinx-build`` is detected during ``./waf configure``, manpages will automatically
186be built and installed during the normal build process (i.e., during ``./waf`` and
187``./waf install``). By default, manpages will be installed into ``${PREFIX}/share/man``
188(the default value for ``PREFIX`` is ``/usr/local``). This location can be changed
189during the ``./waf configure`` stage using the ``--prefix``, ``--datarootdir``, or
190``--mandir`` options.
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700191
Davide Pesavento17521592020-05-14 19:01:32 -0400192For further details, please refer to ``./waf --help``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600193
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600194Initial configuration
195---------------------
196
197.. note::
198 If you have installed NFD from binary packages, the package manager has already
Davide Pesavento69857c32020-04-05 16:36:26 -0400199 installed a working configuration and you can safely skip this section.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600200
201General
202~~~~~~~
203
Davide Pesavento69857c32020-04-05 16:36:26 -0400204After installing NFD from source, you need to create a proper configuration file.
205If the default installation directories were used with ``./waf configure``, this
206can be accomplished by simply copying the sample configuration file as follows::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600207
208 sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
209
210NFD Security
211~~~~~~~~~~~~
212
213NFD provides mechanisms to enable strict authorization for all management commands. In
Davide Pesavento69857c32020-04-05 16:36:26 -0400214particular, one can authorize only specific public keys to create new faces or change the
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600215forwarding strategy for specific namespaces. For more information about how to generate
Davide Pesavento69857c32020-04-05 16:36:26 -0400216public/private key pairs, generate self-signed certificates, and use them to authorize
217NFD management commands, refer to the :ref:`How do I configure NFD security` FAQ question.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600218
Davide Pesavento69857c32020-04-05 16:36:26 -0400219In the sample configuration file, all security mechanisms are disabled for local clients,
220effectively allowing anybody on the local machine to issue NFD management commands.
221
222.. note::
223 The sample configuration file is intended only for demo purposes and should NOT be
224 used in production environments.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600225
226Running
227-------
228
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600229Starting
230~~~~~~~~
231
Davide Pesavento69857c32020-04-05 16:36:26 -0400232If you have installed NFD from source, it is recommended to start NFD with the
233``nfd-start`` script::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600234
235 nfd-start
236
Davide Pesavento69857c32020-04-05 16:36:26 -0400237On macOS, this command may ask for your keychain password or ask "nfd wants to sign using
238key [xyz] in your keychain". Enter your keychain password and click "Always Allow".
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600239
240Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process.
241
Davide Pesavento2849fd42019-01-03 18:30:05 -0500242If you have installed NFD using a package manager, you can start and stop NFD using the
Davide Pesavento69857c32020-04-05 16:36:26 -0400243operating system's service manager, such as ``systemctl`` or ``launchctl``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600244
Davide Pesavento69857c32020-04-05 16:36:26 -0400245Connecting to remote forwarders
246~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600247
Davide Pesavento69857c32020-04-05 16:36:26 -0400248To create a UDP tunnel to a remote instance of NFD, execute the following command
249in a terminal::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600250
Davide Pesavento69857c32020-04-05 16:36:26 -0400251 nfdc face create udp://<other-host>
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600252
Davide Pesavento69857c32020-04-05 16:36:26 -0400253where ``<other-host>`` is the name or IP address of the other host (e.g.,
254``udp://ndn.example.net``). If successful, this will print something like::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600255
Junxiao Shi849e12a2017-08-02 00:14:57 +0000256 face-created id=308 local=udp4://10.0.2.15:6363 remote=udp4://131.179.196.46:6363 persistency=persistent
257
Davide Pesavento69857c32020-04-05 16:36:26 -0400258To add a route ``/ndn`` toward this remote forwarder, execute the following command
259in a terminal::
Junxiao Shi849e12a2017-08-02 00:14:57 +0000260
Davide Pesavento69857c32020-04-05 16:36:26 -0400261 nfdc route add /ndn udp://<other-host>
Junxiao Shi849e12a2017-08-02 00:14:57 +0000262
Davide Pesavento69857c32020-04-05 16:36:26 -0400263This will print::
Junxiao Shi849e12a2017-08-02 00:14:57 +0000264
265 route-add-accepted prefix=/ndn nexthop=308 origin=static cost=0 flags=child-inherit expires=never
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600266
Davide Pesavento69857c32020-04-05 16:36:26 -0400267This indicates that NFD will forward all Interests that start with ``/ndn`` through the
268face to the other host. This forwards Interests to the other host, but does not provide
269a "back route" for the other host to forward Interests to you. For this, you can rely on
270the "automatic prefix propagation" feature of NFD or use the ``nfdc`` command on the other
271host to add the route.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600272
273Playing with NFD
274----------------
275
Davide Pesavento69857c32020-04-05 16:36:26 -0400276After you have installed, configured, and started NFD, you can demonstrate the features
277of NDN using the following applications and libraries.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600278
279Sample applications:
280
Davide Pesaventobf4c1312023-02-23 20:32:01 -0500281 + `Simple examples using the ndn-cxx library <https://docs.named-data.net/ndn-cxx/current/examples.html>`__
Davide Pesavento3bc8e192022-12-31 01:40:11 -0500282 + `Simple examples using the python-ndn library <https://python-ndn.readthedocs.io/en/latest/src/examples/basic_app.html>`__
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600283
284Real applications and libraries:
285
Davide Pesavento17521592020-05-14 19:01:32 -0400286 + `ndn-tools - Essential NDN command-line tools <https://github.com/named-data/ndn-tools>`__
Davide Pesavento3bc8e192022-12-31 01:40:11 -0500287 + `ndn-traffic-generator - Simple traffic generator for NDN <https://github.com/named-data/ndn-traffic-generator>`__
288 + `ndn-svs - State Vector Sync library <https://github.com/named-data/ndn-svs>`__
289 + `PSync - Partial and full Sync library <https://github.com/named-data/PSync>`__