Bittorrent Sync

Update

I no longer use or recommend btsync because of their unwillingness to publish their protocol. I don't trust them.

I use and highly recommend SyncThing.

Intro

Bittorrent sync is one of the most exciting things I've seen in a while. It allows syncing of folders across multiple computers, using bittorrent technology.

Think of it as a private, secure, free, more portable, unlimited, and customizable replacement for Dropbox.

Reasons to be excited about this:

Decentralized

Nobody (such as Dropbox) is the man-in the middle, with the ability to look at (and accidentally expose) all your data.

Transfers are faster, because they don't have to go through a middleman.

Distributed

Every computer that shares the folder is a node in a private torrent network -- the more computers you have the more copies (and performance) you have.

Private

All data transfers are encrypted. In addition, there is nothing to sign up for, no accounts, no nothing. Just download, configure, and run.

No Installation

Because the executable is just downloaded and executed, there's nothing to install, which means no root access is required, which means it can be run in all kinds of environments.

Multi-Platform

Linux, Mac, and Windows are supported.

No Limits

No size limits, except the size of your hard drive. No price per gigabyte.

No limit to how many directories or files can be shared.

No limit to how many source drives or partitions you can sync. Services like Carbonite charge more to sync external drives.

Read-Only Option

Share folders in read-only mode with others.

Download

The software is available here

Install

Nothing to install. Just extract.

View Help

Everything you need is here:

./btsync --help

Configure

This just covers Linux command-line coverage, both because Mac & Windows have a GUI tool, and because it's probably (mildly) more difficult than the others.

Yay! Config is just a simple JSON file.

Get a secret!

Run the following command to get a key. You can make as many of these as you want and replace them whenever you want. You will need one per folder you want to share:

./btsync --generate-secret

Make a Config File

Generate a default to modify:

./btsync --dump-sample-config > ~/.btsync

Modify the Config File

This is very simple because the default config file has lots of comments that explain everything. I'll go over a few options here. The most important rule is that the file must be a valid JSON file. So when you're done, load it up in your favorite JSON tool to check it. This also means you'll have to remove all the built-in comments -- they're not in valid JSON syntax...

listening_port:

Leave at zero to select random port.

Set to a real port number (higher than 1023) and open that port in your router for best performance and discoverability.

use_upnp:

Universal Plug & Play is evil. Disable it. If you're security-conscious, it's already disabled in your router.

webui:

Delete the "listen" line entirely to disable the browser interface for security.

shared_folders:

This is a list of JSON objects, one for each shared folder. For Python users, the objects are basically dictionaries. For everyone else, they're basically hash maps.

use_relay_server:

If you opened a port in your router, you can set that machine in the known_hosts section below, so set this to false.

If you leave it set to true then btsync will use bittorrent's servers to direct your traffic, adding a middleman. You're data will be encrypted, but all your transfers will go through them, slowing things down and adding a dependency.

use_tracker:

If you don't want to open a port or use bittorrent's servers, you can set up your own bittorrent tracker.

search_lan:

If all the machines you want to sync are on the same LAN, then you don't have to open up a port or use a tracker or relay server.

known_hosts:

If you did open a port on one machine, then add it to the config file for all other machines. They will each find that machine, and will then be informed about one another.

You do not need to add anything here for the "main" machine -- others will find it.

Use it!

Here are a few of the ideas I've had so far:

  • Replace Dropbox
  • Install on all your servers to share common data.
  • Use to share data between VMs and your primary desktop.
  • Share funny Reddit photos with your spouse.
  • Share kid pics with your family.
  • Use with read-only mode to keep a local copy of backups, logs, and other important items from your production server.

Comments !

blogroll

social