Running Tahoe-LAFS for I2P

1) About this document

These instructions are I2P specific, for generic documentation see Tahoe-LAFS Docs

Take care! This document is partly out of date. Please read further on this doc for actual tahoe-lafs on I2P!

At this point we assume you have successfully installed Tahoe-LAFS for I2P. You should also have a running I2P node.

2) Preparation

Tahoe-LAFS will need an I2P HTTP Proxy to communicate between nodes. This document will assume you use the default one on 127.0.0.1:4444, but you can also create another proxy, for example with 1 hop for lower latency (but also lower anonymity).

In this manual we will assume that you have updated your PATH as suggested in the installation guide, so you can easily use the tahoe command. If not you need to provide the full path name each time you execute tahoe.

3) Client node

You use a Client node to talk to storage nodes to put files on the grid and get them back off. There is a web interface (default on http://127.0.0.1:3456/) and a command line interface (via tahoe) for accessing this data. Other interfaces are available, see the Tahoe-LAFS site for details.

PRIVACY WARNING: You should NOT open up the web interface via I2P, until we have implemented additional privacy scrubbing. At this moment the web interface will show you detailed version numbers and the full path (including your username) where Tahoe is installed.

Create a client node

We will install a client node in ~/.tahoe you can also put it in another location, see the Tahoe-LAFS documentation for more information.

    $ tahoe create-client

Configuration

Now edit the configuration file ~/.tahoe/tahoe.cfg

    [node]
    nickname = yourclientnodename
    web.port = tcp:3456:interface=127.0.0.1
    anonymize_local_addresses = true
    http_proxy = 127.0.0.1:4444

Specify a nickname for your node. This is shown to all nodes in the grid, so be careful what you put there.

You can change the web.port number and bind address for the web interface if you want. Don't open this up to the public; see above privacy warning.

Change anonymize_local_addresses to true. This will prevent your other interfaces besides 127.0.0.1 from being broad casted.

Uncomment http_proxy and enter the I2P HTTP Proxy.

    [client]
    introducer.furl = pb://vysqjw7x7hfiuozjsggpd5lmyj35pggu@iyawu4w66gd2356vguey2veyn7jbpyzqgpmb74wd2gxzvkuzbxya.b32.i2p/introducer

Specify the introducer.furl. This defines the grid and should be published to everyone who wishes to connect to this grid. The example above points to a test introducer operated by duck. Use at your own risk!

The other values you can leave as default for now. If you are curious what they do, read Configuring a Tahoe node.

Node Operation

To start your node as a daemon:

    $ tahoe start

You can now access your node via the web interface at http://127.0.0.1:3456/

Some example URLs to try:

Besides the web interface, there is also a command line interface and web API.

To stop your node if running as daemon:

    $ tahoe stop

4) Storage node

Before running a storage node, experiment with a client node (described above) and familiarize yourself with the official Tahoe-LAFS documentation.

Create a server tunnel in the I2P Tunnel Manager

Choose Type: Standard (don't pick HTTP; it won't work). Point it to a a free TCP port (for example 3459) where you want to run your storage server on. You can reduce your tunnel length for lower latency (but also lower anonymity). Start the server tunnel, copy the base32 destination for later usage.

Configuration

Edit ~/.tahoe/tahoe.cfg

We'll keep most of the configuration from the previous section, but a few values need to be added.

    [node]
    tub.port = tcp:3459:interface=127.0.0.1
    tub.location = n6k7tu37diq4obmcmv3f144oxxxnehp6njz5lwu4hllp5gp6hbga.b32.i2p

Specify the tub.port and interface to listen on. This is the TCP port as configured for the I2P server tunnel. Bind it only to 127.0.0.1 to prevent outside access.

For tub.location enter the Base32 destination for the server tunnel as created in the I2P Tunnel Manager console. As I2P destinations don't have a port, don't specify any. Also don't add any other hostnames or IP addresses as these would be broadcasted to everybody, leaking your identity.

    [storage]
    enabled = true

Change enabled to true to turn your client into a storage node.

Optionally you define how much disk space is reserved with reserved_space:

    reserved_space = 5GB

The storage server will not accept any share which causes the amount of free disk space to drop below this value. Currently there is no option to directly limit the size consumed by the storage server, see ticket #671.

Node Operation

Restart your node to have these changes take effect:

    $ tahoe restart

Verify on the web interface that the Storage Server service is running.

5) Introducer

TODO