README.md: Add file transfer via cadet usage example.
[oweals/gnunet.git] / README.md
1 <p align="center">
2   <a href="https://gnunet.org"><img src="contrib/branding/logo/gnunet-logo-dark-text.svg" alt="GNUnet" width="300px"/></a>
3 </p>
4
5 > GNUnet is a *new* network protocol stack for building secure, distributed, and privacy-preserving applications. 
6
7 * [Install](#how-to-install-gnunet)
8   * [From Source](#from-source)
9   * [Using Docker](#docker)
10 * [Using GNUnet](#using-gnunet)
11 * [License](#license)
12
13 How to Install GNUnet
14 ---------------------
15
16 ### 1. From Source
17
18 **Dependencies**
19
20 Install these packages. Some of them may need to be installed from source depending on your OS.
21
22 ```
23 - libmicrohttpd      >= 0.9.42
24 - libgcrypt          >= 1.6
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)
29 - libidn             >= 1.0
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)
36 - Texinfo            >= 5.2         [*1]
37 - which                             (for the bootstrap script)
38 - gettext
39 - zlib
40 - pkg-config
41 ```
42
43
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: 
45
46 ```shell
47 guix package -l guix-env.scm
48 ```
49
50
51 **Using GNU Make**
52
53 ```shell
54 ./bootstrap # Run this to generate the configure files.
55 ./configure # See the various flags avalable to you.
56 make
57 make install
58 ```
59
60 **Using the [GNU Guix package manager:](https://https://www.gnu.org/software/guix/)**
61
62 ```shell
63 # To build, run tests, and install:
64 guix package -f guix-env.scm
65
66 # To skip the testing phase:
67 guix package -f guix-env.scm:notest
68 ```
69
70
71 ### 2. Docker
72
73 ```
74 cd docker
75 docker build -t gnunet .
76 ```
77
78
79
80 Using GNUnet
81 -------------
82
83 There are many possible ways to use the subsystems of GNUnet, so we will provide a few examples in this section.
84
85 <p align="center">
86   <a href="contrib/gnunet-arch-full.svg"><img src="contrib/gnunet-arch-full.svg" alt="GNUnet Modular Architecture" width="500px" border="1px"/></a>
87 </p>
88
89 >***GNUnet is composed of over 30 modular subsystems***
90
91
92
93 ### Cadet
94
95 #### Examples
96
97 Open a Cadet connection:
98
99 ```shell
100 # Node 1
101 gnunet-cadet -o <shared secret>
102 ```
103
104 Conect to peer:
105
106 ```shell
107 # Node 2
108 gnunet-cadet <peer-id of Node 1> <shared secret>
109 ```
110
111 #### Sharing Files
112
113 With the cli tool, you can also share files:
114
115 ```shell
116 # Node 1
117 gnunet-cadet -o <shared secret> > filename
118 ```
119
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)
122
123 ```shell
124 # Node 2
125 coproc gnunet-cadet <peer-id of Node 1> <shared secret>
126 cat <file> >&"${COPROC[1]}"
127 ```
128
129 Now this enables us to do some fun things, such as streaming video by piping to a media player:
130
131 ```shell
132 # Node 1
133 gnunet-cadet -o <shared secret> | vlc -
134 ```
135
136 ```shell
137 # Node 2
138 coproc gnunet-cadet <peer-id of Node 1> <shared secret>
139 cat <video-file> >&"${COPROC[1]}"
140 ```
141
142 ### GNS
143
144 *coming soon*
145
146
147 ### VPN
148
149 *coming soon*
150
151 ### Running a Hostlist Server
152
153 *coming soon*
154
155 GNUnet Configuration
156 --------------------------
157 ### Examples
158
159 ```yaml
160 [transport]
161 OPTIONS = -L DEBUG
162 PLUGINS = tcp
163 #PLUGINS = udp
164
165 [transport-tcp]
166 OPTIONS = -L DEBUG
167 BINDTO = 192.168.0.2
168 ```
169
170 TODO: *explain what this does and add more*
171
172
173 Philosophy
174 -------------------------
175
176
177 Related Projects
178 -------------------------
179
180
181
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>
183
184