blob: 3d94d74fb616e0d16ea2d75e060f730ade35c555 [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 Afanasyev7c10b3b2015-01-20 12:24:27 -0800246Customize Compiler
247~~~~~~~~~~~~~~~~~~
248
249To customize compiler, set ``CXX`` environment variable to point to compiler binary and, in
250some case, specify type of the compiler using ``--check-cxx-compiler``. For example, when
251using clang compiler on Linux system, use the following:
252
253::
254
255 CXX=clang++ ./waf configure --check-cxx-compiler=clang++
256
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700257Building documentation
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600258~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700259
260NFD tutorials and API documentation can be built using the following commands:
261
262::
263
264 # Full set of documentation (tutorials + API) in build/docs
265 ./waf docs
266
267 # Only tutorials in `build/docs`
268 ./waf sphinx
269
270 # Only API docs in `build/docs/doxygen`
271 ./waf doxgyen
272
273
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600274Manpages are automatically created and installed during the normal build process (e.g.,
275during ``./waf`` and ``./waf install``), if ``python-sphinx`` module is detected during
276``./waf configure`` stage. By default, manpages are installed into
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700277``${PREFIX}/share/man`` (where default value for ``PREFIX`` is ``/usr/local``). This
278location can be changed during ``./waf configure`` stage using ``--prefix``,
279``--datarootdir``, or ``--mandir`` options.
280
281For more details, refer to ``./waf --help``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600282
283
284Initial configuration
285---------------------
286
287.. note::
288 If you have installed NFD from binary packages, the package manager has already
289 installed initial configuration and you can safely skip this section.
290
291General
292~~~~~~~
293
294After installing NFD from source, you need to create a proper config file. If default
295location for ``./waf configure`` was used, this can be accomplished by simply copying the
296sample configuration file:
297
298::
299
300 sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
301
302NFD Security
303~~~~~~~~~~~~
304
305NFD provides mechanisms to enable strict authorization for all management commands. In
306particular, one can authorize only specific public keys to create new Faces or change the
307forwarding strategy for specific namespaces. For more information about how to generate
308private/public key pair, generate self-signed certificate, and use this self-signed
309certificate to authorize NFD management commands refer to :ref:`How to configure NFD
310security` FAQ question.
311
312In the sample configuration file, all authorizations are disabled, effectively allowing
313anybody on the local machine to issue NFD management commands. **The sample file is
314intended only for demo purposes and MUST NOT be used in a production environment.**
315
316Running
317-------
318
319**You should not run ndnd or ndnd-tlv, otherwise NFD will not work correctly**
320
321Starting
322~~~~~~~~
323
324In order to use NFD, you need to start two separate daemons: ``nfd`` (the forwarder
325itself) and ``nrd`` (RIB manager that will manage all prefix registrations). The
326recommended way is to use `nfd-start` script:
327
328::
329
330 nfd-start
331
332On OS X it may ask for your keychain password or ask ``nfd/nrd wants to sign using key in
333your keychain.`` Enter your keychain password and click Always Allow.
334
335Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process.
336
337
338Connecting to remote NFDs
339~~~~~~~~~~~~~~~~~~~~~~~~~
340
341To create a UDP or TCP tunnel to remote NFD and create route toward it, use the following
342command in terminal:
343
344::
345
346 nfdc register /ndn udp://<other host>
347
348where ``<other host>`` is the name or IP address of the other host (e.g.,
349``udp://spurs.cs.ucla.edu``). This outputs:
350
351::
352
353 Successful in name registration: ControlParameters(Name: /ndn, FaceId: 260, Origin: 255, Cost: 0, Flags: 1, )
354
355The ``/ndn`` means that NFD will forward all Interests that start with ``/ndn`` through
356the face to the other host. If you only want to forward Interests with a certain prefix,
357use it instead of ``/ndn``. This only forwards Interests to the other host, but there is
358no "back route" for the other host to forward Interests to you. For that, you must go to
359the other host and use ``nfdc`` to add the route.
360
361The "back route" can also be automatically configured with ``nfd-autoreg``. For more
362information refer to :doc:`manpages/nfd-autoreg`.
363
364Playing with NFD
365----------------
366
367After you haved installed, configured, and started NFD, you can try to install and play
368with the following:
369
370Sample applications:
371
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800372- `Simple examples in ndn-cxx library <http://named-data.net/doc/ndn-cxx/current/examples.html>`_
373
374 If you have installed ndn-cxx from source, you already have compiled these:
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600375
376 + examples/producer
377 + examples/consumer
378 + examples/consumer-with-timer
379
380 + tools/ndncatchunks3
381 + tools/ndnputchunks3
382
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800383- `Introductory examples of NDN-CCL
384 <http://redmine.named-data.net/projects/application-development-documentation-guides/wiki/Step-By-Step_-_Common_Client_Libraries>`_
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600385
386Real applications and libraries:
387
388 + `ndn-tlv-ping - Reachability Testing Tool for NDN
Alexander Afanasyev7c10b3b2015-01-20 12:24:27 -0800389 <https://github.com/named-data/ndn-tlv-ping>`_
390 + `ndn-traffic-generator - Traffic Generator For NDN
391 <https://github.com/named-data/ndn-traffic-generator>`_
392 + `repo-ng - Next generation of NDN repository <https://github.com/named-data/repo-ng>`_
393 + `ChronoChat - Multi-user NDN chat application <https://github.com/named-data/ChronoChat>`_
394 + `ChronoSync - Sync library for multiuser realtime applications for NDN
395 <https://github.com/named-data/ChronoSync>`_