Let us know in #tahoe-lafs if you set up an introducer to ensure that our list is up-to-date. {OK}

{i} There are two implementations of Tahoe-LAFS on I2P. This document describes duck's method.

About

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

I2P needs to be installed and configured before following the procedures outlined in this document.

The tahoe-i2p-install script created by smeghead will be used for the actual installation.

Requirements

For UNIX-like systems (*BSD/Linux/Mac OS X/Solaris):

  • gcc
  • Python 2.6 or 2.7 (Python 3.x can be installed but tahoe will not work without 2.6 or 2.7 being on the system.)
  • wget, aria, curl, or eepget
  • development headers for Python and OpenSSL
  • crypto++ (named crypto++ in ArchLinux, and libcrypto++-dev in Debian/Ubuntu)
  • FreeBSD only: py-sqlite3 (available in /usr/ports/databases/py-sqlite3)
  • net-tools (available on most systems, recently deprecated in ArchLinux)
  • Optional: gmp
  • about 100MB of free space to build and install

(!) If you're using Debian or Ubuntu, try the Debian packages or the PPA for Ubuntu.

Most of the prerequisites for building on ArchLinux can be installed with the following:

pacman -S python2 python2-pyasn1 pycrypto crypto++ python-simplejson \
        python2-pyopenssl twisted net-tools

On Debian/Ubuntu systems:

apt-get install build-essential \
  python-dev python-twisted python-setuptools \
  python-nevow python-argparse python-simplejson python-openssl patch

For Windows:

  • Windows XP, 2003, Vista, 7, 8, or 8.1
  • Python 2.6 or 2.7 (only if built from source; the pre-patched bundle includes Python).

Installation

Windows

Instructions for Windows can be found on another page.


Linux, OSX, FreeBSD, Solaris, etc.

PPA (or killyourtv's repo) users

After following the instructions to add the PPA, install tahoe with apt-get install i2p-tahoe-lafs. Skip to the configuration instructions.


ArchLinux (AUR) users

skydrome has created packages for Foolscap-I2P and Tahoe-LAFS-I2P. These packages can be found in AUR. As with any other AUR packages, it's a good idea to examine the PKGBUILD files.

After installing the packages, skip to the configuration instructions.


If not using packages...

Create a directory for the installation, ~/tahoe is recommended.

$ mkdir ~/tahoe
$ cd ~/tahoe

/!\ Important: After installation you must read the configuration instructions! If you don't configure Tahoe properly for use on I2P, information about you such as your LAN (or even WAN) IP address can leak out. /!\

1.10.0-based, multi-introducer capable (see ticket 68)

tahoe-i2p-install-v1.3.2.sh | SHA256SUM | Signature | torrent | changelog | for Windows

(Note: If you're already running Tahoe on I2P, you can fetch an updated offline installer from URI:DIR2-RO:4r6eqknuhqxz23ayaowi6ubhna:xbd2wgcv25qcjjabmzal425rrwjmg4iip6riaw5cewyqcu6pfhfq.

  1. Make it executable:

     $ chmod u+x tahoe-i2p-install-v1.3.2.sh
    
  2. Show usage information

     $ ./tahoe-i2p-install-v1.3.2.sh --help
    
  3. Perform the actual installation (see usage information from above for additional options)

     $ ./tahoe-i2p-install-v1.3.2.sh
    

You can safely ignore most C / C++ compilation warnings. If you get any errors, please see the list of common errors below.

As suggested by the script, update your environment's PATH. Put this variable in your ~/.bashrc (or equivalent) to preserve it between shell sessions.

Verify the installation:

[!] It is very important that you read through the usage manual to make sure you don't accidentally leak your identity.

$ tahoe --version

This will print the version of Tahoe and its dependent libraries.

Done

If there were no errors during the installation, you are now the proud owner of a Tahoe-LAFS node for I2P. :D

Next will be the configuration of your node(s) specifically for I2P.

Upgrading from an earlier release (if not using the PPA or AUR packages)

Move the old directory out of the way then run the updated installer script. For example, if you previously installed to ~/tahoe as recommended above, run mv ~/tahoe/tahoe-lafs-i2p ~/tahoe/tahoe-lafs-i2p.old then follow the installation instructions above. The installation files are also available from within Tahoe itself at URI:DIR2-RO:4r6eqknuhqxz23ayaowi6ubhna:xbd2wgcv25qcjjabmzal425rrwjmg4iip6riaw5cewyqcu6pfhfq.

After you're satisfied that the upgrade was successful, you can remove the backup directory.


Common Errors

twisted/runner/portmap.c:10:20: error: Python.h: No such file or directory
  twisted/runner/portmap.c:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
  twisted/runner/portmap.c:31: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
  twisted/runner/portmap.c:45: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘PortmapMethods’
  twisted/runner/portmap.c: In function ‘initportmap’:
  twisted/runner/portmap.c:55: warning: implicit declaration of function ‘Py_InitModule’
  twisted/runner/portmap.c:55: error: ‘PortmapMethods’ undeclared (first use in this function)
  twisted/runner/portmap.c:55: error: (Each undeclared identifier is reported only once
  twisted/runner/portmap.c:55: error: for each function it appears in.)
  Traceback (most recent call last):
    File "setup.py", line 417, in 
        **setup_args
      File "/usr/lib/python2.6/distutils/core.py", line 113, in setup
          _setup_distribution = dist = klass(attrs)
You need to install the Python development headers. In Linux distributions this is usually the python-dev (Debian / Ubuntu) or python-devel (RedHat / Fedora / SuSE) package.

Failed to load application: "unknown option name 'http-proxy'"
The vanilla, unpatched foolscap is being found by tahoe. If you have foolscap installed via your package manager, try to remove it and then re-run the installation script.

error: openssl/ssl.h: No such file or directory
You need to install the OpenSSL development headers. In Linux distributions this is usually the libssl-dev (Debian / Ubuntu) or openssl-devel (RedHat / Fedora / SuSE) package.

line 202: patch not found
Your system is missing patch. You can probably install it with apt-get install patch or yum install patch

conftest.c:1:23: error: sys/epoll.h: No such file or directory
This is expected (and harmless) on BSD systems. You can ignore it.

embeddedcryptopp/cryptlib.cpp:33:26: error: uninitialized const ‘CryptoPP::g_nullNameValuePairs’ [-fpermissive]
embeddedcryptopp/cryptlib.h:321:20: note: ‘const class CryptoPP::NullNameValuePairs’ has no user-provided default constructor
error: Setup script exited with error: command 'gcc' failed with exit status 1
Set export PYCRYPTOPP_DISABLE_EMBEDDED_CRYPTOPP=1 then re-attempt the installation.


Running pycryptopp-0.5.29/setup.py -q bdist_egg --dist-dir /tmp/easy_install-ppXNB0/pycryptopp-0.5.29/egg-dist-tmp-Zh7AeP
Did not locate libcryptopp in the usual places.
Adding /usr/local/{include,lib} and -lcryptopp in the hopes
that they will work.
pycryptopp/_pycryptoppmodule.cpp:10:29: fatal error: cryptopp/config.h: No such file or directory
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status 1
Your system is missing crypto++. In Debian and Ubuntu, install the libcrypto++-dev package. In ArchLinux, the package is called crypto++. After installing crypto++, re-attempt the installation of Tahoe-LAFS.

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a(functexcept.o): relocation R_X86_64_32 against `std::bad_typeid::~bad_typeid()' can not be used when making a shared object; recompile with -fPIC
The one time this came up the user was using Debian Squeeze with some packages from Unstable without upgrading gcc to unstable's version (a transition to multiarch was underway in unstable). The moral: Mixing and matching packages between stable & unstable causes breakage if you're not careful. ;)

Upgrading gcc to the version in unstable might have been enough to solve this, but perhaps a full upgrade to multiarch would be necessary to properly fix this. A quick 'n' dirty solution would have been to create a chroot with debootstrap and do the compilation there. (The user ultimately used my pycryptopp packages.

zope.interface-3.8.0-py2.6-win32.egg\zope\interface\interface.py:688: UserWarning: Hashing uninitialized InterfaceClass instance
This error can be safely ignored.

warning: GMP or MPIR library not found; Not building Crypto.PublicKey._
Installing gmp is recommended but this is another errror that can be safely ignored.

Failed to load application: crypto for PB is not available, try importing foolscap.crypto and see what happens
or also

Warning: dependency 'pyopenssl' could not be imported. pkg_resources thought it should be possible to import version '0.12' from 'tahoe-lafs-i2p/support/lib/python2.7/site-packages/pyOpenSSL-0.12-py2.7-linux-armv6l.egg'.
The exception trace was (, 'cannot import name crypto', ('tahoe-lafs-i2p/support/lib/python2.7/site-packages/pyOpenSSL-0.12-py2.7-linux-armv6l.egg/OpenSSL/__init__.py', 36, '', 'from OpenSSL import crypto')).
This has only been seen, so far, on the Raspberry Pi. You can work around it by installing the python-openssl package, then removing the egg that tahoe-i2p-install installed.
rm -rf tahoe-lafs-i2p/support/lib/python2.7/site-packages/pyOpenSSL-0.12-py2.7-linux-armv6l.egg

When trying tahoe --version or on the webui, you may see the following:


Warning: dependency 'cryptography' (version '0.5.4') found by pkg_resources not found by import.
Warning: dependency 'six' (version '1.7.3') found by pkg_resources not found by import.
Warning: dependency 'cffi' (version '0.8.6') found by pkg_resources not found by import.
Warning: dependency 'pycparser' (version '2.10') found by pkg_resources not found by import.
This potentially scary warning is not really a problem. It's caused by new dependencies that are pulled in by pyopenssl >= 14.

If it annoys you as much as it annoyed me, you can fix it following the instructions outlined in the Tahoe-LAFS bugtracker.

In Debian, using my packages, I just edited /usr/lib/python2.7/dist-packages/allmydata/__init__.py and restarted Tahoe. The warning disappeared into the ether.