blob: 18b4e2677fb5d4abba4bc72e7eb34f89300fa3a1 [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 Pesavento69857c32020-04-05 16:36:26 -040010- Ubuntu 18.04 (amd64, armhf, i386)
Davide Pesavento17521592020-05-14 19:01:32 -040011- Ubuntu 20.04 (amd64)
Davide Pesavento69857c32020-04-05 16:36:26 -040012- macOS 10.13
13- macOS 10.14
14- macOS 10.15
Davide Pesavento17521592020-05-14 19:01:32 -040015- CentOS 8
Davide Pesavento69857c32020-04-05 16:36:26 -040016
17NFD is known to work on the following platforms, although they are not officially
18supported:
19
Davide Pesavento17521592020-05-14 19:01:32 -040020- Debian 10 (Buster)
21- Fedora >= 29
Davide Pesavento69857c32020-04-05 16:36:26 -040022- Gentoo Linux
Davide Pesavento17521592020-05-14 19:01:32 -040023- Raspbian >= 2019-06-20 (Buster)
Davide Pesavento69857c32020-04-05 16:36:26 -040024
25.. _Install NFD on Ubuntu Linux using the NDN PPA repository:
26
27Install NFD on Ubuntu Linux using the NDN PPA repository
Steve DiBenedetto62a93942014-08-24 17:13:52 -060028--------------------------------------------------------
29
Davide Pesavento69857c32020-04-05 16:36:26 -040030NFD binaries and related tools for supported versions of Ubuntu can be installed using
31PPA packages from the **named-data** repository. First, you will need to add the
32``named-data/ppa`` repository to the binary package sources and update the list of
33available packages.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060034
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -040035Preliminary steps if you have not used PPA packages before
36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Steve DiBenedetto62a93942014-08-24 17:13:52 -060037
Davide Pesavento69857c32020-04-05 16:36:26 -040038To simplify adding new PPA repositories, Ubuntu provides the ``add-apt-repository`` tool,
Davide Pesaventocc7bee72016-04-22 02:21:13 +020039which is not installed by default on some systems.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060040
41::
42
Davide Pesavento69857c32020-04-05 16:36:26 -040043 sudo apt install software-properties-common
Steve DiBenedetto62a93942014-08-24 17:13:52 -060044
Davide Pesavento69857c32020-04-05 16:36:26 -040045Adding the NDN PPA
46~~~~~~~~~~~~~~~~~~
Steve DiBenedetto62a93942014-08-24 17:13:52 -060047
Davide Pesavento69857c32020-04-05 16:36:26 -040048After installing ``add-apt-repository``, run the following commands to add the `NDN PPA
49repository`_::
Steve DiBenedetto62a93942014-08-24 17:13:52 -060050
51 sudo add-apt-repository ppa:named-data/ppa
Davide Pesavento69857c32020-04-05 16:36:26 -040052 sudo apt update
Steve DiBenedetto62a93942014-08-24 17:13:52 -060053
54Installing NFD and other NDN packages
55~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56
Davide Pesavento69857c32020-04-05 16:36:26 -040057After you have added the `NDN PPA repository`_, NFD and other NDN packages can be easily
58installed either using ``apt``, as shown below, or any other compatible package manager.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060059
60::
61
Davide Pesavento69857c32020-04-05 16:36:26 -040062 sudo apt install nfd
Steve DiBenedetto62a93942014-08-24 17:13:52 -060063
Davide Pesavento69857c32020-04-05 16:36:26 -040064For the list of available packages, refer to the `NDN PPA repository`_ page.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060065
66.. _NDN PPA repository: https://launchpad.net/~named-data/+archive/ppa
67
Davide Pesavento69857c32020-04-05 16:36:26 -040068Building from source
Steve DiBenedetto62a93942014-08-24 17:13:52 -060069--------------------
70
Davide Pesavento69857c32020-04-05 16:36:26 -040071Downloading from git
Steve DiBenedetto62a93942014-08-24 17:13:52 -060072~~~~~~~~~~~~~~~~~~~~
73
Davide Pesavento69857c32020-04-05 16:36:26 -040074The first step is to obtain the source code for NFD and its main dependency, the
75*ndn-cxx* library. If you do not want a development version of NFD, make sure you
76checkout the correct release tag (e.g., ``*-0.7.0``) from both repositories.
Steve DiBenedetto62a93942014-08-24 17:13:52 -060077
78::
79
80 # Download ndn-cxx
Davide Pesavento69857c32020-04-05 16:36:26 -040081 git clone https://github.com/named-data/ndn-cxx.git
Steve DiBenedetto62a93942014-08-24 17:13:52 -060082
83 # Download NFD
Davide Pesavento69857c32020-04-05 16:36:26 -040084 git clone --recursive https://github.com/named-data/NFD.git
Alexander Afanasyev284257b2014-04-11 14:16:51 -070085
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -040086.. note::
Davide Pesavento69857c32020-04-05 16:36:26 -040087 While we strive to ensure that the latest version (git master branch) of NFD and ndn-cxx
88 always compiles and works properly, we cannot guarantee that there will be no issues.
89 If this is discovered to be the case, please use matching released versions (git tag or
90 tarball) of NFD and ndn-cxx instead.
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -040091
Alexander Afanasyev284257b2014-04-11 14:16:51 -070092Prerequisites
Steve DiBenedetto62a93942014-08-24 17:13:52 -060093~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -070094
Davide Pesavento69857c32020-04-05 16:36:26 -040095Install the `ndn-cxx library <https://named-data.net/doc/ndn-cxx/current/INSTALL.html>`__
96and its prerequisites.
Alexander Afanasyev284257b2014-04-11 14:16:51 -070097
Davide Pesavento69857c32020-04-05 16:36:26 -040098On Linux, NFD needs the following dependencies to enable optional features:
Junxiao Shie5e1e252014-12-13 22:07:35 -070099
Davide Pesavento69857c32020-04-05 16:36:26 -0400100- On Ubuntu::
Junxiao Shie5e1e252014-12-13 22:07:35 -0700101
Davide Pesavento17521592020-05-14 19:01:32 -0400102 sudo apt install libpcap-dev libsystemd-dev
103
104- On CentOS and Fedora::
105
106 sudo dnf config-manager --enable PowerTools # on CentOS only
107 sudo dnf install libpcap-devel systemd-devel
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700108
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600109Build
110~~~~~
111
Davide Pesavento69857c32020-04-05 16:36:26 -0400112The following commands can be used to build and install NFD from source::
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700113
Davide Pesavento17521592020-05-14 19:01:32 -0400114 ./waf configure # on CentOS, add --without-pch
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700115 ./waf
116 sudo ./waf install
117
Davide Pesavento69857c32020-04-05 16:36:26 -0400118If you have installed ndn-cxx and/or any other dependencies into a non-standard path,
119you may need to modify the ``PKG_CONFIG_PATH`` environment variable before running
120``./waf configure``. For example::
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700121
Davide Pesavento69857c32020-04-05 16:36:26 -0400122 export PKG_CONFIG_PATH="/custom/lib/pkgconfig:$PKG_CONFIG_PATH"
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700123 ./waf configure
124 ./waf
125 sudo ./waf install
126
Davide Pesavento69857c32020-04-05 16:36:26 -0400127Refer to ``./waf --help`` for more options that can be used during the ``configure`` stage.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600128
Alexander Afanasyev508411e2014-12-16 13:27:59 -0800129.. note::
Davide Pesavento69857c32020-04-05 16:36:26 -0400130 If you are working on a source repository that has been compiled before, and you have
131 upgraded one of the dependencies, please execute ``./waf distclean`` to clear object files
132 and start over.
Alexander Afanasyev508411e2014-12-16 13:27:59 -0800133
Alexander Afanasyev26181532014-05-07 23:38:51 -0700134Debug symbols
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600135~~~~~~~~~~~~~
Alexander Afanasyev26181532014-05-07 23:38:51 -0700136
Davide Pesavento17521592020-05-14 19:01:32 -0400137The default compiler flags include debug symbols in binaries. This should provide
138more meaningful debugging information if NFD or other tools happen to crash.
Alexander Afanasyev26181532014-05-07 23:38:51 -0700139
Davide Pesavento17521592020-05-14 19:01:32 -0400140If this is not desired, the default flags can be overridden to disable debug symbols.
141The following example shows how to completely disable debug symbols and configure
142NFD to be installed into ``/usr`` with configuration in the ``/etc`` directory.
Alexander Afanasyev26181532014-05-07 23:38:51 -0700143
144::
145
146 CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
147 ./waf
148 sudo ./waf install
149
Davide Pesavento69857c32020-04-05 16:36:26 -0400150For Ubuntu PPA packages, debug symbols are available in ``*-dbg`` packages.
Alexander Afanasyev84dd4ca2017-10-15 14:56:08 -0400151
Davide Pesavento69857c32020-04-05 16:36:26 -0400152Customizing the compiler
153~~~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800154
Davide Pesavento69857c32020-04-05 16:36:26 -0400155To build NFD with a different compiler (rather than the platform default), set the
156``CXX`` environment variable to point to the compiler binary. For example, to build
157with clang on Linux, use the following::
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800158
Eric Newberry81a9a862016-12-27 22:59:27 -0700159 CXX=clang++ ./waf configure
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800160
Davide Pesavento69857c32020-04-05 16:36:26 -0400161Building the documentation
162~~~~~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700163
Davide Pesavento17521592020-05-14 19:01:32 -0400164Tutorials and API documentation can be built using the following commands::
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700165
166 # Full set of documentation (tutorials + API) in build/docs
167 ./waf docs
168
Davide Pesavento69857c32020-04-05 16:36:26 -0400169 # Only tutorials in build/docs
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700170 ./waf sphinx
171
Davide Pesavento69857c32020-04-05 16:36:26 -0400172 # Only API docs in build/docs/doxygen
173 ./waf doxygen
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700174
Davide Pesavento17521592020-05-14 19:01:32 -0400175If ``sphinx-build`` is detected during ``./waf configure``, manpages will automatically
176be built and installed during the normal build process (i.e., during ``./waf`` and
177``./waf install``). By default, manpages will be installed into ``${PREFIX}/share/man``
178(the default value for ``PREFIX`` is ``/usr/local``). This location can be changed
179during the ``./waf configure`` stage using the ``--prefix``, ``--datarootdir``, or
180``--mandir`` options.
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700181
Davide Pesavento17521592020-05-14 19:01:32 -0400182For further details, please refer to ``./waf --help``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600183
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600184Initial configuration
185---------------------
186
187.. note::
188 If you have installed NFD from binary packages, the package manager has already
Davide Pesavento69857c32020-04-05 16:36:26 -0400189 installed a working configuration and you can safely skip this section.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600190
191General
192~~~~~~~
193
Davide Pesavento69857c32020-04-05 16:36:26 -0400194After installing NFD from source, you need to create a proper configuration file.
195If the default installation directories were used with ``./waf configure``, this
196can be accomplished by simply copying the sample configuration file as follows::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600197
198 sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
199
200NFD Security
201~~~~~~~~~~~~
202
203NFD provides mechanisms to enable strict authorization for all management commands. In
Davide Pesavento69857c32020-04-05 16:36:26 -0400204particular, one can authorize only specific public keys to create new faces or change the
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600205forwarding strategy for specific namespaces. For more information about how to generate
Davide Pesavento69857c32020-04-05 16:36:26 -0400206public/private key pairs, generate self-signed certificates, and use them to authorize
207NFD management commands, refer to the :ref:`How do I configure NFD security` FAQ question.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600208
Davide Pesavento69857c32020-04-05 16:36:26 -0400209In the sample configuration file, all security mechanisms are disabled for local clients,
210effectively allowing anybody on the local machine to issue NFD management commands.
211
212.. note::
213 The sample configuration file is intended only for demo purposes and should NOT be
214 used in production environments.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600215
216Running
217-------
218
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600219Starting
220~~~~~~~~
221
Davide Pesavento69857c32020-04-05 16:36:26 -0400222If you have installed NFD from source, it is recommended to start NFD with the
223``nfd-start`` script::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600224
225 nfd-start
226
Davide Pesavento69857c32020-04-05 16:36:26 -0400227On macOS, this command may ask for your keychain password or ask "nfd wants to sign using
228key [xyz] in your keychain". Enter your keychain password and click "Always Allow".
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600229
230Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process.
231
Davide Pesavento2849fd42019-01-03 18:30:05 -0500232If you have installed NFD using a package manager, you can start and stop NFD using the
Davide Pesavento69857c32020-04-05 16:36:26 -0400233operating system's service manager, such as ``systemctl`` or ``launchctl``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600234
Davide Pesavento69857c32020-04-05 16:36:26 -0400235Connecting to remote forwarders
236~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600237
Davide Pesavento69857c32020-04-05 16:36:26 -0400238To create a UDP tunnel to a remote instance of NFD, execute the following command
239in a terminal::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600240
Davide Pesavento69857c32020-04-05 16:36:26 -0400241 nfdc face create udp://<other-host>
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600242
Davide Pesavento69857c32020-04-05 16:36:26 -0400243where ``<other-host>`` is the name or IP address of the other host (e.g.,
244``udp://ndn.example.net``). If successful, this will print something like::
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600245
Junxiao Shi849e12a2017-08-02 00:14:57 +0000246 face-created id=308 local=udp4://10.0.2.15:6363 remote=udp4://131.179.196.46:6363 persistency=persistent
247
Davide Pesavento69857c32020-04-05 16:36:26 -0400248To add a route ``/ndn`` toward this remote forwarder, execute the following command
249in a terminal::
Junxiao Shi849e12a2017-08-02 00:14:57 +0000250
Davide Pesavento69857c32020-04-05 16:36:26 -0400251 nfdc route add /ndn udp://<other-host>
Junxiao Shi849e12a2017-08-02 00:14:57 +0000252
Davide Pesavento69857c32020-04-05 16:36:26 -0400253This will print::
Junxiao Shi849e12a2017-08-02 00:14:57 +0000254
255 route-add-accepted prefix=/ndn nexthop=308 origin=static cost=0 flags=child-inherit expires=never
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600256
Davide Pesavento69857c32020-04-05 16:36:26 -0400257This indicates that NFD will forward all Interests that start with ``/ndn`` through the
258face to the other host. This forwards Interests to the other host, but does not provide
259a "back route" for the other host to forward Interests to you. For this, you can rely on
260the "automatic prefix propagation" feature of NFD or use the ``nfdc`` command on the other
261host to add the route.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600262
263Playing with NFD
264----------------
265
Davide Pesavento69857c32020-04-05 16:36:26 -0400266After you have installed, configured, and started NFD, you can demonstrate the features
267of NDN using the following applications and libraries.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600268
269Sample applications:
270
Davide Pesavento17521592020-05-14 19:01:32 -0400271 + `Simple examples using the ndn-cxx library <https://named-data.net/doc/ndn-cxx/current/examples.html>`__
Davide Pesavento69857c32020-04-05 16:36:26 -0400272 + `Introductory examples of NDN-CCL
Davide Pesavento17521592020-05-14 19:01:32 -0400273 <https://redmine.named-data.net/projects/application-development-documentation-guides/wiki/Step-By-Step_-_Common_Client_Libraries>`__
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600274
275Real applications and libraries:
276
Davide Pesavento17521592020-05-14 19:01:32 -0400277 + `ndn-tools - Essential NDN command-line tools <https://github.com/named-data/ndn-tools>`__
278 + `ndn-traffic-generator - Traffic generator for NDN <https://github.com/named-data/ndn-traffic-generator>`__
279 + `ChronoSync - Sync library for multi-user real-time applications <https://github.com/named-data/ChronoSync>`__
280 + `PSync - Partial and full synchronization library <https://github.com/named-data/PSync>`__