Building Your Own Dropbox

Ben Balbo

MySQL replication presentation ran grossly over. This did not make me happy. Organisers should have a yanking tool. Anyhoo:

DropBox is pretty cool. Why am I doing this?

You install a client, and shunt your files into the S3 cloud via DropBox’s client, and quietly syncs out to all your other clients. This is very cool, up to a point.

Ben works in a media agency. They aren’t file server savvy. They use local copies and IM them about. There was a collective SWEET JESUS NO at this point.

Tried subversion, they said, “Too Hard.”

“Let’s use Dropbox!”

…but that’s 1.3 TB of storage…

…and that would be $350 - $750/mo for DropBox!

Also account management is pretty limited - no ability to hook into LDAP or what-have-you.

Security & Privacy: It’s encrypted and so on, but it’s still out on the cloud. People may not think this is adequate for various types of data (“Oh, don’t worry about that, it’s encrypted on someone else’s servers, I think under $RANDOM_COUNTRY’s legal jurisdiction. Whay could possibly go wrong.” That’s what I heard in my head, anyway.)

Problem: Needs to be transparent. Subversion & a cron job?

Metadata needs to be in another directory, because otherwise devs can screw the repo by futzing with what they think are their project structures (“Oh I deleted that directory, because I didn’t need it any more”). The answer to this problem when you ask questions about it is apparently git.

So, git.

Create a git repo.

Have some wrapper scripts around git. You can now push and pull your stuff to and from your local workstation, so you can work with your huge files locally and share versions over the network. The wrappers try to hide the complexity around this.

Can use inotify to flag events, rather than relying on polling. A todo.

Anyone want to write a systray?

Partial checkout - currently an unsolved problem. Don’t want to pull down a terrabyte or so every time you work on a project.

Sharing & multiuser - git<->LDAP authentication is an unsolved problem.

Project is on github; help very welcome.

Share