design
This commit is contained in:
parent
2f4af8ef93
commit
43d7862b44
1 changed files with 91 additions and 0 deletions
|
@ -0,0 +1,91 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 1"""
|
||||
date="2017-03-30T16:51:24Z"
|
||||
content="""
|
||||
Using a remote for this seems problimatic, because the remote is not
|
||||
pointing at a single well-defined data store, but instead whatever peers
|
||||
happen to exist on the network.
|
||||
|
||||
For one, `copy --to=udp-multicast` would not try to send files that it thinks
|
||||
are already located in that remote. I suppose this could be dealt with by
|
||||
making the transfers always seem to fail, so it never thinks that the
|
||||
multicast remote has any files.
|
||||
|
||||
But then, `copy --from=udp-multicast` would not try to receive files,
|
||||
unless it thinks they're in that remote. And we just established it should
|
||||
not think any files are in that remote. So that's a problem.
|
||||
|
||||
Also, the copy from/to would need to be operating on the same file at the
|
||||
same time, which seems problimatic. If a receiving git-annex is a little
|
||||
slower than the sender, or is operating on a slightly different set of
|
||||
files, it would then miss a file being broadcast by the sender.
|
||||
|
||||
These issues seem to point to this needing to use some other, more
|
||||
special-purpose commands for muticast.
|
||||
|
||||
----
|
||||
|
||||
It probably needs encryption, both for privacy and to ensure that files
|
||||
are being received from the sender you intended, and not someone else
|
||||
who might be broadcasting the contents of a different repository.
|
||||
|
||||
Here's how to set up encryption and authentication with uftp,
|
||||
so that both client and server actually encrypt and check that they're
|
||||
talking with a known entity. It took a while to figure out.
|
||||
|
||||
Client:
|
||||
|
||||
uftp_keymgt -g rsa:512 ~/client_key
|
||||
# Parse the fingerprint value from its output; does not
|
||||
# seem to be a better way, except perhaps using openssl to examine
|
||||
# the key file. This is CLIENT_FINGERPRINT
|
||||
|
||||
# Pick a UID for the client. This is an 8-diget hex number,
|
||||
# which needs to be unique across clients. Default is based on IP
|
||||
# adddres, but for git-annex it could be derived from the git-annex
|
||||
# UUID. This is CLIENT_UID.
|
||||
|
||||
Server:
|
||||
|
||||
uftp_keymgt -g rsa:512 ~/servant_key
|
||||
# Parse the SERVER_FINGERPRINT from its output.
|
||||
|
||||
# Pick a SERVER_UID for the server.
|
||||
|
||||
Client:
|
||||
|
||||
# create a file "authlist" that contains "$SERVER_UID|$SERVER_FINGERPRINT"
|
||||
|
||||
uftpd -E -d -D/tmp/xx -k ~/client_key -U $CLIENT_UID -S '@authlist'
|
||||
|
||||
Server:
|
||||
|
||||
# create file "authlist" that contains "$CLIENT_UID|$CLIENT_FINGERPRINT"
|
||||
# lines for each allowed client
|
||||
|
||||
uftp -c -Y aes256-cbc -h sha1 -k ~/server_key -U $SERVER_UID -H '@authlist' file_to_send
|
||||
|
||||
----
|
||||
|
||||
Notice that the client and server UID and key generation steps above
|
||||
are the same. So, a command like `git annex multicast --gen-address`
|
||||
could be run on both the server and clients, and could store
|
||||
the addresses in the git-annex branch.
|
||||
The uftp authlist file would be derived from all known such addresses.
|
||||
|
||||
(Unlike `p2p --gen-address`, where the address allows connecting with
|
||||
and authentication with a remote over TOR, these multicast addresses
|
||||
are safe to make public.)
|
||||
|
||||
The process of setting up a multicast classroom would then be:
|
||||
|
||||
1. Teacher runs `git annex multicast --gen-address; git annex sync`
|
||||
2. Students each run `git annex multicast --gen-address; git annex sync`
|
||||
3. Teacher runs `git annex sync` once all the students have generated addresses.
|
||||
(Now the students all have received the teacher's address, and the teacher
|
||||
has received all the student's addresses.)
|
||||
4. Students each run `git annex multicast-receive`, which listens for
|
||||
files going by and stores them.
|
||||
5. Once the students are listening (*ahem*), teacher runs
|
||||
`git annex multicast-send [file]` to distribute files.
|
Loading…
Reference in a new issue