blob: e04ee4889630b9a714e7a14b0a6fc0da9e90be7f [file] [log] [blame]
Steve DiBenedetto62a93942014-08-24 17:13:52 -06001Getting Started with NFD
2========================
Alexander Afanasyev284257b2014-04-11 14:16:51 -07003
Steve DiBenedetto62a93942014-08-24 17:13:52 -06004Installing NFD from Binaries
5----------------------------
6
7We provide NFD binaries for the supported platforms, which are the preferred installation
8method. In addition to simplifying installation, the binary release also includes
9automatic initial configuration and platform-specific tools to automatically start NFD and
10related daemons. In particular, on OS X NFD is controlled using `launchd
11<https://github.com/named-data/NFD/tree/master/contrib/osx-launchd>`__ and on Ubuntu using
12`upstart <https://github.com/named-data/NFD/tree/master/contrib/upstart>`__ mechanisms.
13In both cases, `nfd-start` and `nfd-stop` scripts are convenience wrappers for launchd and
14upstart.
15
16On OS X, NFD can be installed with MacPorts. Refer to :ref:`Install NFD Using the NDN
17MacPorts Repository on OS X` for more details.
18
Junxiao Shie5e1e252014-12-13 22:07:35 -070019On Ubuntu 12.04, 14.04, or 14.10 NFD can be installed from NDN PPA repository. Refer to
Steve DiBenedetto62a93942014-08-24 17:13:52 -060020:ref:`Install NFD Using the NDN PPA Repository on Ubuntu Linux`.
21
22Future releases could include support for other platforms. Please send us feedback on the
23platforms you're using, so we can prioritize our goals. We would also appreciate help
24packaging the current NFD release for other platforms.
25
26
27.. _Install NFD Using the NDN MacPorts Repository on OS X:
28
29Install NFD Using the NDN MacPorts Repository on OS X
30-----------------------------------------------------
31
32OS X users have the opportunity to seamlessly install and run NFD as well as other related
33applications via `MacPorts <https://www.macports.org/>`_. If you are not using MacPorts
34yet, go to the `MacPorts website <https://www.macports.org/install.php>`_ and install the
35MacPorts package.
36
37NFD and related ports are not part of the official MacPorts repository. In order to use
38these ports, you will need to add the NDN MacPorts repository to your local configuration.
39In particular, you will need to modify the list of source URLs for MacPorts. For example,
40if your MacPorts are installed in ``/opt/local``, add the following line to
41`/opt/local/etc/macports/sources.conf` before or after the default port repository:
42
43::
44
45 rsync://macports.named-data.net/macports/
46
47After this step, you can use ``sudo port selfupdate`` to fetch updated port definitions.
48
49The following command will install NFD using MacPorts:
50
51::
52
53 sudo port install nfd
54
55.. note::
56
57 You have to have XCode installed on your machine. This can be installed from the
58 AppStore (free) on OS X 10.7 or later. Older editions of OS X can download an
59 appropriate version of XCode from http://developer.apple.com.
60
61
62One advantage of using MacPorts is that you can easily upgrade NFD and other packages to
63the latest version. The following commands will do this job:
64
65::
66
67 sudo port selfupdate
68 sudo port upgrade nfd
69
70.. _Install NFD Using the NDN PPA Repository on Ubuntu Linux:
71
72Install NFD Using the NDN PPA Repository on Ubuntu Linux
73--------------------------------------------------------
74
Junxiao Shie5e1e252014-12-13 22:07:35 -070075NFD binaries and related tools for Ubuntu 12.04, 14.04, or 14.10 can be installed using PPA
Steve DiBenedetto62a93942014-08-24 17:13:52 -060076packages from named-data repository. First, you will need to add ``named-data/ppa``
77repository to binary package sources and update list of available packages.
78
79Preliminary steps if you haven't used PPA packages before
80~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81
82To simplify adding new PPA repositories, Ubuntu provides ``add-apt-repository`` tool,
83which is not installed by default on some platforms.
84
85On Ubuntu **12.04**:
86
87::
88
89 sudo apt-get install python-software-properties
90
Junxiao Shie5e1e252014-12-13 22:07:35 -070091On Ubuntu **14.04** or **14.10**:
Steve DiBenedetto62a93942014-08-24 17:13:52 -060092
93::
94
95 sudo apt-get install software-properties-common
96
97
98Adding NDN PPA
99~~~~~~~~~~~~~~
100
101After installing ``add-apt-repository``, run the following command to add `NDN PPA
102repository`_.
103
104::
105
106 sudo add-apt-repository ppa:named-data/ppa
107 sudo apt-get update
108
109Installing NFD and other NDN packages
110~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
111
112After you have added `NDN PPA repository`_, NFD and other NDN packages can be easily
113installed in a standard way, i.e., either using ``apt-get`` as shown below or using any
114other package manager, such as Synaptic Package Manager:
115
116::
117
118 sudo apt-get install nfd
119
120For the list of available packages, refer to `NDN PPA repository`_ homepage.
121
122.. _NDN PPA repository: https://launchpad.net/~named-data/+archive/ppa
123
124Building from Source
125--------------------
126
127Downloading from Git
128~~~~~~~~~~~~~~~~~~~~
129
130The first step is to obtain the source code for ``NFD`` and, its main dependency, the
131``ndn-cxx`` library. If you are not planning to work with the bleeding edge code, make
132sure you checkout the correct release tag (e.g., ``*-0.2.0``) for both repositories:
133
134::
135
136 # Download ndn-cxx
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600137 git clone https://github.com/named-data/ndn-cxx
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600138
139 # Download NFD
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600140 git clone --recursive https://github.com/named-data/NFD
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700141
142Prerequisites
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600143~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700144
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600145- Install the `ndn-cxx library <http://named-data.net/doc/ndn-cxx/current/INSTALL.html>`_
146 and its requirements
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700147
Junxiao Shie5e1e252014-12-13 22:07:35 -0700148- ``pkg-config``
149
150 On OS X 10.8, 10.9, and 10.10 with MacPorts:
151
152 ::
153
154 sudo port install pkgconfig
155
156 On Ubuntu >= 12.04:
157
158 ::
159
160 sudo apt-get install pkg-config
161
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700162- ``libpcap``
163
Junxiao Shie5e1e252014-12-13 22:07:35 -0700164 Comes with the base system on OS X 10.8, 10.9, and 10.10.
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700165
166 On Ubuntu >= 12.04:
167
168 ::
169
170 sudo apt-get install libpcap-dev
171
172To build manpages and API documentation:
173
174- ``doxygen``
175- ``graphviz``
176- ``python-sphinx``
177
Junxiao Shie5e1e252014-12-13 22:07:35 -0700178 On OS X 10.8, 10.9, and 10.10 with MacPorts:
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700179
180 ::
181
182 sudo port install doxygen graphviz py27-sphinx sphinx_select
183 sudo port select sphinx py27-sphinx
184
185 On Ubuntu >= 12.04:
186
187 ::
188
189 sudo apt-get install doxygen graphviz python-sphinx
190
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700191
Junxiao Shie5e1e252014-12-13 22:07:35 -0700192Besides officially supported platforms, NFD is known to work on: Fedora 20, CentOS 6/7, Gentoo Linux,
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600193Raspberry Pi, OpenWRT, FreeBSD 10.0, and several other platforms. We are soliciting help
194with documenting common problems / pitfalls in installing/using NFD on different platforms
195on `NFD Wiki
196<http://redmine.named-data.net/projects/nfd/wiki/Wiki#Installation-experiences-for-selected-platforms>`__.
197
198
199Build
200~~~~~
201
202The following basic commands should be used to build NFD on Ubuntu:
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700203
204::
205
206 ./waf configure
207 ./waf
208 sudo ./waf install
209
Alexander Afanasyev6db058c2014-11-13 16:46:25 -0800210If you have installed `ndn-cxx` library and/or other dependencies into a non-standard paths, you
211may need to modify ``PKG_CONFIG_PATH`` environment variable before running ``./waf configure``.
212For example,
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700213
214::
215
Alexander Afanasyev6db058c2014-11-13 16:46:25 -0800216 export PKG_CONFIG_PATH=/custom/lib/pkgconfig:$PKG_CONFIG_PATH
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700217 ./waf configure
218 ./waf
219 sudo ./waf install
220
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600221
222Refer to ``./waf --help`` for more options that can be used during ``configure`` stage and
223how to properly configure and run NFD.
224
Alexander Afanasyev508411e2014-12-16 13:27:59 -0800225.. note::
226 If you are working on a source repository that has been compiled before, and you have
227 upgraded one of the dependencies, please execute ``./waf distclean`` to clear object files
228 and start over.
229
Alexander Afanasyev26181532014-05-07 23:38:51 -0700230Debug symbols
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600231~~~~~~~~~~~~~
Alexander Afanasyev26181532014-05-07 23:38:51 -0700232
233The default compiler flags enable debug symbols to be included in binaries. This
234potentially allows more meaningful debugging if NFD or other tools happen to crash.
235
236If it is undesirable, default flags can be easily overridden. The following example shows
237how to completely disable debug symbols and configure NFD to be installed into ``/usr``
238with configuration in ``/etc`` folder.
239
240::
241
242 CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
243 ./waf
244 sudo ./waf install
245
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700246Building documentation
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600247~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700248
249NFD tutorials and API documentation can be built using the following commands:
250
251::
252
253 # Full set of documentation (tutorials + API) in build/docs
254 ./waf docs
255
256 # Only tutorials in `build/docs`
257 ./waf sphinx
258
259 # Only API docs in `build/docs/doxygen`
260 ./waf doxgyen
261
262
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600263Manpages are automatically created and installed during the normal build process (e.g.,
264during ``./waf`` and ``./waf install``), if ``python-sphinx`` module is detected during
265``./waf configure`` stage. By default, manpages are installed into
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700266``${PREFIX}/share/man`` (where default value for ``PREFIX`` is ``/usr/local``). This
267location can be changed during ``./waf configure`` stage using ``--prefix``,
268``--datarootdir``, or ``--mandir`` options.
269
270For more details, refer to ``./waf --help``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600271
272
273Initial configuration
274---------------------
275
276.. note::
277 If you have installed NFD from binary packages, the package manager has already
278 installed initial configuration and you can safely skip this section.
279
280General
281~~~~~~~
282
283After installing NFD from source, you need to create a proper config file. If default
284location for ``./waf configure`` was used, this can be accomplished by simply copying the
285sample configuration file:
286
287::
288
289 sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
290
291NFD Security
292~~~~~~~~~~~~
293
294NFD provides mechanisms to enable strict authorization for all management commands. In
295particular, one can authorize only specific public keys to create new Faces or change the
296forwarding strategy for specific namespaces. For more information about how to generate
297private/public key pair, generate self-signed certificate, and use this self-signed
298certificate to authorize NFD management commands refer to :ref:`How to configure NFD
299security` FAQ question.
300
301In the sample configuration file, all authorizations are disabled, effectively allowing
302anybody on the local machine to issue NFD management commands. **The sample file is
303intended only for demo purposes and MUST NOT be used in a production environment.**
304
305Running
306-------
307
308**You should not run ndnd or ndnd-tlv, otherwise NFD will not work correctly**
309
310Starting
311~~~~~~~~
312
313In order to use NFD, you need to start two separate daemons: ``nfd`` (the forwarder
314itself) and ``nrd`` (RIB manager that will manage all prefix registrations). The
315recommended way is to use `nfd-start` script:
316
317::
318
319 nfd-start
320
321On OS X it may ask for your keychain password or ask ``nfd/nrd wants to sign using key in
322your keychain.`` Enter your keychain password and click Always Allow.
323
324Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process.
325
326
327Connecting to remote NFDs
328~~~~~~~~~~~~~~~~~~~~~~~~~
329
330To create a UDP or TCP tunnel to remote NFD and create route toward it, use the following
331command in terminal:
332
333::
334
335 nfdc register /ndn udp://<other host>
336
337where ``<other host>`` is the name or IP address of the other host (e.g.,
338``udp://spurs.cs.ucla.edu``). This outputs:
339
340::
341
342 Successful in name registration: ControlParameters(Name: /ndn, FaceId: 260, Origin: 255, Cost: 0, Flags: 1, )
343
344The ``/ndn`` means that NFD will forward all Interests that start with ``/ndn`` through
345the face to the other host. If you only want to forward Interests with a certain prefix,
346use it instead of ``/ndn``. This only forwards Interests to the other host, but there is
347no "back route" for the other host to forward Interests to you. For that, you must go to
348the other host and use ``nfdc`` to add the route.
349
350The "back route" can also be automatically configured with ``nfd-autoreg``. For more
351information refer to :doc:`manpages/nfd-autoreg`.
352
353Playing with NFD
354----------------
355
356After you haved installed, configured, and started NFD, you can try to install and play
357with the following:
358
359Sample applications:
360
361- `Simple examples in ndn-cxx
Alexander Afanasyev508411e2014-12-16 13:27:59 -0800362 library <http://named-data.net/doc/ndn-cxx/current/examples.html>`__.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600363 If you have installed ndn-cxx from source, you already have compiled
364 these:
365
366 + examples/producer
367 + examples/consumer
368 + examples/consumer-with-timer
369
370 + tools/ndncatchunks3
371 + tools/ndnputchunks3
372
373- `Introductory examples of
374 NDN-CCL <http://redmine.named-data.net/projects/nfd/wiki/Getting_Started_-_Common_Client_Libraries#Install-the-Common-Client-Library>`__
375
376Real applications and libraries:
377
378 + `ndn-tlv-ping - Reachability Testing Tool for NDN
379 <https://github.com/named-data/ndn-tlv-ping>`__
380 + `ndn-traffic-generator - Traffic Generator For
381 NDN <https://github.com/named-data/ndn-traffic-generator>`__
382 + `repo-ng - Next generation of NDN
383 repository <https://github.com/named-data/repo-ng>`__
384 + `ChronoChat - Multi-user NDN chat
385 application <https://github.com/named-data/ChronoChat>`__
386 + `ChronoSync - Sync library for multiuser realtime applications for
387 NDN <https://github.com/named-data/ChronoSync>`__