2 <a href="https://gnunet.org"><img src="contrib/branding/logo/gnunet-logo-dark-text.svg" alt="GNUnet" width="300px"/></a>
5 > GNUnet is a *new* network protocol stack for building secure, distributed, and privacy-preserving applications.
7 * [Install](#how-to-install-gnunet)
8 * [From Source](#from-source)
9 * [Using Docker](#docker)
10 * [Using GNUnet](#using-gnunet)
20 Install these packages. Some of them may need to be installed from source depending on your OS.
23 - libmicrohttpd >= 0.9.42
25 - libgnurl >= 7.35.0 (recommended, available from https://gnunet.org/gnurl)
26 - libcurl >= 7.35.0 (alternative to libgnurl)
27 - libunistring >= 0.9.2
28 - gnutls >= 3.2.12 (highly recommended: a gnutls linked against libunbound)
30 - libextractor >= 0.6.1 (highly recommended)
31 - openssl >= 1.0 (binary, used to generate X.509 certificate)
32 - libltdl >= 2.2 (part of GNU libtool)
33 - sqlite >= 3.8 (default database, required)
34 - mysql >= 5.1 (alternative to sqlite)
35 - postgres >= 9.5 (alternative to sqlite)
37 - which (for the bootstrap script)
44 You can also install the dependencies with the [GNU Guix package manager:](https://https://www.gnu.org/software/guix/) by using the provided environment file:
47 guix package -l guix-env.scm
54 ./bootstrap # Run this to generate the configure files.
55 ./configure # See the various flags avalable to you.
60 **Using the [GNU Guix package manager:](https://https://www.gnu.org/software/guix/)**
63 # To build, run tests, and install:
64 guix package -f guix-env.scm
66 # To skip the testing phase:
67 guix package -f guix-env.scm:notest
75 docker build -t gnunet .
83 There are many possible ways to use the subsystems of GNUnet, so we will provide a few examples in this section.
86 <a href="contrib/gnunet-arch-full.svg"><img src="contrib/gnunet-arch-full.svg" alt="GNUnet Modular Architecture" width="500px" border="1px"/></a>
89 >***GNUnet is composed of over 30 modular subsystems***
97 Open a Cadet connection:
101 gnunet-cadet -o <shared secret>
108 gnunet-cadet <peer-id of Node 1> <shared secret>
113 With the cli tool, you can also share files:
117 gnunet-cadet -o <shared secret> > filename
120 On the Node 2 we're going to send the file to Node 1, and to do this we need to make use of [coprocesses](https://www.gnu.org/software/bash/manual/html_node/Coprocesses.html).
121 The syntax for using coprocesses varies per shell. In our example we are assuming Bash. More info for different shells can be found [here](https://unix.stackexchange.com/questions/86270/how-do-you-use-the-command-coproc-in-various-shells)
125 coproc gnunet-cadet <peer-id of Node 1> <shared secret>
126 cat <file> >&"${COPROC[1]}"
129 Now this enables us to do some fun things, such as streaming video by piping to a media player:
133 gnunet-cadet -o <shared secret> | vlc -
138 coproc gnunet-cadet <peer-id of Node 1> <shared secret>
139 cat <video-file> >&"${COPROC[1]}"
151 ### Running a Hostlist Server
156 --------------------------
170 TODO: *explain what this does and add more*
174 -------------------------
178 -------------------------
182 <a href="https://pep.foundation"><img src="https://pep.foundation/static/media/uploads/peplogo.svg" alt="pep.foundation" width="80px"/></a> <a href="https://secushare.org"><img src="https://secushare.org/img/secushare-0444.png" alt="Secushare" width="80px"/></a>