Like any good hacker I got tired of other solutions that didn't quite match my needs and made my own dropbox-like backup/sync using only rsync, ssh and encfs.
- only runs on machines I control
- server requirement is only rsync, ssh and coreutils
- basic conflict detection
- encfs --reverse to encrypt locally, store remotely
- history is rsnapshot-style hard links
- inspect history using sshfs
- can purge old history
shell aliases showing how I use it are in my config repository
encfs isn't ideal but it's the only thing that does the job. Ideally I'd use something that didn't leak so much, but it doesn't exist.
Same principle just different mechanics and assumptions.
I can't work (very effectively) in two places at once, so I don't need robust merging, just CYA synchronisation. Using only rsync features I can do a full 2-way rsync merge and catch potential conflicts, erring on the conservative so I have reasonable confidence I don't lose any work.
Minimal workstation dependencies: only bash, encfs, rsync, ssh, coreutils/findutils and optionally atd for automation. encfs is optional, too.
Instead of dvc-autosync and XMPP I just use periodic execution. I partition my stuff into smaller/high-frequency vs larger/lower-frequency to keep this efficient. These are triggered from bash (PROMPT_COMMAND, in the background) and recursive at (atd).
The local data is unencrypted on disk from this tool's POV. I use encfs --reverse and rsync the result. To browse the history, I combine sshfs with encfs in forward mode.
Linux only because that's what I use, but it should be possible to support OSX.
All in all I'm pleased I'm able to use such minimal tooling for such a successful result.
Software packaging sucks. It will continue to suck until there is a concerted effort from a quorum of stakeholders to fix it. I'm not holding my breath.
https://github.com/avdd/rsyncsync
Not polished, but it's working for me.
shell aliases showing how I use it are in my config repositoryencfs isn't ideal but it's the only thing that does the job. Ideally I'd use something that didn't leak so much, but it doesn't exist.