GNUnet is a mesh routing layer for end-to-end encrypted networking and a framework for distributed applications designed to replace the old insecure Internet protocol stack.
In other words, GNUnet provides a strong foundation of free software for a global, distributed network that provides security and privacy. Along with an application for secure publication of files, it has grown to include all kinds of basic applications for the foundation of a GNU internet.
For GNUnet on GNU/Linux you need to have /dev/net/tun for some GNUnet services (VPN, DNS, EXIT).
Device Drivers -> Network device support <*> Universal TUN/TAP device driver support
emerge --ask net-misc/gnunet
For graphical tools, install net-misc/gnunet-gtk:
emerge --ask net-misc/gnunet-gtk
To configure 1) Add desired user(s) to the 'gnunet' group 2) Edit the system-wide config file '/etc/gnunet/gnunet.conf' preferably using 'gnunet-setup -c /etc/gnunet/gnunet.conf' ('gnunet-setup' is part of the gnunet-gtk package) 3) You may want to choose other bootstrap nodes than the ones provided in /usr/share/gnunet/hellos or remove them if you want to run GNUnet another way. 4) Certain services will require '/dev/net/tun' to exist, which you must enable in your kernel. For further troubleshooting and info, take a look at the wiki page about gnunet.
GNUnet can be configured systemwide, additionally it per user overwrites happen in ~/.config/ gnunet.conf. The Systemwide configuration is handled in /etc/gnunet/, per user configuration is done either through gnunet-setup which comes with net-misc/gnunet-gtk) or by editing the above mentioned file.
During emerge of gnunet, the following file is created for default minimal configuration:
[PATHS] DEFAULTCONFIG = /etc/gnunet.conf [arm] SYSTEM_ONLY = YES USER_ONLY = NO [transport-tcp] PORT = 2086 ADVERTISED_PORT = 2086 [transport-udp] PORT = 2086 ADVERTISED_PORT = 2086 [nat] BEHIND_NAT = YES ENABLE_UPNP = NO USE_LOCALADDR = NO DISABLEV6 = YES [hostlist] OPTIONS = -b -e
After the configuration file has been modified or gnunet-setup was run, proceed to the appropriate service section for the target init system.
The complete options for configuration can be found in /usr/share/gnunet/config.d/ for gnunet and /usr/share/gnunet-gtk/config.d/ for gnunet-gtk. GNUnet comes with sane defaults which will work.
To start immediately:
rc-service gnunet start
To start the gnunet service on system boot, add it to the default runlevel:
rc-update add gnunet default
To start immediately:
systemctl start gnunet.service
To start the gnunet service on system boot:
systemctl enable gnunet.service
Add explanations of commonly used words here.
GNUnet comes with a broad range of services, which will be described here. (48 services total)
For further input, consider reading the Official GNUnet User Handbook
Graphical Interaction with gnunet.
gnunet-fs-gtk is a file sharing client without distracting extras
Publishing files can be done either through gnunet-gtk, or directly on the commandline. The following assumes you have the gnunet service started and gnunet configured:
For default values, you can use:
* gnunet-publish cats.avi
Furthermore, you can add options:
* -a, --anonymity=LEVEL set the desired LEVEL of sender-anonymity * -D, --disable-extractor do not use libextractor to add keywords or metadata * -d, --disable-creation-timedisable adding the creation time to the metadata of the uploaded file * -e, --extract print list of extracted keywords that would be used, but do not perform upload * -k, --key=KEYWORD add an additional keyword for the top-level file or directory (this option can be specified multiple times) * -m, --meta=TYPE:VALUE set the meta-data for the given TYPE to the given VALUE * -n, --noindex do not index, perform full insertion (stores entire file in encrypted form in GNUnet database) * -P, --pseudonym=NAME publish the files under the pseudonym NAME (place file into namespace) * -p, --priority=PRIORITY specify the priority of the content * -r, --replication=LEVEL set the desired replication LEVEL * -u, --uri=URI URI to be published (can be used instead of passing a file to add keywords to the file with the respective URI) * -V, --verbose be verbose (print progress information)
Read up on how to report bugs and how to get involved with development here: 
Development depends on individual projects, for example SecuShare works with the latest svn of gnunet:
emerge --ask =net-misc/gnunet-9999