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