blob: 76ccaf93b480f4e9c7f2379ac1ec6f270db36091 [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
19On Ubuntu 12.04, 13.10, or 14.04, NFD can be installed from NDN PPA repository. Refer to
20: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
75NFD binaries and related tools for Ubuntu 12.04 and 14.04 can be installed using PPA
76packages 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
91On Ubuntu **14.04**:
92
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
137
138 git clone https://github.com/named-data/ndn-cxx
139 cd ndn-cxx
140 git checkout ndn-cxx-0.2.0
141
142 cd ..
143
144 # Download NFD
145
146 git clone --recursive https://github.com/named-data/NFD
147 cd NFD
148 git checkout NFD-0.2.0
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700149
150Prerequisites
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600151~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700152
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600153- Install the `ndn-cxx library <http://named-data.net/doc/ndn-cxx/current/INSTALL.html>`_
154 and its requirements
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700155
156- ``libpcap``
157
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600158 Comes with the base system on OS X 10.8 and 10.9.
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700159
160 On Ubuntu >= 12.04:
161
162 ::
163
164 sudo apt-get install libpcap-dev
165
166To build manpages and API documentation:
167
168- ``doxygen``
169- ``graphviz``
170- ``python-sphinx``
171
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600172 On OS X 10.8 and 10.9 with MacPorts:
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700173
174 ::
175
176 sudo port install doxygen graphviz py27-sphinx sphinx_select
177 sudo port select sphinx py27-sphinx
178
179 On Ubuntu >= 12.04:
180
181 ::
182
183 sudo apt-get install doxygen graphviz python-sphinx
184
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700185
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600186Besides officially supported platforms, NFD is known to work on: Fedora 20, CentOS 6, Gentoo Linux,
187Raspberry Pi, OpenWRT, FreeBSD 10.0, and several other platforms. We are soliciting help
188with documenting common problems / pitfalls in installing/using NFD on different platforms
189on `NFD Wiki
190<http://redmine.named-data.net/projects/nfd/wiki/Wiki#Installation-experiences-for-selected-platforms>`__.
191
192
193Build
194~~~~~
195
196The following basic commands should be used to build NFD on Ubuntu:
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700197
198::
199
200 ./waf configure
201 ./waf
202 sudo ./waf install
203
Alexander Afanasyev6db058c2014-11-13 16:46:25 -0800204If you have installed `ndn-cxx` library and/or other dependencies into a non-standard paths, you
205may need to modify ``PKG_CONFIG_PATH`` environment variable before running ``./waf configure``.
206For example,
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700207
208::
209
Alexander Afanasyev6db058c2014-11-13 16:46:25 -0800210 export PKG_CONFIG_PATH=/custom/lib/pkgconfig:$PKG_CONFIG_PATH
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700211 ./waf configure
212 ./waf
213 sudo ./waf install
214
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600215
216Refer to ``./waf --help`` for more options that can be used during ``configure`` stage and
217how to properly configure and run NFD.
218
Alexander Afanasyev26181532014-05-07 23:38:51 -0700219Debug symbols
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600220~~~~~~~~~~~~~
Alexander Afanasyev26181532014-05-07 23:38:51 -0700221
222The default compiler flags enable debug symbols to be included in binaries. This
223potentially allows more meaningful debugging if NFD or other tools happen to crash.
224
225If it is undesirable, default flags can be easily overridden. The following example shows
226how to completely disable debug symbols and configure NFD to be installed into ``/usr``
227with configuration in ``/etc`` folder.
228
229::
230
231 CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
232 ./waf
233 sudo ./waf install
234
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700235Building documentation
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600236~~~~~~~~~~~~~~~~~~~~~~
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700237
238NFD tutorials and API documentation can be built using the following commands:
239
240::
241
242 # Full set of documentation (tutorials + API) in build/docs
243 ./waf docs
244
245 # Only tutorials in `build/docs`
246 ./waf sphinx
247
248 # Only API docs in `build/docs/doxygen`
249 ./waf doxgyen
250
251
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600252Manpages are automatically created and installed during the normal build process (e.g.,
253during ``./waf`` and ``./waf install``), if ``python-sphinx`` module is detected during
254``./waf configure`` stage. By default, manpages are installed into
Alexander Afanasyev284257b2014-04-11 14:16:51 -0700255``${PREFIX}/share/man`` (where default value for ``PREFIX`` is ``/usr/local``). This
256location can be changed during ``./waf configure`` stage using ``--prefix``,
257``--datarootdir``, or ``--mandir`` options.
258
259For more details, refer to ``./waf --help``.
Steve DiBenedetto62a93942014-08-24 17:13:52 -0600260
261
262Initial configuration
263---------------------
264
265.. note::
266 If you have installed NFD from binary packages, the package manager has already
267 installed initial configuration and you can safely skip this section.
268
269General
270~~~~~~~
271
272After installing NFD from source, you need to create a proper config file. If default
273location for ``./waf configure`` was used, this can be accomplished by simply copying the
274sample configuration file:
275
276::
277
278 sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
279
280NFD Security
281~~~~~~~~~~~~
282
283NFD provides mechanisms to enable strict authorization for all management commands. In
284particular, one can authorize only specific public keys to create new Faces or change the
285forwarding strategy for specific namespaces. For more information about how to generate
286private/public key pair, generate self-signed certificate, and use this self-signed
287certificate to authorize NFD management commands refer to :ref:`How to configure NFD
288security` FAQ question.
289
290In the sample configuration file, all authorizations are disabled, effectively allowing
291anybody on the local machine to issue NFD management commands. **The sample file is
292intended only for demo purposes and MUST NOT be used in a production environment.**
293
294Running
295-------
296
297**You should not run ndnd or ndnd-tlv, otherwise NFD will not work correctly**
298
299Starting
300~~~~~~~~
301
302In order to use NFD, you need to start two separate daemons: ``nfd`` (the forwarder
303itself) and ``nrd`` (RIB manager that will manage all prefix registrations). The
304recommended way is to use `nfd-start` script:
305
306::
307
308 nfd-start
309
310On OS X it may ask for your keychain password or ask ``nfd/nrd wants to sign using key in
311your keychain.`` Enter your keychain password and click Always Allow.
312
313Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process.
314
315
316Connecting to remote NFDs
317~~~~~~~~~~~~~~~~~~~~~~~~~
318
319To create a UDP or TCP tunnel to remote NFD and create route toward it, use the following
320command in terminal:
321
322::
323
324 nfdc register /ndn udp://<other host>
325
326where ``<other host>`` is the name or IP address of the other host (e.g.,
327``udp://spurs.cs.ucla.edu``). This outputs:
328
329::
330
331 Successful in name registration: ControlParameters(Name: /ndn, FaceId: 260, Origin: 255, Cost: 0, Flags: 1, )
332
333The ``/ndn`` means that NFD will forward all Interests that start with ``/ndn`` through
334the face to the other host. If you only want to forward Interests with a certain prefix,
335use it instead of ``/ndn``. This only forwards Interests to the other host, but there is
336no "back route" for the other host to forward Interests to you. For that, you must go to
337the other host and use ``nfdc`` to add the route.
338
339The "back route" can also be automatically configured with ``nfd-autoreg``. For more
340information refer to :doc:`manpages/nfd-autoreg`.
341
342Playing with NFD
343----------------
344
345After you haved installed, configured, and started NFD, you can try to install and play
346with the following:
347
348Sample applications:
349
350- `Simple examples in ndn-cxx
351 library <http://named-data.net/doc/ndn-cxx/0.2.0/examples.html>`__.
352 If you have installed ndn-cxx from source, you already have compiled
353 these:
354
355 + examples/producer
356 + examples/consumer
357 + examples/consumer-with-timer
358
359 + tools/ndncatchunks3
360 + tools/ndnputchunks3
361
362- `Introductory examples of
363 NDN-CCL <http://redmine.named-data.net/projects/nfd/wiki/Getting_Started_-_Common_Client_Libraries#Install-the-Common-Client-Library>`__
364
365Real applications and libraries:
366
367 + `ndn-tlv-ping - Reachability Testing Tool for NDN
368 <https://github.com/named-data/ndn-tlv-ping>`__
369 + `ndn-traffic-generator - Traffic Generator For
370 NDN <https://github.com/named-data/ndn-traffic-generator>`__
371 + `repo-ng - Next generation of NDN
372 repository <https://github.com/named-data/repo-ng>`__
373 + `ChronoChat - Multi-user NDN chat
374 application <https://github.com/named-data/ChronoChat>`__
375 + `ChronoSync - Sync library for multiuser realtime applications for
376 NDN <https://github.com/named-data/ChronoSync>`__