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="600px" border="1px"/></a>
89 >***GNUnet is composed of over 30 modular subsystems***
92 ### Start GNUnet Services
94 Before we can begin using most of the components we must start them.
100 Now we can open up another shell and try using some of the modules.
106 Open a Cadet connection:
110 gnunet-cadet -o <shared secret>
117 gnunet-cadet <peer-id of Node 1> <shared secret>
122 With the cli tool, you can also share files:
126 gnunet-cadet -o <shared secret> > filename
129 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).
130 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)
134 coproc gnunet-cadet <peer-id of Node 1> <shared secret>
135 cat <file> >&"${COPROC[1]}"
138 Now this enables us to do some fun things, such as streaming video by piping to a media player:
142 gnunet-cadet -o <shared secret> | vlc -
147 coproc gnunet-cadet <peer-id of Node 1> <shared secret>
148 cat <video-file> >&"${COPROC[1]}"
153 You can use GNUnet as a content-addressed storage, much like IPFS: sharing immutable files in a decentralized fashion with added privacy.
155 For instance, you can get a nice cat picture with
157 gnunet-download gnunet://fs/loc/CB0ZX5EM1ZNNRT7AX93RVHCN1H49242DWZ4AXBTCJBAG22Z33VHYMR61J71YJXTXHEC22TNE0PRWA6D5X7NFNY2J9BNMG0SFN5DKZ0G.R48JSE2T4Y3W2AMDHZYX2MMDJC4HR0BVTJYNWJT2DGK7EQXR35DT84H9ZRAK3QTCTHDBAE1S6W16P8PCKC4HGEEKNW2T42HXF9RS1J0.1906755.J5Z3BDEG2PW332001GGZ2SSKCCSV8WDM696HNARG49X9TMABC4DG.B6Y7BCJ6B5K40EXCXASX1HQAD8MBJ9WTFWPCE3F15Q3Q4Y2PB8BKVGCS5HA4FG4484858NB74PBEE5V1638MGG7NS40A82K7QKK3G0G.1577833200 --output cat.png
160 You can also give files to the network, like so:
163 $ echo "I love GNUnet" > ILoveGNUnet.txt
164 $ gnunet-publish ILoveGNUnet.txt
166 Publishing `/tmp/ILoveGNUnet.txt` done.
167 URI is `gnunet://fs/chk/SXA4RGZWDHE4PDWD2F4XG778J4SZY3E3SNDZ9AWFRZYYBV52W1T2WQNZCF1NYAT842800SSBQ8F247TG6MX7H4S1RWZZSC8ZXGQ4YPR.AZ3B5WR1XCWCWR6W30S2365KFY7A3R5AMF5SRN3Z11R72SMVQDX3F6GXQSZMWZGM5BSYVDQEJ93CR024QAAE65CKHM52GH8MZK1BM90.14`.
170 The URI you get is what you can use to retrieve the file with `gnunet-download`.
181 ### Running a Hostlist Server
186 --------------------------
200 TODO: *explain what this does and add more*
204 -------------------------
208 -------------------------
212 <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>