-clean up authors file
[oweals/gnunet.git] / README
1                        Welcome to GNUnet
2
3
4 What is GNUnet?
5 ===============
6
7 GNUnet is peer-to-peer framework focusing on security.  The first and
8 primary application for GNUnet is anonymous file-sharing.  GNUnet is
9 currently developed by a worldwide group of independent free software
10 developers.  GNUnet is a GNU package (http://www.gnu.org/).
11
12 This is an ALPHA release.  There are known and significant bugs as
13 well as many missing features in this release.
14
15 Additional documentation about GNUnet can be found at
16 https://gnunet.org/.
17
18
19 Dependencies:
20 =============
21
22 Please note that for many of its dependencies GNUnet requires very
23 recent versions of the libraries which are often NOT to be found in
24 stable distributions in 2011.  While using older packages may in some
25 cases on some operating systems may seem to work in some limited
26 fashion, we are in many cases aware of serious problems with older
27 packages.  Hence please make sure to use  the versions listed below.
28
29 These are the direct dependencies for running GNUnet:
30
31 - libextractor  >= 0.6.1
32 - libmicrohttpd >= 0.9.33
33 - libgcrypt     >= 1.6
34 - libgnurl      >= 7.34.0 (available from https://gnunet.org/gnurl)
35 - libunistring  >= 0.9.2
36 - gnutls        >= 3.2.5
37 - libidn        >= 1.0
38 - libglpk       >= 4.45
39 - openssl       >= 1.0 (binary, used to generate X.509 certificate)
40 - libltdl       >= 2.2 (part of GNU libtool)
41 - sqlite        >= 3.8 (default database, required)
42 - mysql         >= 5.1 (alternative to sqlite)
43 - postgres      >= 8.3 (alternative to sqlite)
44 - libopus       >= 0.9.14 (optional for experimental conversation tool)
45 - libpulse      >= 2.0 (optional for experimental conversation tool)
46 - python-zbar   >= 0.10 (optional for gnunet-qr)
47 - TeX Live      >= 2012 (optional for gnunet-bcd) 
48
49 Recommended autotools for compiling the SVN version are:
50 - autoconf >= 2.59
51 - automake >= 1.11.1
52 - libtool  >= 2.2
53
54
55 How to install?
56 ===============
57
58 The fastest way is to use a binary package if it is available for your
59 system.  For a more detailed description, read the installation
60 instructions on the webpage at https://gnunet.org/installation.
61
62 Note that some functions of GNUnet require "root" access.  GNUnet will
63 install (tiny) SUID binaries for those functions is you run "make
64 install" as root.  If you do not, GNUnet will still work, but some
65 functionality will not be available (including certain forms of NAT
66 traversal).
67
68 GNUnet requires the GNU MP library (http://www.gnu.org/software/gmp/)
69 and libgcrypt (http://www.gnupg.org/).  You can specify the path to
70 libgcrypt by passing "--with-gcrypt=PATH" to configure.  You will also
71 need either sqlite (http://www.sqlite.org/), MySQL
72 (http://www.mysql.org/) or PostGres (http://www.postgres.org/).
73
74 If you install from source, you need to install GNU libextractor first
75 (download from http://www.gnu.org/software/libextractor/).  We also
76 recommend installing GNU libmicrohttpd (download from
77 http://www.gnu.org/software/libmicrohttpd/).  Then you can start the
78 actual GNUnet compilation and installation process with:
79
80 $ export GNUNET_PREFIX=/usr/local # or other directory of your choice
81 # addgroup gnunetdns
82 # adduser gnunet gnunet
83 # ./configure --prefix=$GNUNET_PREFIX --with-extractor=$LE_PREFIX
84 $ make
85 # make install
86 # sudo -u gnunet gnunet-arm -s
87
88 Note that running the 'configure' and 'make install' steps as
89 root (or with sudo) is required as some parts of the installation
90 require the creation of SUID binaries.  The installation will
91 work if you do not run these steps as root, but some components
92 may not be installed in the perfect place or with the right
93 permissions and thus won't work.
94
95 This will create the users and groups needed for running GNUnet
96 securely and then compile and install GNUnet to $GNUNET_PREFIX/bin/,
97 $GNUNET_PREFIX/lib/ and $GNUNET_PREFIX/share/ and start the system
98 with the default configuration.  It is strongly recommended that you
99 add a user "gnunet" to run "gnunet-arm".  You can then still run the
100 end-user applications as another user.
101
102 If you create a system user "gnunet", it is recommended that you edit
103 the configuration file slightly so that data can be stored in the
104 system user home directory at "/var/lib/gnunet".  Depending on what
105 the $HOME-directory of your "gnunet" user is, you might need to set
106 the SERVICEHOME option in section "[PATHS]" to "/var/lib/gnunet" to
107 do this.  Depending on your personal preferences, you may also want to
108 use "/etc/gnunet.conf" for the location of the configuration file in
109 this case (instead of ~gnunet/.config/gnunet.conf").  In this case,
110 you need to start GNUnet using "gnunet-arm -s -c /etc/gnunet.conf" or
111 set "XDG_CONFIG_HOME=/etc/".
112
113 You can avoid running 'make install' as root if you run configure
114 with the "--with-sudo=yes" option and have extensive sudo rights
115 (can run "chmod +s" and "chown" via 'sudo').  If you run 'make install'
116 as a normal user without sudo rights (or the configure option),
117 certain binaries that require additional priviledges will not be
118 installed properly (and autonomous NAT traversal, WLAN, DNS/GNS and
119 the VPN will then not work).
120
121 If you run 'configure' and 'make install' as root or use the SUDO
122 option, GNUnet's build system will install "libnss_gns*" libraries to
123 "/lib/" regardless (!) of the $GNUNET_PREFIX you might have specified,
124 as those libraries must be in "/lib/".  If you are packaging GNUnet
125 for binary distribution, this may cause your packaging script to miss
126 those plugins, so you might need to do some additional manual work to
127 include those libraries in your binary package(s).  Similarly, if you
128 want to use the GNUnet naming system and did NOT run GNUnet's 'make
129 install' process with SUDO rights, the libraries will be installed to
130 "$GNUNET_PREFIX/lib" and you will have to move them to "/lib/"
131 manually.
132
133 Finally, if you are compiling the code from subversion, you have to
134 run ". bootstrap" before ./configure.  If you receive an error during
135 the running of ". bootstrap" that looks like "macro `AM_PATH_GTK' not
136 found in library", you may need to run aclocal by hand with the -I
137 option, pointing to your aclocal m4 macros, i.e.
138
139 $ aclocal -I /usr/local/share/aclocal
140
141
142 Configuration
143 =============
144
145 Note that additional, per-user configuration files can be created by
146 each user.  However, this is usually not necessary as there are few
147 per-user options that normal users would want to modify.  The defaults
148 that are shipped with the installation are usually just fine.
149
150 The gnunet-setup tool is particularly useful to generate the master
151 configuration for the peer.  gnunet-setup can be used to configure and
152 test (!) the network settings, choose which applications should be run
153 and configure databases.  Other options you might want to control
154 include system limitations (such as disk space consumption, bandwidth,
155 etc.).  The resulting configuration files are human-readable and can
156 theoretically be created or edited by hand.
157
158 gnunet-setup is a separate download and requires somewhat recent
159 versions of GTK+ and Glade. You can also create the configuration file
160 by hand, but this is not recommended.  For more general information
161 about the GNU build process read the INSTALL file.
162
163 GNUnet uses two types of configuration files, one that specifies the
164 system-wide defaults (typically located in
165 $GNUNET_PREFIX/share/gnunet/config.d/) and a second one that overrides
166 default values with user-specific preferences.  The user-specific
167 configuration file should be located in "~/.config/gnunet.conf" or its
168 location can be specified by giving the "-c" option to the respective
169 GNUnet application.
170
171
172 Usage
173 =====
174
175 First, you must obtain an initial list of GNUnet hosts.  Knowing a
176 single peer is sufficient since after that GNUnet propagates
177 information about other peers.  Note that the default configuration
178 contains URLs from where GNUnet downloads an initial hostlist
179 whenever it is started.  If you want to create an alternative URL for
180 others to use, the file can be generated on any machine running
181 GNUnet by periodically executing
182
183 $ cat $SERVICEHOME/data/hosts/* > the_file
184
185 and offering 'the_file' via your web server.  Alternatively, you can
186 run the build-in web server by adding '-p' to the OPTIONS value
187 in the "hostlist" section of gnunet.conf and opening the respective
188 HTTPPORT to the public.
189
190 If the solution with the hostlist URL is not feasible for your
191 situation, you can also add hosts manually.  Simply copy the hostkeys
192 to "$SERVICEHOME/data/hosts/" (where $SERVICEHOME is the directory
193 specified in the gnunet.conf configuration file).  You can also use
194 "gnunet-peerinfo -g" to GET a URI for a peer and "gnunet-peerinfo -p
195 URI" to add a URI from another peer.  Finally, GNUnet peers that use
196 UDP or WLAN will discover each other automatically (if they are in the
197 vicinity of each other) using broadcasts (IPv4/WLAN) or multicasts
198 (IPv6).
199
200 The local node is started using "gnunet-arm -s".  GNUnet should run
201 24/7 if you want to maximize your anonymity, as this makes partitioning
202 attacks harder.
203
204 Once your peer is running, you should then be able to access GNUnet
205 using the shell:
206
207 $ gnunet-search KEYWORD
208
209 This will display a list of results to the console.  You can abort
210 the command using "CTRL-C".  Then use
211
212 $ gnunet-download -o FILENAME GNUNET_URI
213
214 to retrieve a file.  The GNUNET_URI is printed by gnunet-search
215 together with a description.  To publish files on GNUnet, use the
216 "gnunet-publish" command.
217
218
219 The GTK user interface is shipped separately.  After downloading and
220 installing gnunet-gtk, you can invoke the setup tool and the
221 file-sharing GUI with:
222
223 $ gnunet-setup
224 $ gnunet-fs-gtk
225
226 For further documentation, see our webpage.
227
228
229 Hacking GNUnet
230 ==============
231
232 Contributions are welcome, please submit bugs to
233 https://gnunet.org/bugs/.  Please make sure to run contrib/report.sh
234 and include the output with your bug reports.  More about how to
235 report bugs can be found in the GNUnet FAQ on the webpage.  Submit
236 patches via E-Mail to gnunet-developers@gnu.org.
237
238 In order to run the unit tests with "make check", you need to
239 set an environment variable ("GNUNET_PREFIX") to the directory
240 where GNUnet is installed (usually, GNUnet will use OS specific
241 tricks in order to try to figure out the PREFIX, but since the
242 testcase binaries are not installed, that trick does not work
243 for them).  Also, before running any testcases, you must
244 complete the installation first.  Quick summary:
245
246 $ ./configure --prefix=$SOMEWHERE
247 $ make
248 $ make install
249 $ export GNUNET_PREFIX=$SOMEWHERE
250 $ make check
251
252 Some of the testcases require python >= 2.6 and pexpect to be
253 installed.  If any testcases fail to pass on your system, run
254 "contrib/report.sh" and report the output together with
255 information about the failing testcase to the Mantis bugtracking
256 system at https://gnunet.org/bugs/.
257
258
259 Running HTTP on port 80 and HTTPS on port 443
260 =============================================
261
262 In order to hide GNUnet's HTTP/HTTPS traffic perfectly, you might
263 consider running GNUnet's HTTP/HTTPS transport on port 80/443.
264 However, we do not recommend running GNUnet as root.  Instead, forward
265 port 80 to say 1080 with this command (as root, in your startup
266 scripts):
267
268 # iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1080
269
270 or for HTTPS
271
272 # iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 4433
273
274 Then set in the HTTP section of gnunet.conf the "ADVERTISED_PORT" to
275 "80" and "PORT" to 1080 and similarly in the HTTPS section the
276 "ADVERTISED_PORT" to "443" and "PORT" to 4433.
277
278 You can do the same trick for the TCP and UDP transports if you want
279 to map them to a priviledged port (from the point of view of the
280 network).  However, we are not aware of this providing any advantages
281 at this point.
282
283 If you are already running an HTTP or HTTPS server on port 80 (or 443),
284 you may be able to configure it as a "ReverseProxy".  Here, you tell
285 GNUnet that the externally visible URI is some sub-page on your website,
286 and GNUnet can then tunnel its traffic via your existing HTTP server.
287 This is particularly powerful if your existing server uses HTTPS, as
288 it makes it harder for an adversary to distinguish normal traffic to
289 your server from GNUnet traffic.  Finally, even if you just use HTTP,
290 you might benefit (!) from ISP's traffic shaping as opposed to being
291 throttled by ISPs that dislike P2P.  Details for configuring the
292 reverse proxy are documented on our website.
293
294
295 Stay tuned
296 ==========
297
298 * https://gnunet.org/
299 * https://gnunet.org/bugs/
300 * https://gnunet.org/svn/
301 * http://www.gnu.org/software/gnunet/
302 * http://mail.gnu.org/mailman/listinfo/gnunet-developers
303 * http://mail.gnu.org/mailman/listinfo/help-gnunet
304 * http://mail.gnu.org/mailman/listinfo/info-gnunet
305 * http://mail.gnu.org/mailman/listinfo/gnunet-svn