update gtk documentation a bit
[oweals/gnunet.git] / doc / documentation / chapters / installation.texi
index 07853313ba8c061d4aff2252947a1d613ee6a305..f2042033e336e9482f4131e2d564c3f15ad19875 100644 (file)
@@ -6,8 +6,8 @@ setup (configure, start) GNUnet @value{VERSION}. After following these
 instructions you should be able to install and then start user-interfaces
 to interact with the network.
 
-Note: This manual is far from complete, and we welcome informed
-contributions, be it in the form of new chapters or insightful comments.
+Note: This manual is far from complete, and we welcome contributions, be
+it in the form of new chapters or insightful comments.
 
 @menu
 * Dependencies::
@@ -19,6 +19,7 @@ contributions, be it in the form of new chapters or insightful comments.
 * Build instructions for Debian 7.5::
 * Installing GNUnet from Git on Ubuntu 14.4::
 * Build instructions for Debian 8::
+@c * Build instructions for OpenBSD 6.2::
 * Outdated build instructions for previous revisions::
 @c * Portable GNUnet::
 * The graphical configuration interface::
@@ -101,7 +102,7 @@ recommended for first-time users)}
 
 These applications must be installed for various experimental or otherwise
 optional features such as @command{gnunet-conversation},
-and @command{gnunet-gtk} (most of these features are only build if you
+and @command{gnunet-conversation-gtk} (most of these features are only build if you
 configure GNUnet with @command{--enable-experimental}):
 
 @itemize @bullet
@@ -122,6 +123,8 @@ optional (for @command{gnunet-gtk})
 optional (for @command{gnunet-gtk})
 @item libqrencode @geq{} 3.0,
 optional (for @command{gnunet-namestore-gtk})
+@item libpbc @geq{} 0.5.14, optional for Attribute-Based Encryption and Identity Provider functionality
+@item libgabe (https://github.com/schanzen/libgabe), optional for Attribute-Based Encryption and Identity Provider functionality
 @end itemize
 
 @node Internal dependencies
@@ -291,7 +294,7 @@ If you want to be able to enable DEBUG-level log messages, add
 @command{./configure} command.
 @code{DEBUG}-level log messages are in English only and
 should only be useful for developers (or for filing
-really detailed bug reports). 
+really detailed bug reports).
 
 Finally, you probably want to compile @command{gnunet-gtk}, which
 includes @command{gnunet-setup} (a graphical tool for
@@ -386,10 +389,9 @@ For those services, systems with more than one user may require each user
 to specify a different port number in their personal configuration file.
 
 Finally, the user should perform the basic initial setup for the GNU Name
-System (GNS). This is done by running two commands:
+System (GNS) certificate authority. This is done by running:
 
 @example
-$ gnunet-gns-import.sh
 $ gnunet-gns-proxy-setup-ca
 @end example
 
@@ -417,7 +419,7 @@ hosts: files gns [NOTFOUND=return] mdns4_minimal \
 
 @c FIXME: Document new behavior.
 You might want to make sure that @file{/lib/libnss_gns.so.2} exists on
-your system, it should have been created during the installation. 
+your system, it should have been created during the installation.
 
 @node Build instructions for Ubuntu 12.04 using Git
 @section Build instructions for Ubuntu 12.04 using Git
@@ -452,61 +454,23 @@ $ sudo apt-get install automake autopoint autoconf libtool
 @node Install libgcrypt 1.6 and libgpg-error
 @subsection Install libgcrypt 1.6 and libgpg-error
 
-@example
-$ wget ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.12.tar.bz2
-$ tar xf libgpg-error-1.12.tar.bz2
-$ cd libgpg-error-1.12
-$ ./configure
-$ sudo make install ; cd ..
-@end example
+@ref{generic source installation - libgpg-error}
 
 @node Install gnutls with DANE support
 @subsection Install gnutls with DANE support
 
-@example
-$ wget http://www.lysator.liu.se/~nisse/archive/nettle-2.7.1.tar.gz
-$ tar xf nettle-2.7.1.tar.gz
-$ cd nettle-2.7.1
-$ ./configure
-$ sudo make install ; cd ..
-@end example
-
-@example
-$ wget https://www.nlnetlabs.nl/downloads/ldns/ldns-1.6.16.tar.gz
-$ tar xf ldns-1.6.16.tar.gz
-$ cd ldns-1.6.16
-$ ./configure
-$ sudo make install ; cd ..
-@end example
-
-@example
-$ wget https://unbound.net/downloads/unbound-1.4.21.tar.gz
-$ tar xf unbound-1.4.21.tar.gz
-$ cd unbound-1.4.21
-$ ./configure
-$ sudo make install ; cd ..
-@end example
-
-@example
-$ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.17.tar.xz
-$ tar xf gnutls-3.1.17.tar.xz
-$ cd gnutls-3.1.17
-$ ./configure
-$ sudo make install ; cd ..
-@end example
-
-@example
-$ wget ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.6.0.tar.bz2
-$ tar xf libgcrypt-1.6.0.tar.bz2
-$ cd libgcrypt-1.6.0
-$ ./configure
-$ sudo make install ; cd ..
-@end example
+@itemize @bullet
+@item @ref{generic source installation - nettle}
+@item @ref{generic source installation - ldns}
+@item @ref{generic source installation - libunbound/unbound}
+@item @ref{generic source installation - gnutls}
+@item @ref{generic source installation - libgcrypt}
+@end itemize
 
 @node Install libgnurl
 @subsection Install libgnurl
 
-Follow @ref{generic source installation - libgnurl}.
+Follow the @ref{generic source installation - libgnurl}.
 
 @node Install libmicrohttpd from Git
 @subsection Install libmicrohttpd from Git
@@ -709,6 +673,7 @@ sources might differ in ways that are only minimal different
 
 @node generic source installation - nettle
 @subsection generic source installation - nettle
+
 @example
 $ wget http://www.lysator.liu.se/~nisse/archive/nettle-2.7.1.tar.gz
 $ tar xf nettle-2.7.1.tar.gz
@@ -719,6 +684,7 @@ $ sudo make install ; cd ..
 
 @node generic source installation - ldns
 @subsection generic source installation - ldns
+
 @example
 $ wget https://www.nlnetlabs.nl/downloads/ldns/ldns-1.6.16.tar.gz
 $ tar xf ldns-1.6.16.tar.gz
@@ -729,6 +695,7 @@ $ sudo make install ; cd ..
 
 @node generic source installation - libunbound/unbound
 @subsection generic source installation - libunbound/unbound
+
 @example
 $ wget https://unbound.net/downloads/unbound-1.4.21.tar.gz
 $ tar xf unbound-1.4.21.tar.gz
@@ -739,6 +706,7 @@ $ sudo make install ; cd ..
 
 @node generic source installation - libav
 @subsection generic source installation - libav
+
 @example
 $ wget https://libav.org/releases/libav-9.10.tar.xz
 $ cd libav-0.9 ; ./configure --enable-shared;
@@ -747,6 +715,7 @@ $ make; sudo make install; cd ..
 
 @node generic source installation - libextractor
 @subsection generic source installation - libextractor
+
 @example
 $ wget https://ftp.gnu.org/gnu/libextractor/libextractor-1.3.tar.gz
 $ tar xvf libextractor-1.3.tar.gz
@@ -756,6 +725,7 @@ $ make ; sudo make install; cd ..
 
 @node generic source installation - libgpg-error
 @subsection generic source installation - libgpg-error
+
 @example
 $ wget https://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.12.tar.bz2
 $ tar xvf libgpg-error-1.12.tar.bz2
@@ -774,19 +744,36 @@ $ make ; sudo make install ; cd ..
 
 @node generic source installation - gnutls
 @subsection generic source installation - gnutls
+
 @example
 $ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2/gnutls-3.2.7.tar.xz
 $ tar xvf gnutls-3.2.7.tar.xz
-$ cd gnutls-3.2.7 ; ./configure;
-$ make ; sudo make install ; cd ..
+$ cd gnutls-3.2.7
+@end example
+
+@noindent
+If you want a GnuTLS with DANE functionality (recommended for GNUnet),
+you have to compile it against libunbound. Assuming that libunbound
+is installed on your system:
+
+@example
+$ ./configure --enable-libdane
 @end example
 
 @noindent
-If you want a GnuTLS with DANE functionality, you have to compile
-it against libunbound.
+Note that the build system of GnuTLS should pick up libunbound without
+the explicit mention of @code{--enable-libdane}.
+If you don't want libdane support you should pass @code{--disable-libdane}
+instead.
+
+@example
+$ ./configure
+$ make ; sudo make install ; cd ..
+@end example
 
 @node generic source installation - libmicrohttpd
 @subsection generic source installation - libmicrohttpd
+
 @example
 $ wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.33.tar.gz
 $ tar xvf libmicrohttpd-0.9.33.tar.gz
@@ -796,20 +783,39 @@ $ make ; sudo make install ; cd ..
 
 @node generic source installation - libgnurl
 @subsection generic source installation - libgnurl
+
+Example installation of libgnurl version 7.57.0 from source.
+
 @example
-$ wget https://gnunet.org/sites/default/files/gnurl-7.34.0.tar.bz2
-$ tar xvf gnurl-7.34.0.tar.bz2
-$ cd gnurl-7.34.0
-$ ./configure --enable-ipv6 --with-gnutls=/usr/local --without-libssh2 \
- --without-libmetalink --without-winidn --without-librtmp \
- --without-nghttp2 --without-nss --without-cyassl --without-polarssl \
- --without-ssl --without-winssl --without-darwinssl --disable-sspi \
- --disable-ntlm-wb --disable-ldap --disable-rtsp --disable-dict \
- --disable-telnet --disable-tftp --disable-pop3 --disable-imap \
- --disable-smtp --disable-gopher --disable-file --disable-ftp
+$ wget https://ftp.gnu.org/gnu/gnunet/gnurl-7.57.0.tar.xz
+$ wget https://ftp.gnu.org/gnu/gnunet/gnurl-7.57.0.tar.xz.sig
+$ gpg --verify gnurl-7.57.0.tar.xz.sig
+@end example
+
+@noindent
+If that command fails because you do not have the required public key,
+then run this command to import it:
+
+@example
+$ gpg --keyserver pgp.mit.edu --recv-keys A88C8ADD129828D7EAC02E52E22F9BBFEE348588
+@end example
+
+@noindent
+and rerun the gpg --verify command.
+
+@example
+$ tar xvf gnurl-7.57.0.tar.xz
+$ cd gnurl-7.57.0
+$ ./configure --disable-ntlm-wb
 $ make ; sudo make install; cd ..
 @end example
 
+You have now build and installed libgnurl from source.
+
+@menu
+* Fixing libgnurl build issues::
+@end menu
+
 @node Fixing libgnurl build issues
 @subsubsection Fixing libgnurl build issues
 
@@ -1411,7 +1417,7 @@ as a normal user.
 We begin by installing a few Debian packages from stable:
 
 @example
-# apt-get install gcc make python-zbar libltdl-dev libsqlite3-dev \ 
+# apt-get install gcc make python-zbar libltdl-dev libsqlite3-dev \
 libunistring-dev libopus-dev libpulse-dev openssl libglpk-dev texlive \
 libidn11-dev libmysqlclient-dev libpq-dev libarchive-dev libbz2-dev \
 libflac-dev libgif-dev libglib2.0-dev libgtk-3-dev libmpeg2-4-dev \
@@ -1466,6 +1472,9 @@ with the default Sqlite database. Sqlite is usually fine for most
 applications, but MySQL can offer better performance and Postgres better
 resillience.
 
+@c @node Build instructions for OpenBSD 6.2
+@c @section Build instructions for OpenBSD 6.2
+
 @node Outdated build instructions for previous revisions
 @section Outdated build instructions for previous revisions
 
@@ -1554,20 +1563,7 @@ $ cd ..
 
 Install libgnurl:
 
-@example
-$ wget https://gnunet.org/sites/default/files/gnurl-7.35.0.tar.bz2
-$ tar xf gnurl-7.35.0.tar.bz2
-$ cd gnurl-7.35.0
-$ ./configure --enable-ipv6 --with-gnutls --without-libssh2 \
---without-libmetalink --without-winidn --without-librtmp
---without-nghttp2 --without-nss --without-cyassl --without-polarssl \
---without-ssl --without-winssl --without-darwinssl --disable-sspi \
---disable-ntlm-wb --disable-ldap --disable-rtsp --disable-dict \
---disable-telnet --disable-tftp --disable-pop3 --disable-imap \
---disable-smtp --disable-gopher --disable-file --disable-ftp
-$ sudo make install@
-$ cd ..@
-@end example
+@pxref{generic source installation - libgnurl}.
 
 Install GNUnet:
 
@@ -1636,7 +1632,7 @@ have to compile it from source:
 @item Unzip the downloaded source tarball using your favourite
 unzipper application In the MSYS shell
 
-@item change to the respective directory 
+@item change to the respective directory
 
 @item Configure glpk for "i686-pc-mingw32":
 
@@ -1784,7 +1780,7 @@ $ make install
 This document is a @b{DEPRECATED} installation guide for GNUnet on
 Windows.
 It will not work for recent GNUnet versions, but maybe it will be of
-some use if problems arise. 
+some use if problems arise.
 
 The Windows build uses a UNIX emulator for Windows,
 @uref{http://www.mingw.org/, MinGW}, to build the executable modules.
@@ -1802,7 +1798,7 @@ We regret any inconvenience, and if you have problems, please report them.
 * Installer::
 * Source::
 @end menu
-     
+
 @node Hardware and OS requirements
 @subsubsection Hardware and OS requirements
 
@@ -1881,7 +1877,7 @@ This batch file opens a shell which is used to invoke the build
 processes.
 MinGW's standard shell (@command{msys.bat}) is not suitable
 because it opens a separate console window.
-On Vista, @command{bash.bat} needs to be run as Administrator. 
+On Vista, @command{bash.bat} needs to be run as Administrator.
 
 @item
 Start @command{bash.sh} and rename
@@ -1951,7 +1947,7 @@ directory (@file{c:\mingw\mingw}).
 
 @item @strong{SQLite}@
 GNUnet uses the SQLite database to store data.
-Get the prebuilt binary from here and unpack it to your MinGW directory. 
+Get the prebuilt binary from here and unpack it to your MinGW directory.
 
 @item @strong{MySQL}@
 As an alternative to SQLite, GNUnet also supports MySQL.
@@ -1987,7 +1983,7 @@ dlltool --input-def ../include/libmySQL.def \
 --output-lib libmysqlclient.a -k
 @end example
 
-@item  Copy include\* to include\mysql\ 
+@item  Copy include\* to include\mysql\
 
 @item  Pass @code{--with-mysql=/c/mysql} to
 @command{./configure} and copy @file{libmysql.dll}
@@ -1996,7 +1992,7 @@ to your PATH or GNUnet's @file{bin} directory
 
 
 @item @strong{GTK+}@
-@command{gnunet-gtk} and @command{libextractor} depend on GTK.
+@command{gnunet-fs-gtk} and @command{libextractor} depend on GTK.
 Get the the binary and developer packages of @command{atk},
 @command{glib}, @command{gtk}, @command{iconv},
 @command{gettext-runtime}, @command{pango} from
@@ -2011,7 +2007,7 @@ Here is an all-in-one package for the
 . Do not overwrite any existing files!
 
 @item @strong{Glade}@
-@command{gnunet-gtk} and @command{gnunet-setup} were created using
+@command{gnunet-*-gtk} and @command{gnunet-setup} were created using
 this interface builder
 
 @itemize @bullet
@@ -2085,7 +2081,7 @@ debug information and are quite large. To compile release versions
 (small and fast) set the variable @code{CFLAGS}:
 
 @example
-export CFLAGS='-O2 -march=pentium -fomit-frame-pointer' 
+export CFLAGS='-O2 -march=pentium -fomit-frame-pointer'
 ./configure --prefix=$HOME --with-extractor=$HOME
 @end example
 
@@ -2100,7 +2096,7 @@ located in @file{contrib\win} in the GNUnet source tree.
 @subsubsection Source
 
 @c FIXME: URL
-The sources of all dependencies are available here. 
+The sources of all dependencies are available here.
 
 @c @node Portable GNUnet
 @c @section Portable GNUnet
@@ -2236,7 +2232,6 @@ file by hand, this is not recommended for anyone except for developers
 as it requires a more in-depth understanding of the configuration files
 and internal dependencies of GNUnet.
 
-
 @node Configuring the Friend-to-Friend (F2F) mode
 @subsection Configuring the Friend-to-Friend (F2F) mode
 
@@ -2266,18 +2261,18 @@ The resulting output of this command needs to be added to your
 per friend with the output from the above command.
 
 You then specify the location of your @file{friends} file in the
-"FRIENDS" option of the "topology" section.
+@code{FRIENDS} option of the "topology" section.
 
 Once you have created the @file{friends} file, you can tell GNUnet to only
-connect to your friends by setting the "FRIENDS-ONLY" option (again in
-the "topology" section) to YES.
+connect to your friends by setting the @code{FRIENDS-ONLY} option
+(again in the "topology" section) to YES.
 
 If you want to run in mixed-mode, set "FRIENDS-ONLY" to NO and configure a
 minimum number of friends to have (before connecting to arbitrary peers)
 under the "MINIMUM-FRIENDS" option.
 
 If you want to operate in normal P2P-only mode, simply set
-"MINIMUM-FRIENDS" to zero and "FRIENDS_ONLY" to NO.
+@code{MINIMUM-FRIENDS} to zero and @code{FRIENDS_ONLY} to NO.
 This is the default.
 
 @node Configuring the hostlist to bootstrap
@@ -2296,7 +2291,7 @@ To use these bootstrap servers you have to configure the hostlist daemon
 to activate bootstrapping.
 
 To activate bootstrapping, edit the @code{[hostlist]}-section in your
-configuration file. You have to set the argument "-b" in the
+configuration file. You have to set the argument @command{-b} in the
 options line:
 
 @example
@@ -2332,8 +2327,8 @@ messages, your peer can download these lists and connect to the peers
 included. These lists are persistent, which means that they are saved to
 your hard disk regularly and are loaded during startup.
 
-To activate hostlist learning you have to add the "-e" switch to the
-OPTIONS line in the hostlist section:
+To activate hostlist learning you have to add the @command{-e}
+switch to the @code{OPTIONS} line in the hostlist section:
 
 @example
 [hostlist]
@@ -2342,7 +2337,7 @@ OPTIONS = -b -e
 
 @noindent
 Furthermore you can specify in which file the lists are saved.
-To save the lists in the file "hostlists.file" just add the line:
+To save the lists in the file @file{hostlists.file} just add the line:
 
 @example
 HOSTLISTFILE = hostlists.file
@@ -2366,7 +2361,7 @@ HOSTLISTFILE = $SERVICEHOME/hostlists.file
 The hostlist client can be configured to use a proxy to connect to the
 hostlist server.
 This functionality can be configured in the configuration file directly
-or using the gnunet-setup tool. 
+or using the @command{gnunet-setup} tool.
 
 The hostlist client supports the following proxy types at the moment:
 
@@ -2376,7 +2371,7 @@ The hostlist client supports the following proxy types at the moment:
 @end itemize
 
 In addition authentication at the proxy with username and password can be
-configured. 
+configured.
 
 To configure proxy support for the hostlist client in the
 @command{gnunet-setup} tool, select the "hostlist" tab and select
@@ -2413,17 +2408,18 @@ If you operate a peer permanently connected to GNUnet you can configure
 your peer to act as a hostlist server, providing other peers the list of
 peers known to him.
 
-Yor server can act as a bootstrap server and peers needing to obtain a
+Your server can act as a bootstrap server and peers needing to obtain a
 list of peers can contact it to download this list.
 To download this hostlist the peer uses HTTP.
-For this reason you have to build your peer with libcurl and microhttpd
-support. How you build your peer with this options can be found here:
-@uref{https://gnunet.org/generic_installation}
+For this reason you have to build your peer with libgnurl (or libcurl)
+and microhttpd support.
+How you build your peer with these options can be found here:
+@xref{Generic installation instructions}.
 
 To configure your peer to act as a bootstrap server you have to add the
-@code{-p} option to OPTIONS in the @code{[hostlist]} section of your
-configuration file. Besides that you have to specify a port number for
-the http server.
+@command{-p} option to @code{OPTIONS} in the @code{[hostlist]} section
+of your configuration file.
+Besides that you have to specify a port number for the http server.
 In conclusion you have to add the following lines:
 
 @example
@@ -2460,7 +2456,7 @@ The URL used to download the list will be
 Please notice:
 
 @itemize @bullet
-@item The hostlist is not human readable, so you should not try to
+@item The hostlist is @b{not} human readable, so you should not try to
 download it using your webbrowser. Just point your GNUnet peer to the
 address!
 @item Advertising without providing a hostlist does not make sense and
@@ -2470,13 +2466,13 @@ will not work.
 @node Configuring the datastore
 @subsection Configuring the datastore
 
-The datastore is what GNUnet uses to for long-term storage of file-sharing
+The datastore is what GNUnet uses for long-term storage of file-sharing
 data. Note that long-term does not mean 'forever' since content does have
 an expiration date, and of course storage space is finite (and hence
 sometimes content may have to be discarded).
 
-Use the "QUOTA" option to specify how many bytes of storage space you are
-willing to dedicate to GNUnet.
+Use the @code{QUOTA} option to specify how many bytes of storage space
+you are willing to dedicate to GNUnet.
 
 In addition to specifying the maximum space GNUnet is allowed to use for
 the datastore, you need to specify which database GNUnet should use to do
@@ -2518,18 +2514,18 @@ inconsistencies. Some of the other databases do not support repair.
 
 @itemize @bullet
 
-@item In @code{gnunet.conf} set in section "DATASTORE" the value for
-"DATABASE" to "mysql".
+@item In @file{gnunet.conf} set in section @code{DATASTORE} the value for
+@code{DATABASE} to @code{mysql}.
 
 @item Access mysql as root:
 
 @example
-$ mysql -u root -p 
+$ mysql -u root -p
 @end example
 
 @noindent
 and issue the following commands, replacing $USER with the username
-that will be running gnunet-arm (so typically "gnunet"):
+that will be running @command{gnunet-arm} (so typically "gnunet"):
 
 @example
 CREATE DATABASE gnunet;
@@ -2569,15 +2565,30 @@ mysql> use gnunet;
 @end example
 
 @noindent
-If you get the message "Database changed" it probably works.
+If you get the message
+
+@example
+Database changed
+@end example
+
+@noindent
+it probably works.
 
-If you get "ERROR 2002: Can't connect to local MySQL server@
-through socket '/tmp/mysql.sock' (2)" it may be resolvable by
+If you get
+
+@example
+ERROR 2002: Can't connect to local MySQL server
+through socket '/tmp/mysql.sock' (2)
+@end example
+
+@noindent
+it may be resolvable by
 
 @example
 ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
 @end example
 
+@noindent
 so there may be some additional trouble depending on your mysql setup.
 
 @node Performance Tuning
@@ -2602,7 +2613,7 @@ the only application on your system using MySQL.
 
 If you want to run the testcases, you must create a second database
 "gnunetcheck" with the same username and password. This database will
-then be used for testing ("make check").
+then be used for testing (@command{make check}).
 
 @node Configuring the Postgres database
 @subsection Configuring the Postgres database
@@ -2632,9 +2643,9 @@ earlier versions as well.
 @subsection Manual setup instructions
 
 @itemize @bullet
-@item In @code{gnunet.conf} set in section "DATASTORE" the value for
-"DATABASE" to "postgres".
-@item Access Postgres to create a user:@
+@item In @file{gnunet.conf} set in section @code{DATASTORE} the value for
+@code{DATABASE} to @code{postgres}.
+@item Access Postgres to create a user:
 
 @table @asis
 @item with Postgres 8.x, use:
@@ -2647,7 +2658,7 @@ $ createuser
 @noindent
 and enter the name of the user running GNUnet for the role interactively.
 Then, when prompted, do not set it to superuser, allow the creation of
-databases, and do not allow the creation of new roles.@
+databases, and do not allow the creation of new roles.
 
 @item with Postgres 9.x, use:
 
@@ -2657,7 +2668,7 @@ $ createuser -d $GNUNET_USER
 @end example
 
 @noindent
-where $GNUNET_USER is the name of the user running GNUnet.@
+where $GNUNET_USER is the name of the user running GNUnet.
 
 @end table
 
@@ -2699,7 +2710,7 @@ expected to be wiped completely each time GNUnet is restarted (or the
 system is rebooted).
 
 You need to specify how many bytes GNUnet is allowed to use for the
-datacache using the "QUOTA" option in the section "dhtcache".
+datacache using the @code{QUOTA} option in the section @code{[dhtcache]}.
 Furthermore, you need to specify which database backend should be used to
 store the data. Currently, you have the choice between
 sqLite, MySQL and Postgres.
@@ -2709,8 +2720,8 @@ sqLite, MySQL and Postgres.
 
 In order to use GNUnet for file-sharing, you first need to make sure
 that the file-sharing service is loaded.
-This is done by setting the AUTOSTART option in section "fs" to "YES".
-Alternatively, you can run
+This is done by setting the @code{AUTOSTART} option in
+section @code{[fs]} to "YES". Alternatively, you can run
 
 @example
 $ gnunet-arm -i fs
@@ -2758,26 +2769,29 @@ The @code{-l} option is used to specify the log file.
 
 Since most GNUnet services are managed by @code{gnunet-arm}, using the
 @code{-l} or @code{-L} options directly is not possible.
-Instead, they can be specified using the "OPTIONS" configuration value in
-the respective section for the respective service.
-In order to enable logging globally without editing the "OPTIONS" values
-for each service, @code{gnunet-arm} supports a "GLOBAL_POSTFIX" option.
+Instead, they can be specified using the @code{OPTIONS} configuration
+value in the respective section for the respective service.
+In order to enable logging globally without editing the @code{OPTIONS}
+values for each service, @command{gnunet-arm} supports a
+@code{GLOBAL_POSTFIX} option.
 The value specified here is given as an extra option to all services for
-which the configuration does contain a service-specific "OPTIONS" field.
+which the configuration does contain a service-specific @code{OPTIONS}
+field.
 
-"GLOBAL_POSTFIX" can contain the special sequence "@{@}" which is replaced
-by the name of the service that is being started. Furthermore,
-@code{GLOBAL_POSTFIX} is special in that sequences starting with "$"
-anywhere in the string are expanded (according to options in "PATHS");
-this expansion otherwise is only happening for filenames and then the "$"
-must be the first character in the option. Both of these restrictions do
-not apply to "GLOBAL_POSTFIX".
-Note that specifying @code{%} anywhere in the "GLOBAL_POSTFIX" disables
-both of these features.
+@code{GLOBAL_POSTFIX} can contain the special sequence "@{@}" which
+is replaced by the name of the service that is being started.
+Furthermore, @code{GLOBAL_POSTFIX} is special in that sequences
+starting with "$" anywhere in the string are expanded (according
+to options in @code{PATHS}); this expansion otherwise is
+only happening for filenames and then the "$" must be the
+first character in the option. Both of these restrictions do
+not apply to @code{GLOBAL_POSTFIX}.
+Note that specifying @code{%} anywhere in the @code{GLOBAL_POSTFIX}
+disables both of these features.
 
-In summary, in order to get all services to log at level "INFO" to
-log-files called @code{SERVICENAME-logs}, the following global prefix
-should be used:
+In summary, in order to get all services to log at level
+@code{INFO} to log-files called @code{SERVICENAME-logs}, the
+following global prefix should be used:
 
 @example
 GLOBAL_POSTFIX = -l $SERVICEHOME/@{@}-logs -L INFO
@@ -3003,9 +3017,11 @@ The interface channel depends on the wlan network that the card is
 connected to. If no connection has been made since the start of the
 computer, it is usually the first channel of the card.
 Peers will only find each other and communicate if they are on the same
-channel. Channels must be set manually (i.e. using
-@code{iwconfig wlan0 channel 1}).
+channel. Channels must be set manually, i.e. using:
 
+@example
+iwconfig wlan0 channel 1
+@end example
 
 @node Configuring HTTP(S) reverse proxy functionality using Apache or nginx
 @subsection Configuring HTTP(S) reverse proxy functionality using Apache or nginx
@@ -3043,7 +3059,16 @@ As an example we want to use GNUnet peer running:
 And we want the webserver to accept GNUnet traffic under
 @code{http://www.foo.org/bar/}. The required steps are described here:
 
-@strong{Configure your Apache2 HTTP webserver}
+@menu
+* Reverse Proxy - Configure your Apache2 HTTP webserver::
+* Reverse Proxy - Configure your Apache2 HTTPS webserver::
+* Reverse Proxy - Configure your nginx HTTPS webserver::
+* Reverse Proxy - Configure your nginx HTTP webserver::
+* Reverse Proxy - Configure your GNUnet peer::
+@end menu
+
+@node Reverse Proxy - Configure your Apache2 HTTP webserver
+@subsubsection Reverse Proxy - Configure your Apache2 HTTP webserver
 
 First of all you need mod_proxy installed.
 
@@ -3062,12 +3087,13 @@ ProxyPassReverse http://gnunet.foo.org:1080/
 </Location>
 @end example
 
-@noindent
-@strong{Configure your Apache2 HTTPS webserver}
+@node Reverse Proxy - Configure your Apache2 HTTPS webserver
+@subsubsection Reverse Proxy - Configure your Apache2 HTTPS webserver
 
 We assume that you already have an HTTPS server running, if not please
-check how to configure a HTTPS host. An easy to use example is the
-@file{apache2/sites-available/default-ssl} example configuration file.
+check how to configure a HTTPS host. An uncomplicated to use example
+is the example configuration file for Apache2/HTTPD provided in
+@file{apache2/sites-available/default-ssl}.
 
 In the respective HTTPS @code{server config},@code{virtual host} or
 @code{directory} section add the following lines:
@@ -3084,13 +3110,13 @@ ProxyPassReverse https://gnunet.foo.org:4433/
 
 @noindent
 More information about the apache mod_proxy configuration can be found
-here: @uref{http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass}
-.
+in the Apache documentation@footnote{@uref{http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass, http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass}}
 
-@strong{Configure your nginx HTTPS webserver}
+@node Reverse Proxy - Configure your nginx HTTPS webserver
+@subsubsection Reverse Proxy - Configure your nginx HTTPS webserver
 
 Since nginx does not support chunked encoding, you first of all have to
-install @code{chunkin}: @uref{http://wiki.nginx.org/HttpChunkinModule}.
+install the @code{chunkin} module@footnote{@uref{http://wiki.nginx.org/HttpChunkinModule, http://wiki.nginx.org/HttpChunkinModule}}
 
 To enable chunkin add:
 
@@ -3109,8 +3135,7 @@ the site-specific configuration file.
 In the @code{server} section add:
 
 @example
-location /bar/
-@{
+location /bar/ @{
 proxy_pass http://gnunet.foo.org:1080/;
 proxy_buffering off;
 proxy_connect_timeout 5; # more than http_server
@@ -3120,8 +3145,8 @@ proxy_next_upstream error timeout invalid_header http_500 http_503 http_502 http
 @}
 @end example
 
-@noindent
-@strong{Configure your nginx HTTPS webserver}
+@node Reverse Proxy - Configure your nginx HTTP webserver
+@subsubsection Reverse Proxy - Configure your nginx HTTP webserver
 
 Edit your webserver configuration. Edit @file{/etc/nginx/nginx.conf} or
 the site-specific configuration file.
@@ -3141,8 +3166,8 @@ proxy_next_upstream error timeout invalid_header http_500 http_503 http_502 http
 @}
 @end example
 
-@noindent
-@strong{Configure your GNUnet peer}
+@node Reverse Proxy - Configure your GNUnet peer
+@subsubsection Reverse Proxy - Configure your GNUnet peer
 
 To have your GNUnet peer announce the address, you have to specify the
 @code{EXTERNAL_HOSTNAME} option in the @code{[transport-http_server]}
@@ -3265,7 +3290,6 @@ and @code{[transport-https_client]} section of the configuration:
 * GNS Proxy Setup::
 * Setup of the GNS CA::
 * Testing the GNS setup::
-* Automatic Shortening in the GNU Name System::
 @end menu
 
 
@@ -3298,19 +3322,6 @@ steps.
 First of all, GNS needs to be integrated with the operating system. Most
 of this section is about the operating system level integration.
 
-Additionally, each individual user who wants to use the system must also
-initialize their GNS zones. This can be done by running (after starting
-GNUnet)
-
-@example
-$ gnunet-gns-import.sh
-@end example
-
-@noindent
-after the local GNUnet peer has been started. Note that the namestore (in
-particular the namestore database backend) should not be reconfigured
-afterwards (as records are not automatically migrated between backends).
-
 The remainder of this chapter will detail the various methods for
 configuring the use of GNS with your operating system.
 
@@ -3502,7 +3513,7 @@ gnurl --version
 curl 7.56.0 (x86_64-unknown-linux-gnu) libcurl/7.56.0 \
 GnuTLS/3.5.13 zlib/1.2.11 libidn2/2.0.4
 Release-Date: 2017-10-08
-Protocols: http https 
+Protocols: http https
 Features: AsynchDNS IDN IPv6 Largefile NTLM SSL libz \
 TLS-SRP UnixSockets HTTPS-proxy
 @end example
@@ -3514,8 +3525,11 @@ Now for testing purposes we can create some records in our zone to test
 the SSL functionality of the proxy:
 
 @example
-$ gnunet-namestore -a -e "1 d" -n "homepage" -t A -V 131.159.74.67
-$ gnunet-namestore -a -e "1 d" -n "homepage" -t LEHO -V "gnunet.org"
+$ gnunet-identity -C test
+$ gnunet-namestore -a -e "1 d" -n "homepage" \
+  -t A -V 131.159.74.67 -z test
+$ gnunet-namestore -a -e "1 d" -n "homepage" \
+  -t LEHO -V "gnunet.org" -z test
 @end example
 
 @noindent
@@ -3532,7 +3546,7 @@ If you use @command{Firefox} (or one of its deriviates/forks such as
 Icecat) you also have to go to @code{about:config} and set the key
 @code{network.proxy.socks_remote_dns} to @code{true}.
 
-When you visit @code{https://homepage.gnu/}, you should get to the
+When you visit @code{https://homepage.test/}, you should get to the
 @code{https://gnunet.org/} frontpage and the browser (with the correctly
 configured proxy) should give you a valid SSL certificate for
 @code{homepage.gnu} and no warnings. It should look like this:
@@ -3540,26 +3554,6 @@ configured proxy) should give you a valid SSL certificate for
 @c FIXME: Image does not exist, create it or save it from Drupal?
 @c @image{images/gnunethpgns.png,5in,, picture of homepage.gnu in Webbrowser}
 
-@node Automatic Shortening in the GNU Name System
-@subsubsection Automatic Shortening in the GNU Name System
-
-This page describes a possible option for 'automatic name shortening',
-which you can choose to enable with the GNU Name System.
-
-When GNS encounters a name for the first time, it can use the 'NICK'
-record of the originating zone to automatically generate a name for the
-zone. If automatic shortening is enabled, those auto-generated names will
-be placed (as private records) into your personal 'shorten' zone (to
-prevent confusion with manually selected names).
-Then, in the future, if the same name is encountered again, GNS will
-display the shortened name instead (the first time, the long name will
-still be used as shortening typically happens asynchronously as looking up
-the 'NICK' record takes some time). Using this feature can be a convenient
-way to avoid very long @code{.gnu} names; however, note that names from
-the shorten-zone are assigned on a first-come-first-serve basis and should
-not be trusted. Furthermore, if you enable this feature, you will no
-longer see the full delegation chain for zones once shortening has been
-applied.
 
 @node Configuring the GNUnet VPN
 @subsection Configuring the GNUnet VPN
@@ -4099,4 +4093,3 @@ Furthermore, 'make install' will silently fail to set the DNS binaries to
 be owned by group "gnunetdns" unless that group already exists (!).
 An alternative name for the "gnunetdns" group can be specified using the
 @code{--with-gnunetdns=GRPNAME} configure option.
-