2007-03-28 17:48:29 +00:00
|
|
|
Welcome to the AllMyData "tahoe" project. This project implements a
|
2007-04-27 20:47:15 +00:00
|
|
|
secure, distributed, fault-tolerant storage mesh.
|
2007-03-28 17:48:29 +00:00
|
|
|
|
2007-04-26 21:28:15 +00:00
|
|
|
The basic idea is that the data in this storage mesh is spread over all
|
2007-04-05 00:55:35 +00:00
|
|
|
participating nodes, using an algorithm that can recover the data even if a
|
|
|
|
majority of the nodes are no longer available.
|
|
|
|
|
2007-04-28 00:13:25 +00:00
|
|
|
The interface to the storage mesh allows you to store and fetch files, either
|
|
|
|
by self-authenticating cryptographic identifier or by filename and path.
|
2007-03-28 17:48:29 +00:00
|
|
|
|
2007-04-27 05:16:13 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
GETTING THE SOURCE CODE:
|
|
|
|
|
|
|
|
The code is available via darcs by running the following command:
|
|
|
|
|
|
|
|
darcs get http://allmydata.org/source/tahoe/trunk
|
|
|
|
|
|
|
|
See http://allmydata.org for all kinds of information, news, and community
|
|
|
|
contributions.
|
|
|
|
|
|
|
|
|
2007-04-27 20:47:15 +00:00
|
|
|
LICENCE:
|
|
|
|
|
|
|
|
Tahoe is offered under the GNU General Public License (v2 or later), with
|
|
|
|
the added permission that, if you become obligated to release a derived work
|
|
|
|
under this licence (as per section 2.b), you may delay the fulfillment of
|
|
|
|
this obligation for up to 12 months. See the COPYING file for details.
|
|
|
|
|
|
|
|
|
2007-03-28 17:48:29 +00:00
|
|
|
DEPENDENCIES:
|
|
|
|
|
2007-04-30 04:56:23 +00:00
|
|
|
Note: All of the following dependencies can probably be installed through
|
|
|
|
your standard package management tool if you are running on a modern Unix
|
|
|
|
operating system. If you are running any modern Linux or *BSD distribution
|
|
|
|
then you can almost certainly get them through your standard package
|
|
|
|
manager. If you are running Mac OS X then the "fink" package management
|
|
|
|
tool does not have most of these packages, but the "darwinports" package
|
|
|
|
management tool appears to have them. If you are running on Windows then
|
|
|
|
I'm afraid you'll have to install them by hand (although the "cygwin"
|
|
|
|
package management tool does have some of them). If you are running on
|
|
|
|
Solaris, I would like to hear from you -- I have no idea how it is done on
|
|
|
|
Solaris nowadays.
|
2007-04-27 05:16:13 +00:00
|
|
|
|
|
|
|
* a C compiler (language)
|
|
|
|
|
|
|
|
* GNU make (build tool)
|
2007-04-27 04:00:49 +00:00
|
|
|
|
|
|
|
* Python 2.4 or newer (tested against 2.4, 2.5, and 2.5.1), but v2.5 or
|
|
|
|
higher is required on Windows-native) (language)
|
2007-04-30 04:56:23 +00:00
|
|
|
|
|
|
|
http://python.org/
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-04-27 22:43:13 +00:00
|
|
|
* Python Twisted (tested against both 2.4 and 2.5) (network and operating
|
|
|
|
system integration library)
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-04-30 04:56:23 +00:00
|
|
|
http://twistedmatrix.com/
|
|
|
|
|
|
|
|
You need the following subpackages, which are included in the default
|
|
|
|
Twisted distribution:
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-03-29 19:02:32 +00:00
|
|
|
* core (the standard Twisted package)
|
|
|
|
* web, trial, conch
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-04-30 04:56:23 +00:00
|
|
|
Twisted requires zope.interface, a copy of which is included in the
|
|
|
|
Twisted distribution.
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-04-27 22:43:13 +00:00
|
|
|
* Python Nevow (probably 0.9.0 or later) (web presentation language)
|
2007-04-30 04:56:23 +00:00
|
|
|
|
|
|
|
http://divmod.org/trac/wiki/DivmodNevow
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-04-27 22:43:13 +00:00
|
|
|
* Python setuptools (build and distribution tool)
|
2007-04-30 04:56:23 +00:00
|
|
|
|
|
|
|
http://peak.telecommunity.com/DevCenter/EasyInstall#installation-instructions
|
2007-04-27 04:00:49 +00:00
|
|
|
|
2007-04-27 22:43:13 +00:00
|
|
|
* Python PyOpenSSL (0.6 or later) (secure transport layer)
|
2007-04-26 21:28:15 +00:00
|
|
|
|
2007-04-30 04:56:23 +00:00
|
|
|
http://pyopenssl.sourceforge.net
|
|
|
|
|
|
|
|
To install PyOpenSSL on Windows-native, download this:
|
|
|
|
http://allmydata.org/source/pyOpenSSL-0.6.win32-py2.5.exe
|
2007-04-04 18:18:38 +00:00
|
|
|
|
2007-04-26 22:00:22 +00:00
|
|
|
* to build the debian packages you will need all the usual debian-packaging
|
|
|
|
tools, which means the 'build-essential' metapackage and all of the
|
|
|
|
packages listed as "Build-Depends" in DIST/debian/control for your
|
|
|
|
distribution. You will also want the 'fakeroot' package to allow the
|
|
|
|
top-level 'make deb-DIST' targets work.
|
|
|
|
|
2007-04-27 23:03:51 +00:00
|
|
|
* on Windows, the pywin32 package
|
2007-04-30 04:56:23 +00:00
|
|
|
|
|
|
|
http://sourceforge.net/projects/pywin32/
|
2007-04-27 23:03:51 +00:00
|
|
|
|
2007-04-27 05:16:13 +00:00
|
|
|
|
2007-03-28 17:48:29 +00:00
|
|
|
BUILDING:
|
|
|
|
|
2007-04-26 21:28:15 +00:00
|
|
|
Just type 'make'. This works on Windows too, provided that you have the
|
2007-04-09 23:14:44 +00:00
|
|
|
dependencies mentioned above (either a normal cygwin build or a mingw-style
|
|
|
|
native build is supported by the makefile -- the cygwin build is the
|
|
|
|
default).
|
|
|
|
|
|
|
|
If the desired version of 'python' is not already on your PATH, then type
|
|
|
|
'make PYTHON=/path/to/your/preferred/python'.
|
2007-03-28 17:48:29 +00:00
|
|
|
|
|
|
|
'make test' runs the unit test suite.
|
|
|
|
|
2007-04-27 05:16:13 +00:00
|
|
|
|
2007-04-05 00:55:35 +00:00
|
|
|
INSTALLING:
|
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
The Debian Way:
|
|
|
|
|
|
|
|
If you're running on a debian system, use 'make deb-dapper', 'make
|
|
|
|
deb-sid', 'make deb-edgy', or 'make deb-feisty' to construct a debian
|
|
|
|
package named 'allmydata-tahoe', which you can then install.
|
|
|
|
|
|
|
|
The Python Way:
|
|
|
|
|
|
|
|
You'll need to run four separate install steps, one for each of the four
|
|
|
|
subpackages (allmydata, allmydata.Crypto, foolscap, and zfec). If you use
|
|
|
|
GNU stow, add the options "--prefix=." and
|
|
|
|
"--root=/usr/local/stow/${PACKAGE}" to the "setup.py install" command.
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
for PACKAGE in zfec Crypto foolscap ; do
|
|
|
|
cd src/${PACKAGE} && python setup.py install && cd ../..
|
|
|
|
done
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
# the tahoe subpackage's setup.py script is in the root directory
|
|
|
|
PACKAGE=tahoe
|
|
|
|
python setup.py install
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
The Running-In-Place Way:
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
To run from a source tree (without installing first), type 'make', which
|
|
|
|
will put all the necessary libraries into a local directory named
|
|
|
|
"./instdir/", which you can then add to your PYTHONPATH .
|
2007-04-30 04:56:23 +00:00
|
|
|
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
To Test That It Is Properly Installed:
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
To test that all the modules got installed properly, start a python
|
|
|
|
interpreter and import modules as follows:
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-04-30 05:16:33 +00:00
|
|
|
% python
|
|
|
|
Python 2.4.4 (#2, Jan 13 2007, 17:50:26)
|
|
|
|
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
|
|
|
|
Type "help", "copyright", "credits" or "license" for more information.
|
|
|
|
>>> import zfec
|
|
|
|
>>> import allmydata.Crypto
|
|
|
|
>>> import foolscap
|
|
|
|
>>> import allmydata.interfaces
|
2007-04-05 00:55:35 +00:00
|
|
|
|
2007-03-28 17:48:29 +00:00
|
|
|
|
|
|
|
RUNNING:
|
|
|
|
|
2007-04-05 00:55:35 +00:00
|
|
|
If you installed one of the debian packages constructed by "make deb-*" then
|
|
|
|
it creates an 'allmydata-tahoe' executable, usually in /usr/bin . If you
|
2007-04-20 00:30:21 +00:00
|
|
|
didn't install a package you can find allmydata-tahoe in bin/ . This tool is
|
|
|
|
used to create, start, and stop nodes. Each node lives in a separate base
|
|
|
|
directory, inside of which you can add files to configure and control the
|
|
|
|
node. Nodes also read and write files within that directory.
|
|
|
|
|
|
|
|
A mesh consists of a single central 'introducer' node and a large number of
|
|
|
|
'client' nodes. If you are joining an existing mesh, the introducer node
|
|
|
|
will already be running, and you'll just need to create a client node. If
|
|
|
|
you're creating a brand new mesh, you'll need to create both an introducer
|
|
|
|
and a client (and then invite other people to create their own client nodes
|
|
|
|
and join your mesh).
|
|
|
|
|
|
|
|
The introducer node is constructed by running 'allmydata-tahoe
|
|
|
|
create-introducer --basedir $HERE'. Once constructed, you can start the
|
|
|
|
introducer by running 'allmydata-tahoe start --basedir $HERE' (or, if you
|
|
|
|
are already in the introducer's base directory, just type 'allmydata-tahoe
|
|
|
|
start'). Inside that base directory, there will be a pair of files
|
|
|
|
'introducer.furl' and 'vdrive.furl'. Make a copy of these, as they'll be
|
|
|
|
needed on the client nodes.
|
2007-03-28 17:48:29 +00:00
|
|
|
|
|
|
|
To construct a client node, pick a new working directory for it, then run
|
|
|
|
'allmydata-tahoe create-client --basedir $HERE'. Copy the two .furl files
|
2007-04-20 00:30:21 +00:00
|
|
|
from the introducer into this new directory, then run 'allmydata-tahoe start
|
2007-03-28 17:48:29 +00:00
|
|
|
--basedir $HERE'. After that, the client node should be off and running. The
|
2007-04-20 00:30:21 +00:00
|
|
|
first thing it will do is connect to the introducer and introduce itself to
|
|
|
|
all other nodes on the mesh. You can follow its progress by looking at the
|
2007-03-28 17:48:29 +00:00
|
|
|
$HERE/twistd.log file.
|
|
|
|
|
|
|
|
To actually use the client, enable the web interface by writing a port
|
|
|
|
number (like "8080") into a file named $HERE/webport and then restarting the
|
|
|
|
node with 'allmydata-tahoe restart --basedir $HERE'. This will prompt the
|
|
|
|
client node to run a webserver on the desired port, through which you can
|
|
|
|
view, upload, download, and delete files.
|
|
|
|
|
2007-04-27 03:16:48 +00:00
|
|
|
A client node directory can also be created without installing the code
|
|
|
|
first. Just use 'make create-client', and a new directory named 'CLIENTDIR'
|
|
|
|
will be created inside the top of the source tree. Copy the relevant .furl
|
|
|
|
files in, set the webport, then start the node by using 'make start-client'.
|
|
|
|
To stop it again, use 'make stop-client'. Similar makefile targets exist for
|
|
|
|
making and running an introducer node.
|
|
|
|
|
|
|
|
There is a public mesh available for testing. Look at the wiki page
|
|
|
|
(http://allmydata.org) for the necessary .furl data.
|
2007-04-28 00:13:25 +00:00
|
|
|
|