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
go get github.com/golang/dep/cmd/dep)
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
vagrant-init.sh this is done for the client
client) case in
vagrant-init.sh for the exact commands to run (assumes root).
- Ensure that
user_allow_otheris set in
/etc/fuse.confis readable by the
/etc/systemd/system/rufs-client.serviceto set the correct address for the master connection
- Download the CA-certificate from the master and put it in
- 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.