                 Welcome to GNUnet


What is GNUnet?
===============

GNUnet is an anonymous, distributed file-sharing
system that is currently developed at Purdue University. 
GNUnet is a part of the GNU project (http://www.gnu.org/).

This is a BETA release. The network has not been tested
on a large scale yet. While there are no known significant
bugs, the performance may be worse that for the final 
version. Do not run GNUnet on production machines. 

Anonymization and the format for the content stored
are already finalized and tested. Future versions will
support the same format for content.

For a longer description of the GNUnet System see our 
webpages http://www.gnu.org/projects/GNUnet/ and
http://www.ovmj.org/GNUnet/


How to install?
===============

The fast way for a single-user installation to
$HOME is to run 

# ./configure --prefix=$HOME
# make install
# mkdir ~/.gnunet
# cp contrib/gnunet.conf ~/.gnunet/

This will compile and install GNUnet to
~/bin and ~/lib and put the configuration
file where GNUnet expects it. For more
general information about the GNU build 
process read the INSTALL file.

If you want to use libextractor for automated keyword
extraction (recommended) you may have to pass the
flag "--with-extractor=PATH-TO-LIBEXTRACTOR" to 
configure. You should also make sure that libextractor
is actually found by the linker.

You may need to specify --with-crypto= to point to the base
for your openssl installation, i.e. ./configure
--with-crypto=/usr/local/openssl. In addition, if you
receive an error during the running of ./autogen.sh or
that looks like " macro `AM_PATH_GTK' not
found in library", then you may need to run aclocal by hand
with the -I option, pointing to your aclocal m4 macros, i.e.
aclocal -I /usr/local/share/aclocal

The default-configuration file for users that is provided
unter contrib/gnunet.conf should be put under
"/etc/skel/.gnunet/gnunet.conf". Users (including root, 
though running GNUnet as root is discouraged) must copy that 
file into their home directory before they can use
GNUnet. The rpm installs the gnunet.conf file for
running gnunetd as a deamon under /var/lib/GNUnet/gnunet.conf.

In order to start a "permanent" node, create a
new user "gnunet" and start "gnunetd" as that user
whenever the system boots. contrib/ also contains
some scripts that may be helpful for that purpose.
Alternatively, you can also install the rpm and 
enable the service by creating the appropriate links
to start gnunetd at boot time.

GDBM is currently required. Hopefully there will be
other options soon.

autoconf >= 2.52 is recommended.
libextractor >= 0.1.1 is highly recommended.

Trouble with OpenSSL
====================

A user remarked that if you get errors relating 
to OpenSSL, such as openssl/rsa.h not found or
linking against -lcrypt failed, you may want to try
to install openssl (0.9.6c) using some arguments
to config:

./config --prefix=/usr/local --openssldir=/usr/local/openssl

You can also try to specify --with-crypto=PREFIX
when configuring GNUnet to point to your ssl
directory.

Configuration
=============

The defaults are usually ok, you may want to adjust
the limitations (limit space consumption, etc.) though.
If you want to configure, edit "~/.gnunet/gnunet.conf".

If you want to use a different configuration file, 
pass the name of the configuration file as an 
argument with the option -c to any GNUnet application.


Usage
=====

First, you must obtain an initial list of
GNUnet hosts. A single host is sufficient since
after that GNUnet propagates host information.
Note that the default gnunet.conf contains a URL
from where gnunetd downloads an initial hostlist
whenever it is started. If you want to create 
an alternative URL for others to use, the file 
can be generated on any machine running gnunetd
by periodically executing

# cat ~/.gnunet/data/hosts/* > the_file

If the solution with the URL is not feasible
for your situation, you can also add hosts 
manually. The GNUnet webpage has a public 
directory of hostkeys under
http://www.ovmj.org/GNUnet/hosts/. You can of
course use any other source for these files.
Copy the hostkeys to "~/.gnunet/data/hosts/"
(or to another directory, depending on your
"~/.gnunet/gnunet.conf" configuration file).

Now start the local node using "gnunetd". gnunetd
should run whenever you are online. You may start
it as a service with "/etc/init.d/gnunetd start". To 
insert files into GNUnet, use the tools "gnunet-insert" and
"gnunet-insert-multi". 

If want to use a GUI, just invoke gnunet-gtk. 
If you want to use the shell, use
"gnunet-search KEYWORD". This will display a list
of results to the console. Then use 
"gnunet-download -o FILENAME -- HASH FILESIZE CRC" to 
retrieve a file. The HASH, FILESIZE and CRC are printed by
gnunet-search together with a description. 

For further documentation, see our webpage.


Hacking GNUnet
==============

Contributions are welcome, please submit bugs
to http://www.ovmj.org/~mantis/. Please make sure
to run contrib/report.sh and include the output with your
bug reports. Submit patches via E-Mail to 
gnunet-developers@gnu.org.


Stay tuned
==========

* http://www.gnu.org/software/GNUnet/
* http://www.ovmj.org/GNUnet/
* http://mail.gnu.org/mailman/listinfo/gnunet-developers
* http://mail.gnu.org/mailman/listinfo/help-gnunet
* http://mail.gnu.org/mailman/listinfo/info-gnunet

