Petmail is a secure communication/file-sharing system. It is a reboot of my earlier "Petmail" spam-resistant mail system (http://petmail.lothar.com/), continuing the aims of that project but not sharing any code. It also draws inspiration from Tahoe-LAFS, Dropbox, Pond/Panda, and others.
Nothing works yet. I'm slowly building functionality to meet the aspirations of this document.
What works so far:
-
building (if you can get libffi installed first):
setup.py safe_develop -
unit tests:
./bin/petmail test -
creating two test nodes in the source directory, enabling their "local mailboxes", having them invite each other, sending a basic text message from one to the other, and dumping the incoming messages:
make rebuild enable-local-mailbox connect./bin/petmail -d n1 send-basic 1 hello./bin/petmail -d n2 fetch-messages
The web frontend (petmail open) contains addressbook-manipulation UI, and a
just-barely-functional message-sending UI.
The invitation mechanism is functional but not complete. It does no significant keystretching. The default configuration uses a baked-in rendezvous server running on slow unreliable hardware.
The message-sending mechanism can send to external mailbox servers, and the invite-to-use-mailbox code works, but it is difficult to configure the nodes correctly.
To run from source, you will need Python (2.x), the development headers (python-dev), and a C compiler. You will also either need a functional python-cffi installation, or a copy of libffi somewhere that "pip install cffi" can find it. Given these, you can then build the dependencies, create and start a node, and open the web-based control panel like so:
python setup.py safe_develop
./bin/petmail create-node
./bin/petmail start
./bin/petmail open
Users are encouraged to run a pre-packaged application instead, but they do not exist yet. Once you start this non-existent application, use the menu item to open the control panel.
The node's working files are stored in a "basedir", which defaults to
~/.petmail in your home directory. Petmail does not modify any files
outside of this base directory. If you'd like to create a node somewhere
else, use ./bin/petmail create-node OTHERDIR. The basedir includes a copy
of the petmail executable that knows where its basedir is, so once you've
created a node in OTHERDIR, you can run e.g. OTHERDIR/petmail start and
OTHERDIR/petmail open to launch the node and access its control panel.
(Note: the safe_develop command will install hash-verified dependency
tarballs into a local virtualenv named "venv/", then uses the setuptools
"develop" command to link the petmail sources into this virtualenv. The
./bin/petmail script looks in "venv/" for its source code. safe_develop
is not yet completely safe: dependencies referenced by setup_requires= are
not currently verified.)
[this section contains forward-looking statements and is likely to contain intentions rather than accomplishments]
Each Petmail node runs as a background application on your local computer.
All interaction takes place through a browser-based control panel, which you
can open by running petmail open.
Through the control panel, you can access the Address Book, which contains
contact information for everyone Petmail knows about. Use Invitations to
add people to your address book. You can exchange messages with people
through Rooms. You can also transfer files by dragging them into a Room.
Petmail also provides folder synchronization between computers (either your
own, or with other people).
To receive messages, you will need a Mailbox, which is a server that runs
all the time and has a publically-reachable IP address. You can run your own
mailbox, if you have a server like that, or someone else may run a mailbox
for you. Invitations are used to offer and add Mailboxes too.
To store files, either to transfer to others or to synchronize with yourself,
you'll need a Storage Server. Again, this requires uptime and a public IP.
Petmail nodes can be configured to use S3 and other commodity storage systems
for this role, however some systems are only suitable for share-with-self
use, not share-with-others.
The docs/ directory contains more information, including additional build
instructions and protocol specifications.
Thanks for using Petmail!
Brian Warner
