RUFS is a filesystem that makes it easy to conveniently shares files with others. You need to run one master job which ties everything together and participants can run servers that connect to the master and publish which files they have.
RUFS provides a FUSE mount which will show all files shared by all participants.
- golang >= 1.9
dep
(go get github.com/golang/dep/cmd/dep
)fuse
Preparations for both master and client can be found in vagrant-bootstrap.sh
(assumes root).
Refer to the master)
case in vagrant-init.sh
case for the exact commands to run (assumes root).
Ensure that external clients can reach port 1666.
To provide tokens, run rufs-master-bolt --var_storage /var/lib/rufs/ --get-auth-token xyz
and send the token to user xyz
. In vagrant-init.sh
this is done for the client rufs-client
.
Refer to client)
case in vagrant-init.sh
for the exact commands to run (assumes root).
- Ensure that
user_allow_other
is set in/etc/fuse.conf
and that/etc/fuse.conf
is readable by therufs
process user. - Edit
/etc/systemd/system/rufs-client.service
to set the correct address for the master connection - Download the CA-certificate from the master and put it in
/srv/rufs/rufs-master-ca.crt
. - Acquire a token from the master
Ensure that external clients can reach port 1667.
You can now add files to /srv/rufs/share/
such that they can be indexed and be made available to the clients connected to the master.
There is one master job which exposes a few RPCs:
- Signin - authenticate and give a host:port where to reach the server
- Register - authenticate with key and get a signed cert
- SetFile - publish a file (filename, size, mtime and sha1)
- GetDir - directory listing (returning all info from earlier SetFile calls)
- GetOwners - find out which peers have a certain file (by hash, not filename)
Every participant runs a server job which exposes these RPCs:
- Ping - check whether this node is reachable and working
- Read - read a chunk of data from a file
Every job needs to have a public IP+port which is reachable by all others.
The master never sees any file content, it will see hashes.
When reading a file, the server will connect to all nodes having a file with that hash and read it from a arbitrary one. (This will be improved later.)
We've got a list on the issue tracker for that.