blob: ecb8b4ab049910115d5a6bfa1ecd95c104ca4268 [file] [log] [blame]
Getting Started with NFD
========================
Installing NFD from Binaries
----------------------------
We provide NFD binaries for the supported platforms, which are the preferred installation
method. In addition to simplifying installation, the binary release also includes
automatic initial configuration and platform-specific tools to automatically start NFD and
related daemons. In particular, on OS X and macOS NFD is controlled using `launchd
<https://github.com/named-data/NFD/tree/master/contrib/osx-launchd>`__ and on Ubuntu using
`upstart <https://github.com/named-data/NFD/tree/master/contrib/upstart>`__ mechanisms.
In both cases, `nfd-start` and `nfd-stop` scripts are convenience wrappers for launchd and
upstart.
On OS X and macOS, NFD can be installed with MacPorts. Refer to :ref:`Install NFD Using the NDN
MacPorts Repository on OS X and macOS` for more details.
On Ubuntu 14.04 and 16.04, NFD can be installed from NDN PPA repository. Refer to
:ref:`Install NFD Using the NDN PPA Repository on Ubuntu Linux`.
Future releases could include support for other platforms. Please send us feedback on the
platforms you're using, so we can prioritize our goals. We would also appreciate help
packaging the current NFD release for other platforms.
.. _Install NFD Using the NDN MacPorts Repository on OS X and macOS:
Install NFD Using the NDN MacPorts Repository on OS X and macOS
---------------------------------------------------------------
OS X and macOS users have the opportunity to seamlessly install and run NFD as well as other
related applications via `MacPorts <https://www.macports.org/>`_. If you are not using MacPorts
yet, go to the `MacPorts website <https://www.macports.org/install.php>`_ and install the
MacPorts package.
NFD and related ports are not part of the official MacPorts repository. In order to use
these ports, you will need to add the NDN MacPorts repository to your local configuration.
In particular, you will need to modify the list of source URLs for MacPorts. For example,
if your MacPorts are installed in ``/opt/local``, add the following line to
`/opt/local/etc/macports/sources.conf` before or after the default port repository:
::
rsync://macports.named-data.net/macports/
After this step, you can use ``sudo port selfupdate`` to fetch updated port definitions.
The following command will install NFD using MacPorts:
::
sudo port install nfd
.. note::
You have to have XCode installed on your machine. This can be installed from the
AppStore (free) on OS X 10.7 or later. Older editions of OS X can download an
appropriate version of XCode from http://developer.apple.com.
One advantage of using MacPorts is that you can easily upgrade NFD and other packages to
the latest version. The following commands will do this job:
::
sudo port selfupdate
sudo port upgrade nfd
.. _Install NFD Using the NDN PPA Repository on Ubuntu Linux:
Install NFD Using the NDN PPA Repository on Ubuntu Linux
--------------------------------------------------------
NFD binaries and related tools for Ubuntu 14.04 and 16.04 can be installed using PPA
packages from named-data repository. First, you will need to add ``named-data/ppa``
repository to binary package sources and update list of available packages.
Preliminary steps if you haven't used PPA packages before
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To simplify adding new PPA repositories, Ubuntu provides ``add-apt-repository`` tool,
which is not installed by default on some systems.
::
sudo apt-get install software-properties-common
Adding NDN PPA
~~~~~~~~~~~~~~
After installing ``add-apt-repository``, run the following command to add `NDN PPA
repository`_.
::
sudo add-apt-repository ppa:named-data/ppa
sudo apt-get update
Installing NFD and other NDN packages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After you have added `NDN PPA repository`_, NFD and other NDN packages can be easily
installed in a standard way, i.e., either using ``apt-get`` as shown below or using any
other package manager, such as Synaptic Package Manager:
::
sudo apt-get install nfd
For the list of available packages, refer to `NDN PPA repository`_ homepage.
.. _NDN PPA repository: https://launchpad.net/~named-data/+archive/ppa
Building from Source
--------------------
Downloading from Git
~~~~~~~~~~~~~~~~~~~~
The first step is to obtain the source code for ``NFD`` and, its main dependency, the
``ndn-cxx`` library. If you are not planning to work with the bleeding edge code, make
sure you checkout the correct release tag (e.g., ``*-0.2.0``) for both repositories:
::
# Download ndn-cxx
git clone https://github.com/named-data/ndn-cxx
# Download NFD
git clone --recursive https://github.com/named-data/NFD
Prerequisites
~~~~~~~~~~~~~
- Install the `ndn-cxx library <https://named-data.net/doc/ndn-cxx/current/INSTALL.html>`_
and its requirements
- ``pkg-config``
On OS X / macOS with MacPorts:
::
sudo port install pkgconfig
On Ubuntu:
::
sudo apt-get install pkg-config
- ``libpcap``
Comes with the base system on OS X / macOS.
On Ubuntu:
::
sudo apt-get install libpcap-dev
To build manpages and API documentation:
- ``doxygen``
- ``graphviz``
- ``python-sphinx``
On OS X / macOS with MacPorts:
::
sudo port install doxygen graphviz py27-sphinx sphinx_select
sudo port select sphinx py27-sphinx
On Ubuntu:
::
sudo apt-get install doxygen graphviz python-sphinx
Besides officially supported platforms, NFD is known to work on: Fedora 20, CentOS 6/7, Gentoo Linux,
Raspberry Pi, OpenWRT, FreeBSD 10.0, and several other platforms. We are soliciting help
with documenting common problems / pitfalls in installing/using NFD on different platforms
on `NFD Wiki
<https://redmine.named-data.net/projects/nfd/wiki/Wiki#Installation-experiences-for-selected-platforms>`__.
Build
~~~~~
The following basic commands should be used to build NFD on Ubuntu:
::
./waf configure
./waf
sudo ./waf install
If you have installed `ndn-cxx` library and/or other dependencies into a non-standard paths, you
may need to modify ``PKG_CONFIG_PATH`` environment variable before running ``./waf configure``.
For example,
::
export PKG_CONFIG_PATH=/custom/lib/pkgconfig:$PKG_CONFIG_PATH
./waf configure
./waf
sudo ./waf install
Refer to ``./waf --help`` for more options that can be used during ``configure`` stage and
how to properly configure and run NFD.
.. note::
If you are working on a source repository that has been compiled before, and you have
upgraded one of the dependencies, please execute ``./waf distclean`` to clear object files
and start over.
Debug symbols
~~~~~~~~~~~~~
The default compiler flags enable debug symbols to be included in binaries. This
potentially allows more meaningful debugging if NFD or other tools happen to crash.
If it is undesirable, default flags can be easily overridden. The following example shows
how to completely disable debug symbols and configure NFD to be installed into ``/usr``
with configuration in ``/etc`` folder.
::
CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
./waf
sudo ./waf install
Customize Compiler
~~~~~~~~~~~~~~~~~~
To choose a custom C++ compiler for building NFD, set the ``CXX`` environment variable
to point to the compiler binary. For example, when using the clang compiler on a Linux
system, use the following:
::
CXX=clang++ ./waf configure
Building documentation
~~~~~~~~~~~~~~~~~~~~~~
NFD tutorials and API documentation can be built using the following commands:
::
# Full set of documentation (tutorials + API) in build/docs
./waf docs
# Only tutorials in `build/docs`
./waf sphinx
# Only API docs in `build/docs/doxygen`
./waf doxgyen
Manpages are automatically created and installed during the normal build process (e.g.,
during ``./waf`` and ``./waf install``), if ``python-sphinx`` module is detected during
``./waf configure`` stage. By default, manpages are installed into
``${PREFIX}/share/man`` (where default value for ``PREFIX`` is ``/usr/local``). This
location can be changed during ``./waf configure`` stage using ``--prefix``,
``--datarootdir``, or ``--mandir`` options.
For more details, refer to ``./waf --help``.
Initial configuration
---------------------
.. note::
If you have installed NFD from binary packages, the package manager has already
installed initial configuration and you can safely skip this section.
General
~~~~~~~
After installing NFD from source, you need to create a proper config file. If default
location for ``./waf configure`` was used, this can be accomplished by simply copying the
sample configuration file:
::
sudo cp /usr/local/etc/ndn/nfd.conf.sample /usr/local/etc/ndn/nfd.conf
NFD Security
~~~~~~~~~~~~
NFD provides mechanisms to enable strict authorization for all management commands. In
particular, one can authorize only specific public keys to create new Faces or change the
forwarding strategy for specific namespaces. For more information about how to generate
private/public key pair, generate self-signed certificate, and use this self-signed
certificate to authorize NFD management commands refer to :ref:`How to configure NFD
security` FAQ question.
In the sample configuration file, all authorizations are disabled, effectively allowing
anybody on the local machine to issue NFD management commands. **The sample file is
intended only for demo purposes and MUST NOT be used in a production environment.**
Running
-------
**You should not run ndnd or ndnd-tlv, otherwise NFD will not work correctly**
Starting
~~~~~~~~
In order to use NFD, you need to start two separate daemons: ``nfd`` (the forwarder
itself) and ``nrd`` (RIB manager that will manage all prefix registrations). The
recommended way is to use `nfd-start` script:
::
nfd-start
On OS X it may ask for your keychain password or ask ``nfd/nrd wants to sign using key in
your keychain.`` Enter your keychain password and click Always Allow.
Later, you can stop NFD with ``nfd-stop`` or by simply killing the ``nfd`` process.
Connecting to remote NFDs
~~~~~~~~~~~~~~~~~~~~~~~~~
To create a UDP or TCP tunnel to remote NFD and create route toward it, use the following
command in terminal:
::
nfdc register /ndn udp://<other host>
where ``<other host>`` is the name or IP address of the other host (e.g.,
``udp://spurs.cs.ucla.edu``). This outputs:
::
Successful in name registration: ControlParameters(Name: /ndn, FaceId: 260, Origin: 255, Cost: 0, Flags: 1, )
The ``/ndn`` means that NFD will forward all Interests that start with ``/ndn`` through
the face to the other host. If you only want to forward Interests with a certain prefix,
use it instead of ``/ndn``. This only forwards Interests to the other host, but there is
no "back route" for the other host to forward Interests to you. For that, you must go to
the other host and use ``nfdc`` to add the route.
The "back route" can also be automatically configured with ``nfd-autoreg``. For more
information refer to :doc:`manpages/nfd-autoreg`.
Playing with NFD
----------------
After you haved installed, configured, and started NFD, you can try to install and play
with the following:
Sample applications:
- `Simple examples in ndn-cxx library <https://named-data.net/doc/ndn-cxx/current/examples.html>`_
If you have installed ndn-cxx from source, you already have compiled these:
+ examples/producer
+ examples/consumer
+ examples/consumer-with-timer
+ tools/ndncatchunks3
+ tools/ndnputchunks3
- `Introductory examples of NDN-CCL
<https://redmine.named-data.net/projects/application-development-documentation-guides/wiki/Step-By-Step_-_Common_Client_Libraries>`_
Real applications and libraries:
+ `ndn-tools - NDN Essential Tools <https://github.com/named-data/ndn-tools>`_
+ `ndn-traffic-generator - Traffic Generator For NDN
<https://github.com/named-data/ndn-traffic-generator>`_
+ `repo-ng - Next generation of NDN repository <https://github.com/named-data/repo-ng>`_
+ `ChronoChat - Multi-user NDN chat application <https://github.com/named-data/ChronoChat>`_
+ `ChronoSync - Sync library for multiuser realtime applications for NDN
<https://github.com/named-data/ChronoSync>`_