rsa crypto compare functions take const parameters
[oweals/gnunet.git] / README
diff --git a/README b/README
index 41e18084fa2b5e4b3d487ef90e852d4d1d40a5e4..d95022de256f708f3317dc03cf44f40b8bb39b96 100644 (file)
--- a/README
+++ b/README
@@ -10,11 +10,12 @@ ToC
   o test suite dependencies
   o optional dependencies
   o autotools
-* Requirements
+* Notes on setuid
+* Scope of Operating System support
 * How to install
   o binary packages
-  o Scope of Operating System support
   o Building GNUnet from source
+  o Notes on compiling from Git
 * Configuration
 * Usage
 * Hacking GNUnet
@@ -51,6 +52,10 @@ Online documentation is provided at
 Dependencies:
 =============
 
+The dependencies for building GNUnet will require around 0.74 GiB
+diskspace. GNUnet itself will require 8 - 9.2 MiB depending on
+configuration.
+
 These are the direct dependencies for running GNUnet:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -58,7 +63,7 @@ These are the direct dependencies for running GNUnet:
 - gettext
 - gnutls             >= 3.2.12      (highly recommended a gnutls
                                      linked against libunbound)
-- A curl build against gnutls, or gnurl:
+- curl (ideally built against gnutls) or gnurl:
   * libgnurl         >= 7.35.0      (recommended, available from
                                      https://gnunet.org/en/gnurl.html)
   or
@@ -69,8 +74,8 @@ These are the direct dependencies for running GNUnet:
   * libidn2 (prefered)
   or
   * libidn           >= 1.0
-- libmicrohttpd      >= 0.9.63      (strongly recommended for
-                                     a wide range of features)
+- libmicrohttpd      >= 0.9.63
+- libjansson
 - makeinfo           >= 4.8
 - make[*3]
 - nss                               (certutil binary, for
@@ -91,6 +96,7 @@ These are the direct dependencies for running GNUnet:
 - which                             (contrib/apparmor(?), gnunet-bugreport,
                                      and possibly more)
 - zlib
+- libsodium          >= 1.0.11      (for elliptic curve cryptography)
 
 These are the dependencies for GNUnet's testsuite:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -116,11 +122,9 @@ These are the optional dependencies:
 - bluez                             (for bluetooth support)
 - grof                              (for linting of man pages)
 - libextractor       >= 0.6.1       (highly recommended[*5])
-- libjansson
-- libglpk            >= 4.45        (for experimental code)
-- libopus            >= 1.0.1       (for experimental conversation tool)
-- libpulse           >= 2.0         (for experimental conversation tool)
-- libogg             >= 1.3.0       (for experimental conversation tool)
+- libopus            >= 1.0.1       (for conversation tool)
+- libpulse           >= 2.0         (for conversation tool)
+- libogg             >= 1.3.0       (for conversation tool)
 - libnss                            (certtool binary (for convenient
                                      installation of GNS proxy))
 - libzbar            >= 0.10        (for gnunet-qr)
@@ -135,7 +139,9 @@ These are the optional dependencies:
 - miniupnpc
 - perl5                             (for some utilities)
 - TeX Live           >= 2012        (for gnunet-bcd[*])
-- texi2mdoc                         (for automatic mdoc generation [*2])
+- texi2mdoc                         (for automatic mdoc generation [*2], not
+                                     the texi2mdoc script distributed with
+                                     autogen but the texi2mdoc C application)
 
 Recommended autotools for compiling the Git version are:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -153,10 +159,11 @@ Recommended autotools for compiling the Git version are:
      '--disable-documentation' to the configure script to change this.
 
 [*2] If you still prefer to have documentation, you can pass
-     '--with-section7' to build mdoc documentation (experimental
-     stages in gnunet). If this proves to be reliable, we will
-     include the mdoc output in the release tarballs.
-     Contrary to the name, texi2mdoc does not require texinfo,
+     '--enable-texi2mdoc-generation' to build the mdocml ("mandoc")
+     documentation (experimental stages in gnunet).
+     If this proves to be reliable, we will
+     include the mdocml output in the release tarballs.
+     Contrary to the name, texi2mdoc does not require Texinfo,
      It is a standalone ISO C utility.
 
 [*3] GNU make introduced the != operator in version 4.0.
@@ -166,12 +173,12 @@ Recommended autotools for compiling the Git version are:
      fix in.
 
 [*4] We are commited  to portable tools and solutions
-     where possible. New scripts should be Posix SH
+     where possible. New scripts should be Posix sh
      compatible, current and older scripts are
      in the process of being rewritten to comply
      with this requirement.
 
-[*5] While libextractor is optional, it is recommended to
+[*5] While libextractor ("LE") is optional, it is recommended to
      build gnunet against it. If you install it later,
      you won't benefit from libextractor.
      If you are a distributor, we recommend to split
@@ -189,26 +196,69 @@ Recommended autotools for compiling the Git version are:
      more details.
      However, this leak is just a minor concern.
 
-Requirements
-============
+Notes on setuid
+===============
+
+For a correct functionality depending on the host OS, you need
+to run the equivalent of these steps after installation.
+Replace $(DESTDIR)$(libexecdir) with the appropriate paths,
+for example /usr/local/lib/gnunet/libexec/. Note that this
+obviously must be run as priviledged user.
+
+chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-vpn
+chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-vpn
+chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-transport-wlan
+chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-transport-wlan
+chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-transport-bluetooth
+chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-transport-bluetooth
+chown root $(DESTDIR)$(libexecdir)/gnunet-helper-dns
+chgrp $(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns
+chmod 4750 $(DESTDIR)$(libexecdir)/gnunet-helper-dns
+chgrp $(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns
+chown gnunet:$(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns
+chmod 2750 $(DESTDIR)$(libexecdir)/gnunet-helper-dns
+chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-exit
+chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-exit
+chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-nat-server
+chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-nat-client
+chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-nat-server
+chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-nat-client
+
+
+Scope of Operating System support
+=================================
+
+We actively support GNUnet on a broad range of Free Software Operating
+Systems.
+
+For proprietary Operating Systems, like for example Microsoft Windows
+or Apple OS X, we accept patches if they don't break anything for
+other Operating Systems.
+If you are implementing support for a proprietary Operating System,
+you should be aware that progress in our codebase could break
+functionality on your OS and cause unpredicted behavior we can
+not test. However, we do not break support on Operating Systems
+with malicious intent.
+Regressions which do occur on these Operating Systems are 3rd
+class issues and we expect users and developers of these
+Operating Systems to send proposed patches to fix regressions.
+
+For more information about our stand on some of the motivating
+points here, read the 'Philosophy' Chapter of our handbook.
 
-GNUnet's directed acyclic graph (DAG) will require around 0.74 GiB
-Diskspace, with GNUnet itself taking around 8 - 9.2 MiB reported by
-the build on GNU Guix.
 
 How to install?
 ===============
 
-
 binary packages
 ~~~~~~~~~~~~~~~
 
-We recommend to use binary packages provided by your Operating System's
-package manager. GNUnet is reportedly available for at least:
+We recommend to use binary packages provided by the package manager integrated
+within your Operating System. GNUnet is reportedly available for at least:
 
-GNU Guix, Nix, Debian, ALT Linux, Archlinux, Deepin, Devuan, Hyperbola,
-Kali Linux, LEDE/OpenWRT, Manjaro, Parabola, Pardus, Parrot, PureOS,
-Raspbian, Rosa, Trisquel, and Ubuntu.
+ALT Linux, Archlinux, Debian, Deepin, Devuan, GNU Guix, Hyperbola,
+Kali Linux, LEDE/OpenWRT, Manjaro, Nix, Parabola, Pardus, Parrot,
+PureOS, Raspbian, Rosa, Trisquel, and Ubuntu.
 
 If GNUnet is available for your Operating System and it is missing,
 send us feedback so that we can add it to this list. Furthermore, if
@@ -224,26 +274,6 @@ $ apt-get install gnunet
 Generic installation instructions are in the INSTALL file in this
 directory.
 
-Scope of Operating System support
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-We actively support GNUnet on a broad range of Free Software Operating
-Systems.
-
-For proprietary Operating Systems, like for example Microsoft Windows
-or Apple OS X, we accept patches if they don't break anything for
-other Operating Systems.
-If you are implementing support for a proprietary Operating System,
-you should be aware that progress in our codebase could break
-functionality on your OS and cause unpredicted behavior we can
-not test. However, we do not break support on Operating Systems
-with malicious intent.
-Regressions which do occur on these Operating Systems are 3rd
-class issues and we expect users and developers of these
-Operating Systems to send proposed patches to fix regressions.
-
-For more information about our stand on some of the motivating
-points here, read the 'Philosophy' Chapter of our handbook.
-
 Building GNUnet from source
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -297,11 +327,12 @@ in 'contrib/services' or by running:
 # sudo -u gnunet gnunet-arm -s
 
 
-Note that running the 'configure' and 'make install' steps as
-root (or with sudo) is required as some parts of the installation
-require the creation of SUID binaries.  The installation will
-work if you do not run these steps as root, but some components
-may not be installed in the perfect place or with the right
+Note that you must read paragraph "Notes on setuid", which documents steps you
+have to follow after the installation, as a priviledged user. We require some
+binaries to be setuid. The most portable approach across all supported
+platforms and targets is to let this be handled manually.
+The installation will work if you do not run these steps as root, but some
+components may not be installed in the perfect place or with the right
 permissions and thus won't work.
 
 This will create the users and groups needed for running GNUnet
@@ -322,26 +353,26 @@ this case (instead of ~gnunet/.config/gnunet.conf").  In this case,
 you need to start GNUnet using "gnunet-arm -s -c /etc/gnunet.conf" or
 set "XDG_CONFIG_HOME=/etc/".
 
-You can avoid running 'make install' as root if you run configure
-with the "--with-sudo=yes" option and have extensive sudo rights
-(can run "chmod +s" and "chown" via 'sudo').  If you run 'make install'
-as a normal user without sudo rights (or the configure option),
-certain binaries that require additional priviledges will not be
-installed properly (and autonomous NAT traversal, WLAN, DNS/GNS and
-the VPN will then not work).
-
-If you run 'configure' and 'make install' as root or use the '--with-sudo'
-option, GNUnet's build system will install "libnss_gns*" libraries to
-"/lib/" regardless (!) of the $GNUNET_PREFIX you might have specified,
-as those libraries must be in "/lib/".  If you are packaging GNUnet
-for binary distribution, this may cause your packaging script to miss
-those plugins, so you might need to do some additional manual work to
-include those libraries in your binary package(s).  Similarly, if you
-want to use the GNUnet naming system and did NOT run GNUnet's 'make
-install' process with sudo rights, the libraries will be installed to
-"$GNUNET_PREFIX" and you will have to move them to "/lib/"
+You can avoid running 'make install' as root if you have extensive sudo rights
+(can run "chmod +s" and "chown" via 'sudo').  If you run 'make install' as a
+normal user without sudo rights (or the configure option), certain binaries
+that require additional privileges will not be installed properly (and
+autonomous NAT traversal, WLAN, DNS/GNS and the VPN will then not work).
+
+If you run 'configure' and 'make install' as root, GNUnet's build system will
+install "libnss_gns*" libraries to "/lib/" regardless (!) of the
+$GNUNET_PREFIX you might have specified, as those libraries must be in
+"/lib/".  If you are packaging GNUnet for binary distribution, this may cause
+your packaging script to miss those plugins, so you might need to do some
+additional manual work to include those libraries in your binary package(s).
+Similarly, if you want to use the GNUnet Name System and did NOT run
+GNUnet's 'make install' process with priviledged rights, the libraries will be
+installed to "$GNUNET_PREFIX" and you will have to move them to "/lib/"
 manually.
 
+Notes on compiling from Git
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 Finally, if you are compiling the code from git, you have to
 run "sh ./bootstrap" before running "./configure".  If you receive an error during
 the running of "sh ./bootstrap" that looks like "macro `AM_PATH_GTK'
@@ -520,11 +551,11 @@ Further Reading
 
 * Documentation
 
-  A HTML version of the new GNUnet manual is deployed at
+  An HTML version of the GNUnet manual is deployed at
 
     https://docs.gnunet.org
 
-  which currently displays just GNUnet documentation. Until 2019
+  which currently displays just GNUnet documentation. In the future
   we will add more reading material.
 
 * Academia / papers