Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 1 | Getting Started with NFD |
| 2 | ======================== |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 3 | |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 4 | Installing NFD from Binaries |
| 5 | ---------------------------- |
| 6 | |
| 7 | We provide NFD binaries for the supported platforms, which are the preferred installation |
| 8 | method. In addition to simplifying installation, the binary release also includes |
| 9 | automatic initial configuration and platform-specific tools to automatically start NFD and |
| 10 | related 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. |
| 13 | In both cases, `nfd-start` and `nfd-stop` scripts are convenience wrappers for launchd and |
| 14 | upstart. |
| 15 | |
| 16 | On OS X, NFD can be installed with MacPorts. Refer to :ref:`Install NFD Using the NDN |
| 17 | MacPorts Repository on OS X` for more details. |
| 18 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 19 | On Ubuntu 12.04, 14.04, or 14.10 NFD can be installed from NDN PPA repository. Refer to |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 20 | :ref:`Install NFD Using the NDN PPA Repository on Ubuntu Linux`. |
| 21 | |
| 22 | Future releases could include support for other platforms. Please send us feedback on the |
| 23 | platforms you're using, so we can prioritize our goals. We would also appreciate help |
| 24 | packaging the current NFD release for other platforms. |
| 25 | |
| 26 | |
| 27 | .. _Install NFD Using the NDN MacPorts Repository on OS X: |
| 28 | |
| 29 | Install NFD Using the NDN MacPorts Repository on OS X |
| 30 | ----------------------------------------------------- |
| 31 | |
| 32 | OS X users have the opportunity to seamlessly install and run NFD as well as other related |
| 33 | applications via `MacPorts <https://www.macports.org/>`_. If you are not using MacPorts |
| 34 | yet, go to the `MacPorts website <https://www.macports.org/install.php>`_ and install the |
| 35 | MacPorts package. |
| 36 | |
| 37 | NFD and related ports are not part of the official MacPorts repository. In order to use |
| 38 | these ports, you will need to add the NDN MacPorts repository to your local configuration. |
| 39 | In particular, you will need to modify the list of source URLs for MacPorts. For example, |
| 40 | if 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 | |
| 47 | After this step, you can use ``sudo port selfupdate`` to fetch updated port definitions. |
| 48 | |
| 49 | The 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 | |
| 62 | One advantage of using MacPorts is that you can easily upgrade NFD and other packages to |
| 63 | the 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 | |
| 72 | Install NFD Using the NDN PPA Repository on Ubuntu Linux |
| 73 | -------------------------------------------------------- |
| 74 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 75 | NFD binaries and related tools for Ubuntu 12.04, 14.04, or 14.10 can be installed using PPA |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 76 | packages from named-data repository. First, you will need to add ``named-data/ppa`` |
| 77 | repository to binary package sources and update list of available packages. |
| 78 | |
| 79 | Preliminary steps if you haven't used PPA packages before |
| 80 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 81 | |
| 82 | To simplify adding new PPA repositories, Ubuntu provides ``add-apt-repository`` tool, |
| 83 | which is not installed by default on some platforms. |
| 84 | |
| 85 | On Ubuntu **12.04**: |
| 86 | |
| 87 | :: |
| 88 | |
| 89 | sudo apt-get install python-software-properties |
| 90 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 91 | On Ubuntu **14.04** or **14.10**: |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 92 | |
| 93 | :: |
| 94 | |
| 95 | sudo apt-get install software-properties-common |
| 96 | |
| 97 | |
| 98 | Adding NDN PPA |
| 99 | ~~~~~~~~~~~~~~ |
| 100 | |
| 101 | After installing ``add-apt-repository``, run the following command to add `NDN PPA |
| 102 | repository`_. |
| 103 | |
| 104 | :: |
| 105 | |
| 106 | sudo add-apt-repository ppa:named-data/ppa |
| 107 | sudo apt-get update |
| 108 | |
| 109 | Installing NFD and other NDN packages |
| 110 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 111 | |
| 112 | After you have added `NDN PPA repository`_, NFD and other NDN packages can be easily |
| 113 | installed in a standard way, i.e., either using ``apt-get`` as shown below or using any |
| 114 | other package manager, such as Synaptic Package Manager: |
| 115 | |
| 116 | :: |
| 117 | |
| 118 | sudo apt-get install nfd |
| 119 | |
| 120 | For the list of available packages, refer to `NDN PPA repository`_ homepage. |
| 121 | |
| 122 | .. _NDN PPA repository: https://launchpad.net/~named-data/+archive/ppa |
| 123 | |
| 124 | Building from Source |
| 125 | -------------------- |
| 126 | |
| 127 | Downloading from Git |
| 128 | ~~~~~~~~~~~~~~~~~~~~ |
| 129 | |
| 130 | The 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 |
| 132 | sure you checkout the correct release tag (e.g., ``*-0.2.0``) for both repositories: |
| 133 | |
| 134 | :: |
| 135 | |
| 136 | # Download ndn-cxx |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 137 | git clone https://github.com/named-data/ndn-cxx |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 138 | |
| 139 | # Download NFD |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 140 | git clone --recursive https://github.com/named-data/NFD |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 141 | |
| 142 | Prerequisites |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 143 | ~~~~~~~~~~~~~ |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 144 | |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 145 | - Install the `ndn-cxx library <http://named-data.net/doc/ndn-cxx/current/INSTALL.html>`_ |
| 146 | and its requirements |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 147 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 148 | - ``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 Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 162 | - ``libpcap`` |
| 163 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 164 | Comes with the base system on OS X 10.8, 10.9, and 10.10. |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 165 | |
| 166 | On Ubuntu >= 12.04: |
| 167 | |
| 168 | :: |
| 169 | |
| 170 | sudo apt-get install libpcap-dev |
| 171 | |
| 172 | To build manpages and API documentation: |
| 173 | |
| 174 | - ``doxygen`` |
| 175 | - ``graphviz`` |
| 176 | - ``python-sphinx`` |
| 177 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 178 | On OS X 10.8, 10.9, and 10.10 with MacPorts: |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 179 | |
| 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 Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 191 | |
Junxiao Shi | e5e1e25 | 2014-12-13 22:07:35 -0700 | [diff] [blame] | 192 | Besides officially supported platforms, NFD is known to work on: Fedora 20, CentOS 6/7, Gentoo Linux, |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 193 | Raspberry Pi, OpenWRT, FreeBSD 10.0, and several other platforms. We are soliciting help |
| 194 | with documenting common problems / pitfalls in installing/using NFD on different platforms |
| 195 | on `NFD Wiki |
| 196 | <http://redmine.named-data.net/projects/nfd/wiki/Wiki#Installation-experiences-for-selected-platforms>`__. |
| 197 | |
| 198 | |
| 199 | Build |
| 200 | ~~~~~ |
| 201 | |
| 202 | The following basic commands should be used to build NFD on Ubuntu: |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 203 | |
| 204 | :: |
| 205 | |
| 206 | ./waf configure |
| 207 | ./waf |
| 208 | sudo ./waf install |
| 209 | |
Alexander Afanasyev | 6db058c | 2014-11-13 16:46:25 -0800 | [diff] [blame] | 210 | If you have installed `ndn-cxx` library and/or other dependencies into a non-standard paths, you |
| 211 | may need to modify ``PKG_CONFIG_PATH`` environment variable before running ``./waf configure``. |
| 212 | For example, |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 213 | |
| 214 | :: |
| 215 | |
Alexander Afanasyev | 6db058c | 2014-11-13 16:46:25 -0800 | [diff] [blame] | 216 | export PKG_CONFIG_PATH=/custom/lib/pkgconfig:$PKG_CONFIG_PATH |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 217 | ./waf configure |
| 218 | ./waf |
| 219 | sudo ./waf install |
| 220 | |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 221 | |
| 222 | Refer to ``./waf --help`` for more options that can be used during ``configure`` stage and |
| 223 | how to properly configure and run NFD. |
| 224 | |
Alexander Afanasyev | 508411e | 2014-12-16 13:27:59 -0800 | [diff] [blame] | 225 | .. 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 Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 230 | Debug symbols |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 231 | ~~~~~~~~~~~~~ |
Alexander Afanasyev | 2618153 | 2014-05-07 23:38:51 -0700 | [diff] [blame] | 232 | |
| 233 | The default compiler flags enable debug symbols to be included in binaries. This |
| 234 | potentially allows more meaningful debugging if NFD or other tools happen to crash. |
| 235 | |
| 236 | If it is undesirable, default flags can be easily overridden. The following example shows |
| 237 | how to completely disable debug symbols and configure NFD to be installed into ``/usr`` |
| 238 | with configuration in ``/etc`` folder. |
| 239 | |
| 240 | :: |
| 241 | |
| 242 | CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc |
| 243 | ./waf |
| 244 | sudo ./waf install |
| 245 | |
Alexander Afanasyev | 7c10b3b | 2015-01-20 12:24:27 -0800 | [diff] [blame^] | 246 | Customize Compiler |
| 247 | ~~~~~~~~~~~~~~~~~~ |
| 248 | |
| 249 | To customize compiler, set ``CXX`` environment variable to point to compiler binary and, in |
| 250 | some case, specify type of the compiler using ``--check-cxx-compiler``. For example, when |
| 251 | using clang compiler on Linux system, use the following: |
| 252 | |
| 253 | :: |
| 254 | |
| 255 | CXX=clang++ ./waf configure --check-cxx-compiler=clang++ |
| 256 | |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 257 | Building documentation |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 258 | ~~~~~~~~~~~~~~~~~~~~~~ |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 259 | |
| 260 | NFD 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 DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 274 | Manpages are automatically created and installed during the normal build process (e.g., |
| 275 | during ``./waf`` and ``./waf install``), if ``python-sphinx`` module is detected during |
| 276 | ``./waf configure`` stage. By default, manpages are installed into |
Alexander Afanasyev | 284257b | 2014-04-11 14:16:51 -0700 | [diff] [blame] | 277 | ``${PREFIX}/share/man`` (where default value for ``PREFIX`` is ``/usr/local``). This |
| 278 | location can be changed during ``./waf configure`` stage using ``--prefix``, |
| 279 | ``--datarootdir``, or ``--mandir`` options. |
| 280 | |
| 281 | For more details, refer to ``./waf --help``. |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 282 | |
| 283 | |
| 284 | Initial 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 | |
| 291 | General |
| 292 | ~~~~~~~ |
| 293 | |
| 294 | After installing NFD from source, you need to create a proper config file. If default |
| 295 | location for ``./waf configure`` was used, this can be accomplished by simply copying the |
| 296 | sample configuration file: |
| 297 | |
| 298 | :: |
| 299 | |
| 300 | sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf |
| 301 | |
| 302 | NFD Security |
| 303 | ~~~~~~~~~~~~ |
| 304 | |
| 305 | NFD provides mechanisms to enable strict authorization for all management commands. In |
| 306 | particular, one can authorize only specific public keys to create new Faces or change the |
| 307 | forwarding strategy for specific namespaces. For more information about how to generate |
| 308 | private/public key pair, generate self-signed certificate, and use this self-signed |
| 309 | certificate to authorize NFD management commands refer to :ref:`How to configure NFD |
| 310 | security` FAQ question. |
| 311 | |
| 312 | In the sample configuration file, all authorizations are disabled, effectively allowing |
| 313 | anybody on the local machine to issue NFD management commands. **The sample file is |
| 314 | intended only for demo purposes and MUST NOT be used in a production environment.** |
| 315 | |
| 316 | Running |
| 317 | ------- |
| 318 | |
| 319 | **You should not run ndnd or ndnd-tlv, otherwise NFD will not work correctly** |
| 320 | |
| 321 | Starting |
| 322 | ~~~~~~~~ |
| 323 | |
| 324 | In order to use NFD, you need to start two separate daemons: ``nfd`` (the forwarder |
| 325 | itself) and ``nrd`` (RIB manager that will manage all prefix registrations). The |
| 326 | recommended way is to use `nfd-start` script: |
| 327 | |
| 328 | :: |
| 329 | |
| 330 | nfd-start |
| 331 | |
| 332 | On OS X it may ask for your keychain password or ask ``nfd/nrd wants to sign using key in |
| 333 | your keychain.`` Enter your keychain password and click Always Allow. |
| 334 | |
| 335 | Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process. |
| 336 | |
| 337 | |
| 338 | Connecting to remote NFDs |
| 339 | ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 340 | |
| 341 | To create a UDP or TCP tunnel to remote NFD and create route toward it, use the following |
| 342 | command in terminal: |
| 343 | |
| 344 | :: |
| 345 | |
| 346 | nfdc register /ndn udp://<other host> |
| 347 | |
| 348 | where ``<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 | |
| 355 | The ``/ndn`` means that NFD will forward all Interests that start with ``/ndn`` through |
| 356 | the face to the other host. If you only want to forward Interests with a certain prefix, |
| 357 | use it instead of ``/ndn``. This only forwards Interests to the other host, but there is |
| 358 | no "back route" for the other host to forward Interests to you. For that, you must go to |
| 359 | the other host and use ``nfdc`` to add the route. |
| 360 | |
| 361 | The "back route" can also be automatically configured with ``nfd-autoreg``. For more |
| 362 | information refer to :doc:`manpages/nfd-autoreg`. |
| 363 | |
| 364 | Playing with NFD |
| 365 | ---------------- |
| 366 | |
| 367 | After you haved installed, configured, and started NFD, you can try to install and play |
| 368 | with the following: |
| 369 | |
| 370 | Sample applications: |
| 371 | |
Alexander Afanasyev | 7c10b3b | 2015-01-20 12:24:27 -0800 | [diff] [blame^] | 372 | - `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 DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 375 | |
| 376 | + examples/producer |
| 377 | + examples/consumer |
| 378 | + examples/consumer-with-timer |
| 379 | |
| 380 | + tools/ndncatchunks3 |
| 381 | + tools/ndnputchunks3 |
| 382 | |
Alexander Afanasyev | 7c10b3b | 2015-01-20 12:24:27 -0800 | [diff] [blame^] | 383 | - `Introductory examples of NDN-CCL |
| 384 | <http://redmine.named-data.net/projects/application-development-documentation-guides/wiki/Step-By-Step_-_Common_Client_Libraries>`_ |
Steve DiBenedetto | 62a9394 | 2014-08-24 17:13:52 -0600 | [diff] [blame] | 385 | |
| 386 | Real applications and libraries: |
| 387 | |
| 388 | + `ndn-tlv-ping - Reachability Testing Tool for NDN |
Alexander Afanasyev | 7c10b3b | 2015-01-20 12:24:27 -0800 | [diff] [blame^] | 389 | <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>`_ |